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/10/07 14:52:47 UTC

[01/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site 7166b5084 -> 9b6ca5d1e


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html
index 3c78583..11f7393 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html
@@ -31,276 +31,275 @@
 <span class="sourceLineNo">023</span><a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.util.Random;<a name="line.24"></a>
 <span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.junit.ClassRule;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.junit.Test;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.junit.experimental.categories.Category;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.slf4j.Logger;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.slf4j.LoggerFactory;<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span>@Category({MasterTests.class, MediumTests.class})<a name="line.35"></a>
-<span class="sourceLineNo">036</span>public class TestProcedureStoreTracker {<a name="line.36"></a>
-<span class="sourceLineNo">037</span><a name="line.37"></a>
-<span class="sourceLineNo">038</span>  @ClassRule<a name="line.38"></a>
-<span class="sourceLineNo">039</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.39"></a>
-<span class="sourceLineNo">040</span>      HBaseClassTestRule.forClass(TestProcedureStoreTracker.class);<a name="line.40"></a>
-<span class="sourceLineNo">041</span><a name="line.41"></a>
-<span class="sourceLineNo">042</span>  private static final Logger LOG = LoggerFactory.getLogger(TestProcedureStoreTracker.class);<a name="line.42"></a>
-<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>  @Test<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  public void testSeqInsertAndDelete() {<a name="line.45"></a>
-<span class="sourceLineNo">046</span>    ProcedureStoreTracker tracker = new ProcedureStoreTracker();<a name="line.46"></a>
-<span class="sourceLineNo">047</span>    assertTrue(tracker.isEmpty());<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>    final int MIN_PROC = 1;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>    final int MAX_PROC = 1 &lt;&lt; 10;<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>    // sequential insert<a name="line.52"></a>
-<span class="sourceLineNo">053</span>    for (int i = MIN_PROC; i &lt; MAX_PROC; ++i) {<a name="line.53"></a>
-<span class="sourceLineNo">054</span>      tracker.insert(i);<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>      // All the proc that we inserted should not be deleted<a name="line.56"></a>
-<span class="sourceLineNo">057</span>      for (int j = MIN_PROC; j &lt;= i; ++j) {<a name="line.57"></a>
-<span class="sourceLineNo">058</span>        assertEquals(ProcedureStoreTracker.DeleteState.NO, tracker.isDeleted(j));<a name="line.58"></a>
-<span class="sourceLineNo">059</span>      }<a name="line.59"></a>
-<span class="sourceLineNo">060</span>      // All the proc that are not yet inserted should be result as deleted<a name="line.60"></a>
-<span class="sourceLineNo">061</span>      for (int j = i + 1; j &lt; MAX_PROC; ++j) {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>        assertTrue(tracker.isDeleted(j) != ProcedureStoreTracker.DeleteState.NO);<a name="line.62"></a>
-<span class="sourceLineNo">063</span>      }<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    }<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>    // sequential delete<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    for (int i = MIN_PROC; i &lt; MAX_PROC; ++i) {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>      tracker.delete(i);<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>      // All the proc that we deleted should be deleted<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      for (int j = MIN_PROC; j &lt;= i; ++j) {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>        assertEquals(ProcedureStoreTracker.DeleteState.YES, tracker.isDeleted(j));<a name="line.72"></a>
-<span class="sourceLineNo">073</span>      }<a name="line.73"></a>
-<span class="sourceLineNo">074</span>      // All the proc that are not yet deleted should be result as not deleted<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      for (int j = i + 1; j &lt; MAX_PROC; ++j) {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>        assertEquals(ProcedureStoreTracker.DeleteState.NO, tracker.isDeleted(j));<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      }<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    }<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    assertTrue(tracker.isEmpty());<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>  @Test<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  public void testPartialTracker() {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    ProcedureStoreTracker tracker = new ProcedureStoreTracker();<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    tracker.setPartialFlag(true);<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>    // nothing in the tracker, the state is unknown<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    assertTrue(tracker.isEmpty());<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    assertEquals(ProcedureStoreTracker.DeleteState.MAYBE, tracker.isDeleted(1));<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    assertEquals(ProcedureStoreTracker.DeleteState.MAYBE, tracker.isDeleted(579));<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>    // Mark 1 as deleted, now that is a known state<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    tracker.setDeleted(1, true);<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    tracker.dump();<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    assertEquals(ProcedureStoreTracker.DeleteState.YES, tracker.isDeleted(1));<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    assertEquals(ProcedureStoreTracker.DeleteState.MAYBE, tracker.isDeleted(2));<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    assertEquals(ProcedureStoreTracker.DeleteState.MAYBE, tracker.isDeleted(579));<a name="line.97"></a>
-<span class="sourceLineNo">098</span><a name="line.98"></a>
-<span class="sourceLineNo">099</span>    // Mark 579 as non-deleted, now that is a known state<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    tracker.setDeleted(579, false);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    assertEquals(ProcedureStoreTracker.DeleteState.YES, tracker.isDeleted(1));<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    assertEquals(ProcedureStoreTracker.DeleteState.MAYBE, tracker.isDeleted(2));<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    assertEquals(ProcedureStoreTracker.DeleteState.NO, tracker.isDeleted(579));<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    assertEquals(ProcedureStoreTracker.DeleteState.MAYBE, tracker.isDeleted(577));<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    assertEquals(ProcedureStoreTracker.DeleteState.MAYBE, tracker.isDeleted(580));<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span>    tracker.setDeleted(579, true);<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    tracker.setPartialFlag(false);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    assertTrue(tracker.isEmpty());<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 testBasicCRUD() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    ProcedureStoreTracker tracker = new ProcedureStoreTracker();<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    assertTrue(tracker.isEmpty());<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span>    long[] procs = new long[] { 1, 2, 3, 4, 5, 6 };<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>    tracker.insert(procs[0]);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    tracker.insert(procs[1], new long[] { procs[2], procs[3], procs[4] });<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    assertFalse(tracker.isEmpty());<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    assertTrue(tracker.isUpdated());<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>    tracker.resetUpdates();<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    assertFalse(tracker.isUpdated());<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>    for (int i = 0; i &lt; 4; ++i) {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      tracker.update(procs[i]);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      assertFalse(tracker.isEmpty());<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      assertFalse(tracker.isUpdated());<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>    tracker.update(procs[4]);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    assertFalse(tracker.isEmpty());<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    assertTrue(tracker.isUpdated());<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>    tracker.update(procs[5]);<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    assertFalse(tracker.isEmpty());<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    assertTrue(tracker.isUpdated());<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>    for (int i = 0; i &lt; 5; ++i) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      tracker.delete(procs[i]);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      assertFalse(tracker.isEmpty());<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      assertTrue(tracker.isUpdated());<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    }<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    tracker.delete(procs[5]);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    assertTrue(tracker.isEmpty());<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>  @Test<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  public void testRandLoad() {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    final int NPROCEDURES = 2500;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    final int NRUNS = 5000;<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>    final ProcedureStoreTracker tracker = new ProcedureStoreTracker();<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>    Random rand = new Random(1);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    for (int i = 0; i &lt; NRUNS; ++i) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      assertTrue(tracker.isEmpty());<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>      int count = 0;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      while (count &lt; NPROCEDURES) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>        long procId = rand.nextLong();<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        if (procId &lt; 1) continue;<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>        tracker.setDeleted(procId, i % 2 == 0);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        count++;<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>      tracker.reset();<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>  @Test<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  public void testLoad() {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    final int MAX_PROCS = 1000;<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    final ProcedureStoreTracker tracker = new ProcedureStoreTracker();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    for (int numProcs = 1; numProcs &lt; MAX_PROCS; ++numProcs) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      for (int start = 1; start &lt;= numProcs; ++start) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>        assertTrue(tracker.isEmpty());<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>        LOG.debug("loading " + numProcs + " procs from start=" + start);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>        for (int i = start; i &lt;= numProcs; ++i) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>          tracker.setDeleted(i, false);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>        for (int i = 1; i &lt; start; ++i) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>          tracker.setDeleted(i, false);<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        }<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>        tracker.reset();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      }<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    }<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  }<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>  @Test<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  public void testDelete() {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    final ProcedureStoreTracker tracker = new ProcedureStoreTracker();<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>    long[] procIds = new long[] { 65, 1, 193 };<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      tracker.insert(procIds[i]);<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      tracker.dump();<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>    for (int i = 0; i &lt; (64 * 4); ++i) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      boolean hasProc = false;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      for (int j = 0; j &lt; procIds.length; ++j) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        if (procIds[j] == i) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          hasProc = true;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>          break;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      }<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      if (hasProc) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        assertEquals(ProcedureStoreTracker.DeleteState.NO, tracker.isDeleted(i));<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      } else {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        assertEquals("procId=" + i, ProcedureStoreTracker.DeleteState.YES, tracker.isDeleted(i));<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      }<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>  boolean isDeleted(ProcedureStoreTracker n, long procId) {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    return n.isDeleted(procId) == ProcedureStoreTracker.DeleteState.YES;<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>  boolean isDeleted(BitSetNode n, long procId) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    return n.isDeleted(procId) == ProcedureStoreTracker.DeleteState.YES;<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>   * @param active list of active proc ids. To mark them as non-deleted, since by default a proc<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   *               id is always marked deleted.<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   */<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  ProcedureStoreTracker buildTracker(long[] active, long[] updated, long[] deleted) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    ProcedureStoreTracker tracker = new ProcedureStoreTracker();<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    for (long i : active) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      tracker.insert(i);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    }<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    tracker.resetUpdates();<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    for (long i : updated) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      tracker.update(i);<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    }<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    for (long i : deleted) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      tracker.delete(i);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    return tracker;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span>  /**<a name="line.248"></a>
-<span class="sourceLineNo">249</span>   * @param active list of active proc ids. To mark them as non-deleted, since by default a proc<a name="line.249"></a>
-<span class="sourceLineNo">250</span>   *               id is always marked deleted.<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  BitSetNode buildBitSetNode(long[] active, long[] updated, long[] deleted) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    BitSetNode bitSetNode = new BitSetNode(0L, false);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    for (long i : active) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      bitSetNode.update(i);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    bitSetNode.resetUpdates();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    for (long i : updated) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      bitSetNode.update(i);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    for (long i : deleted) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      bitSetNode.delete(i);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    return bitSetNode;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>  }<a name="line.265"></a>
-<span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>  @Test<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  public void testSetDeletedIfSet() {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    final ProcedureStoreTracker tracker = new ProcedureStoreTracker();<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    final long[] procIds = new long[] { 1, 3, 7, 152, 512, 1024, 1025 };<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>    // test single proc<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      tracker.insert(procIds[i]);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    assertEquals(false, tracker.isEmpty());<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span>    for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      tracker.setDeletedIfSet(procIds[i] - 1);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      tracker.setDeletedIfSet(procIds[i]);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      tracker.setDeletedIfSet(procIds[i] + 1);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    assertEquals(true, tracker.isEmpty());<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>    // test batch<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    tracker.reset();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      tracker.insert(procIds[i]);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    }<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    assertEquals(false, tracker.isEmpty());<a name="line.290"></a>
-<span class="sourceLineNo">291</span><a name="line.291"></a>
-<span class="sourceLineNo">292</span>    tracker.setDeletedIfSet(procIds);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    assertEquals(true, tracker.isEmpty());<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  }<a name="line.294"></a>
-<span class="sourceLineNo">295</span>}<a name="line.295"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.junit.ClassRule;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.junit.Test;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.junit.experimental.categories.Category;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.slf4j.Logger;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.slf4j.LoggerFactory;<a name="line.32"></a>
+<span class="sourceLineNo">033</span><a name="line.33"></a>
+<span class="sourceLineNo">034</span>@Category({MasterTests.class, MediumTests.class})<a name="line.34"></a>
+<span class="sourceLineNo">035</span>public class TestProcedureStoreTracker {<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>  @ClassRule<a name="line.37"></a>
+<span class="sourceLineNo">038</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.38"></a>
+<span class="sourceLineNo">039</span>      HBaseClassTestRule.forClass(TestProcedureStoreTracker.class);<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>  private static final Logger LOG = LoggerFactory.getLogger(TestProcedureStoreTracker.class);<a name="line.41"></a>
+<span class="sourceLineNo">042</span><a name="line.42"></a>
+<span class="sourceLineNo">043</span>  @Test<a name="line.43"></a>
+<span class="sourceLineNo">044</span>  public void testSeqInsertAndDelete() {<a name="line.44"></a>
+<span class="sourceLineNo">045</span>    ProcedureStoreTracker tracker = new ProcedureStoreTracker();<a name="line.45"></a>
+<span class="sourceLineNo">046</span>    assertTrue(tracker.isEmpty());<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>    final int MIN_PROC = 1;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>    final int MAX_PROC = 1 &lt;&lt; 10;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>    // sequential insert<a name="line.51"></a>
+<span class="sourceLineNo">052</span>    for (int i = MIN_PROC; i &lt; MAX_PROC; ++i) {<a name="line.52"></a>
+<span class="sourceLineNo">053</span>      tracker.insert(i);<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>      // All the proc that we inserted should not be deleted<a name="line.55"></a>
+<span class="sourceLineNo">056</span>      for (int j = MIN_PROC; j &lt;= i; ++j) {<a name="line.56"></a>
+<span class="sourceLineNo">057</span>        assertEquals(ProcedureStoreTracker.DeleteState.NO, tracker.isDeleted(j));<a name="line.57"></a>
+<span class="sourceLineNo">058</span>      }<a name="line.58"></a>
+<span class="sourceLineNo">059</span>      // All the proc that are not yet inserted should be result as deleted<a name="line.59"></a>
+<span class="sourceLineNo">060</span>      for (int j = i + 1; j &lt; MAX_PROC; ++j) {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>        assertTrue(tracker.isDeleted(j) != ProcedureStoreTracker.DeleteState.NO);<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      }<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    }<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>    // sequential delete<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    for (int i = MIN_PROC; i &lt; MAX_PROC; ++i) {<a name="line.66"></a>
+<span class="sourceLineNo">067</span>      tracker.delete(i);<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>      // All the proc that we deleted should be deleted<a name="line.69"></a>
+<span class="sourceLineNo">070</span>      for (int j = MIN_PROC; j &lt;= i; ++j) {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>        assertEquals(ProcedureStoreTracker.DeleteState.YES, tracker.isDeleted(j));<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      }<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      // All the proc that are not yet deleted should be result as not deleted<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      for (int j = i + 1; j &lt; MAX_PROC; ++j) {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>        assertEquals(ProcedureStoreTracker.DeleteState.NO, tracker.isDeleted(j));<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>    assertTrue(tracker.isEmpty());<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  }<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>  @Test<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  public void testPartialTracker() {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    ProcedureStoreTracker tracker = new ProcedureStoreTracker();<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    tracker.setPartialFlag(true);<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>    // nothing in the tracker, the state is unknown<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    assertTrue(tracker.isEmpty());<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    assertEquals(ProcedureStoreTracker.DeleteState.MAYBE, tracker.isDeleted(1));<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    assertEquals(ProcedureStoreTracker.DeleteState.MAYBE, tracker.isDeleted(579));<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>    // Mark 1 as deleted, now that is a known state<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    tracker.setDeleted(1, true);<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    tracker.dump();<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    assertEquals(ProcedureStoreTracker.DeleteState.YES, tracker.isDeleted(1));<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    assertEquals(ProcedureStoreTracker.DeleteState.MAYBE, tracker.isDeleted(2));<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    assertEquals(ProcedureStoreTracker.DeleteState.MAYBE, tracker.isDeleted(579));<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>    // Mark 579 as non-deleted, now that is a known state<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    tracker.setDeleted(579, false);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    assertEquals(ProcedureStoreTracker.DeleteState.YES, tracker.isDeleted(1));<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    assertEquals(ProcedureStoreTracker.DeleteState.MAYBE, tracker.isDeleted(2));<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    assertEquals(ProcedureStoreTracker.DeleteState.NO, tracker.isDeleted(579));<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    assertEquals(ProcedureStoreTracker.DeleteState.MAYBE, tracker.isDeleted(577));<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    assertEquals(ProcedureStoreTracker.DeleteState.MAYBE, tracker.isDeleted(580));<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>    tracker.setDeleted(579, true);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    tracker.setPartialFlag(false);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    assertTrue(tracker.isEmpty());<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 testBasicCRUD() {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    ProcedureStoreTracker tracker = new ProcedureStoreTracker();<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    assertTrue(tracker.isEmpty());<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>    long[] procs = new long[] { 1, 2, 3, 4, 5, 6 };<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>    tracker.insert(procs[0]);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    tracker.insert(procs[1], new long[] { procs[2], procs[3], procs[4] });<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    assertFalse(tracker.isEmpty());<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    assertTrue(tracker.isAllModified());<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>    tracker.resetModified();<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    assertFalse(tracker.isAllModified());<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span>    for (int i = 0; i &lt; 4; ++i) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      tracker.update(procs[i]);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      assertFalse(tracker.isEmpty());<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      assertFalse(tracker.isAllModified());<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>    tracker.update(procs[4]);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    assertFalse(tracker.isEmpty());<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    assertTrue(tracker.isAllModified());<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>    tracker.update(procs[5]);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    assertFalse(tracker.isEmpty());<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    assertTrue(tracker.isAllModified());<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>    for (int i = 0; i &lt; 5; ++i) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      tracker.delete(procs[i]);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      assertFalse(tracker.isEmpty());<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      assertTrue(tracker.isAllModified());<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    }<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    tracker.delete(procs[5]);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    assertTrue(tracker.isEmpty());<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>  @Test<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  public void testRandLoad() {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    final int NPROCEDURES = 2500;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    final int NRUNS = 5000;<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>    final ProcedureStoreTracker tracker = new ProcedureStoreTracker();<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>    Random rand = new Random(1);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    for (int i = 0; i &lt; NRUNS; ++i) {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      assertTrue(tracker.isEmpty());<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>      int count = 0;<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      while (count &lt; NPROCEDURES) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>        long procId = rand.nextLong();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        if (procId &lt; 1) continue;<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>        tracker.setDeleted(procId, i % 2 == 0);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        count++;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      }<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>      tracker.reset();<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
+<span class="sourceLineNo">172</span><a name="line.172"></a>
+<span class="sourceLineNo">173</span>  @Test<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public void testLoad() {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    final int MAX_PROCS = 1000;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    final ProcedureStoreTracker tracker = new ProcedureStoreTracker();<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    for (int numProcs = 1; numProcs &lt; MAX_PROCS; ++numProcs) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      for (int start = 1; start &lt;= numProcs; ++start) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>        assertTrue(tracker.isEmpty());<a name="line.179"></a>
+<span class="sourceLineNo">180</span><a name="line.180"></a>
+<span class="sourceLineNo">181</span>        LOG.debug("loading " + numProcs + " procs from start=" + start);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>        for (int i = start; i &lt;= numProcs; ++i) {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>          tracker.setDeleted(i, false);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        }<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        for (int i = 1; i &lt; start; ++i) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>          tracker.setDeleted(i, false);<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>        tracker.reset();<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      }<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>  @Test<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  public void testDelete() {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    final ProcedureStoreTracker tracker = new ProcedureStoreTracker();<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span>    long[] procIds = new long[] { 65, 1, 193 };<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      tracker.insert(procIds[i]);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      tracker.dump();<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>    for (int i = 0; i &lt; (64 * 4); ++i) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      boolean hasProc = false;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      for (int j = 0; j &lt; procIds.length; ++j) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>        if (procIds[j] == i) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>          hasProc = true;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>          break;<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>      if (hasProc) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        assertEquals(ProcedureStoreTracker.DeleteState.NO, tracker.isDeleted(i));<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      } else {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        assertEquals("procId=" + i, ProcedureStoreTracker.DeleteState.YES, tracker.isDeleted(i));<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    }<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  }<a name="line.218"></a>
+<span class="sourceLineNo">219</span><a name="line.219"></a>
+<span class="sourceLineNo">220</span>  boolean isDeleted(ProcedureStoreTracker n, long procId) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    return n.isDeleted(procId) == ProcedureStoreTracker.DeleteState.YES;<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>  boolean isDeleted(BitSetNode n, long procId) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    return n.isDeleted(procId) == ProcedureStoreTracker.DeleteState.YES;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  }<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span>  /**<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * @param active list of active proc ids. To mark them as non-deleted, since by default a proc<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   *               id is always marked deleted.<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   */<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  ProcedureStoreTracker buildTracker(long[] active, long[] updated, long[] deleted) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    ProcedureStoreTracker tracker = new ProcedureStoreTracker();<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    for (long i : active) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      tracker.insert(i);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    }<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    tracker.resetModified();<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    for (long i : updated) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      tracker.update(i);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    }<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    for (long i : deleted) {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      tracker.delete(i);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    }<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    return tracker;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>  /**<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   * @param active list of active proc ids. To mark them as non-deleted, since by default a proc<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   *               id is always marked deleted.<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   */<a name="line.250"></a>
+<span class="sourceLineNo">251</span>  BitSetNode buildBitSetNode(long[] active, long[] updated, long[] deleted) {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    BitSetNode bitSetNode = new BitSetNode(0L, false);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    for (long i : active) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      bitSetNode.insertOrUpdate(i);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    }<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    bitSetNode.resetModified();<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    for (long i : updated) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      bitSetNode.insertOrUpdate(i);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    for (long i : deleted) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      bitSetNode.delete(i);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    }<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    return bitSetNode;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span>  @Test<a name="line.266"></a>
+<span class="sourceLineNo">267</span>  public void testSetDeletedIfSet() {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    final ProcedureStoreTracker tracker = new ProcedureStoreTracker();<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    final long[] procIds = new long[] { 1, 3, 7, 152, 512, 1024, 1025 };<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span>    // test single proc<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      tracker.insert(procIds[i]);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    }<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    assertEquals(false, tracker.isEmpty());<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>    for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      tracker.setDeletedIfModified(procIds[i] - 1);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      tracker.setDeletedIfModified(procIds[i]);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      tracker.setDeletedIfModified(procIds[i] + 1);<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    assertEquals(true, tracker.isEmpty());<a name="line.282"></a>
+<span class="sourceLineNo">283</span><a name="line.283"></a>
+<span class="sourceLineNo">284</span>    // test batch<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    tracker.reset();<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      tracker.insert(procIds[i]);<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    assertEquals(false, tracker.isEmpty());<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span>    tracker.setDeletedIfModified(procIds);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    assertEquals(true, tracker.isEmpty());<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html
index 44f63ea..8c65786 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html
@@ -431,11 +431,11 @@
 <span class="sourceLineNo">423</span>      final Procedure[] procs, final int[] updatedProcs, final int[] nonUpdatedProcs) {<a name="line.423"></a>
 <span class="sourceLineNo">424</span>    for (int index : updatedProcs) {<a name="line.424"></a>
 <span class="sourceLineNo">425</span>      long procId = procs[index].getProcId();<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      assertTrue("Procedure id : " + procId, tracker.isUpdated(procId));<a name="line.426"></a>
+<span class="sourceLineNo">426</span>      assertTrue("Procedure id : " + procId, tracker.isModified(procId));<a name="line.426"></a>
 <span class="sourceLineNo">427</span>    }<a name="line.427"></a>
 <span class="sourceLineNo">428</span>    for (int index : nonUpdatedProcs) {<a name="line.428"></a>
 <span class="sourceLineNo">429</span>      long procId = procs[index].getProcId();<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      assertFalse("Procedure id : " + procId, tracker.isUpdated(procId));<a name="line.430"></a>
+<span class="sourceLineNo">430</span>      assertFalse("Procedure id : " + procId, tracker.isModified(procId));<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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html
index 44f63ea..8c65786 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html
@@ -431,11 +431,11 @@
 <span class="sourceLineNo">423</span>      final Procedure[] procs, final int[] updatedProcs, final int[] nonUpdatedProcs) {<a name="line.423"></a>
 <span class="sourceLineNo">424</span>    for (int index : updatedProcs) {<a name="line.424"></a>
 <span class="sourceLineNo">425</span>      long procId = procs[index].getProcId();<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      assertTrue("Procedure id : " + procId, tracker.isUpdated(procId));<a name="line.426"></a>
+<span class="sourceLineNo">426</span>      assertTrue("Procedure id : " + procId, tracker.isModified(procId));<a name="line.426"></a>
 <span class="sourceLineNo">427</span>    }<a name="line.427"></a>
 <span class="sourceLineNo">428</span>    for (int index : nonUpdatedProcs) {<a name="line.428"></a>
 <span class="sourceLineNo">429</span>      long procId = procs[index].getProcId();<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      assertFalse("Procedure id : " + procId, tracker.isUpdated(procId));<a name="line.430"></a>
+<span class="sourceLineNo">430</span>      assertFalse("Procedure id : " + procId, tracker.isModified(procId));<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>


[07/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html b/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
index 9f9d0e1..49c6237 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
@@ -124,7 +124,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Public
-public class <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.177">HBaseTestingUtility</a>
+public class <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.178">HBaseTestingUtility</a>
 extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseZKTestingUtility</a></pre>
 <div class="block">Facility for testing HBase. Replacement for
  old HBaseTestCase and HBaseClusterTestCase functionality.
@@ -140,7 +140,8 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
  region-server-port are overridden such that a random port will be assigned (thus
  avoiding port contention if another local HBase instance is already running).
  <p>To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"
- setting it to true.</div>
+ setting it to true.
+ For triggering test.</div>
 </li>
 </ul>
 </div>
@@ -2018,7 +2019,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 <li class="blockList">
 <h4>TEST_DIRECTORY_KEY</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 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/HBaseTestingUtility.html#line.186">TEST_DIRECTORY_KEY</a></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/HBaseTestingUtility.html#line.187">TEST_DIRECTORY_KEY</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">can be used only with mini dfs</span></div>
 <div class="block">System property key to get test directory value. Name is as it is because mini dfs has
  hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property
@@ -2035,7 +2036,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>REGIONS_PER_SERVER_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/HBaseTestingUtility.html#line.188">REGIONS_PER_SERVER_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/HBaseTestingUtility.html#line.189">REGIONS_PER_SERVER_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.REGIONS_PER_SERVER_KEY">Constant Field Values</a></dd>
@@ -2048,7 +2049,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGIONS_PER_SERVER</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.193">DEFAULT_REGIONS_PER_SERVER</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.194">DEFAULT_REGIONS_PER_SERVER</a></pre>
 <div class="block">The default number of regions per regionserver when creating a pre-split
  table.</div>
 <dl>
@@ -2063,7 +2064,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>PRESPLIT_TEST_TABLE_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/HBaseTestingUtility.html#line.196">PRESPLIT_TEST_TABLE_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/HBaseTestingUtility.html#line.197">PRESPLIT_TEST_TABLE_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.PRESPLIT_TEST_TABLE_KEY">Constant Field Values</a></dd>
@@ -2076,7 +2077,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>PRESPLIT_TEST_TABLE</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.197">PRESPLIT_TEST_TABLE</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.198">PRESPLIT_TEST_TABLE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.PRESPLIT_TEST_TABLE">Constant Field Values</a></dd>
@@ -2089,7 +2090,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>dfsCluster</h4>
-<pre>private&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.199">dfsCluster</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.200">dfsCluster</a></pre>
 </li>
 </ul>
 <a name="hbaseCluster">
@@ -2098,7 +2099,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>hbaseCluster</h4>
-<pre>private volatile&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.201">hbaseCluster</a></pre>
+<pre>private volatile&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.202">hbaseCluster</a></pre>
 </li>
 </ul>
 <a name="mrCluster">
@@ -2107,7 +2108,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>mrCluster</h4>
-<pre>private&nbsp;org.apache.hadoop.mapred.MiniMRCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.202">mrCluster</a></pre>
+<pre>private&nbsp;org.apache.hadoop.mapred.MiniMRCluster <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.203">mrCluster</a></pre>
 </li>
 </ul>
 <a name="miniClusterRunning">
@@ -2116,7 +2117,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>miniClusterRunning</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.205">miniClusterRunning</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.206">miniClusterRunning</a></pre>
 <div class="block">If there is a mini cluster running for this testing utility instance.</div>
 </li>
 </ul>
@@ -2126,7 +2127,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>hadoopLogDir</h4>
-<pre>private&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/HBaseTestingUtility.html#line.207">hadoopLogDir</a></pre>
+<pre>private&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/HBaseTestingUtility.html#line.208">hadoopLogDir</a></pre>
 </li>
 </ul>
 <a name="dataTestDirOnTestFS">
@@ -2135,7 +2136,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>dataTestDirOnTestFS</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.211">dataTestDirOnTestFS</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.212">dataTestDirOnTestFS</a></pre>
 <div class="block">Directory on test filesystem where we put the data for this instance of
  HBaseTestingUtility</div>
 </li>
@@ -2146,7 +2147,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>connection</h4>
-<pre>private volatile&nbsp;org.apache.hadoop.hbase.client.Connection <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.216">connection</a></pre>
+<pre>private volatile&nbsp;org.apache.hadoop.hbase.client.Connection <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.217">connection</a></pre>
 <div class="block">Shared cluster connection.</div>
 </li>
 </ul>
@@ -2156,7 +2157,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>FS_URI</h4>
-<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.219">FS_URI</a></pre>
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.220">FS_URI</a></pre>
 <div class="block">Filesystem URI used for map-reduce mini-cluster setup</div>
 </li>
 </ul>
@@ -2166,7 +2167,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>MEMSTORETS_TAGS_PARAMETRIZED</h4>
-<pre>public static final&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="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.222">MEMSTORETS_TAGS_PARAMETRIZED</a></pre>
+<pre>public static final&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="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.223">MEMSTORETS_TAGS_PARAMETRIZED</a></pre>
 <div class="block">This is for unit tests parameterized with a single boolean.</div>
 </li>
 </ul>
@@ -2176,7 +2177,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOOM_AND_COMPRESSION_COMBINATIONS</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.298">BLOOM_AND_COMPRESSION_COMBINATIONS</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.299">BLOOM_AND_COMPRESSION_COMBINATIONS</a></pre>
 </li>
 </ul>
 <a name="fam1">
@@ -2185,7 +2186,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>fam1</h4>
-<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1826">fam1</a></pre>
+<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1827">fam1</a></pre>
 </li>
 </ul>
 <a name="fam2">
@@ -2194,7 +2195,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>fam2</h4>
-<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1827">fam2</a></pre>
+<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1828">fam2</a></pre>
 </li>
 </ul>
 <a name="fam3">
@@ -2203,7 +2204,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>fam3</h4>
-<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1828">fam3</a></pre>
+<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1829">fam3</a></pre>
 </li>
 </ul>
 <a name="COLUMNS">
@@ -2212,7 +2213,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>COLUMNS</h4>
-<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1829">COLUMNS</a></pre>
+<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1830">COLUMNS</a></pre>
 </li>
 </ul>
 <a name="MAXVERSIONS">
@@ -2221,7 +2222,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>MAXVERSIONS</h4>
-<pre>private static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1830">MAXVERSIONS</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1831">MAXVERSIONS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.MAXVERSIONS">Constant Field Values</a></dd>
@@ -2234,7 +2235,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>FIRST_CHAR</h4>
-<pre>public static final&nbsp;char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1832">FIRST_CHAR</a></pre>
+<pre>public static final&nbsp;char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1833">FIRST_CHAR</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.FIRST_CHAR">Constant Field Values</a></dd>
@@ -2247,7 +2248,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>LAST_CHAR</h4>
-<pre>public static final&nbsp;char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1833">LAST_CHAR</a></pre>
+<pre>public static final&nbsp;char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1834">LAST_CHAR</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.LAST_CHAR">Constant Field Values</a></dd>
@@ -2260,7 +2261,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>START_KEY_BYTES</h4>
-<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1834">START_KEY_BYTES</a></pre>
+<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1835">START_KEY_BYTES</a></pre>
 </li>
 </ul>
 <a name="START_KEY">
@@ -2269,7 +2270,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>START_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/HBaseTestingUtility.html#line.1835">START_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/HBaseTestingUtility.html#line.1836">START_KEY</a></pre>
 </li>
 </ul>
 <a name="ROWS">
@@ -2278,7 +2279,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>ROWS</h4>
-<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2388">ROWS</a></pre>
+<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2389">ROWS</a></pre>
 <div class="block">All the row values for the data loaded by <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#loadTable-org.apache.hadoop.hbase.client.Table-byte:A-"><code>loadTable(Table, byte[])</code></a></div>
 </li>
 </ul>
@@ -2288,7 +2289,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>KEYS</h4>
-<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2403">KEYS</a></pre>
+<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2404">KEYS</a></pre>
 </li>
 </ul>
 <a name="KEYS_FOR_HBA_CREATE_TABLE">
@@ -2297,7 +2298,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>KEYS_FOR_HBA_CREATE_TABLE</h4>
-<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2415">KEYS_FOR_HBA_CREATE_TABLE</a></pre>
+<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2416">KEYS_FOR_HBA_CREATE_TABLE</a></pre>
 </li>
 </ul>
 <a name="hbaseAdmin">
@@ -2306,7 +2307,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>hbaseAdmin</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.client.HBaseAdmin <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2967">hbaseAdmin</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.client.HBaseAdmin <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2968">hbaseAdmin</a></pre>
 </li>
 </ul>
 <a name="random">
@@ -2315,7 +2316,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>random</h4>
-<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3712">random</a></pre>
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3713">random</a></pre>
 </li>
 </ul>
 <a name="portAllocator">
@@ -2324,7 +2325,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockListLast">
 <li class="blockList">
 <h4>portAllocator</h4>
-<pre>private static final&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility.PortAllocator</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3714">portAllocator</a></pre>
+<pre>private static final&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility.PortAllocator</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3715">portAllocator</a></pre>
 </li>
 </ul>
 </li>
@@ -2341,7 +2342,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>HBaseTestingUtility</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.314">HBaseTestingUtility</a>()</pre>
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.315">HBaseTestingUtility</a>()</pre>
 <div class="block"><p>Create an HBaseTestingUtility using a default configuration.
 
  <p>Initially, all tmp files are written to a local test data directory.
@@ -2360,7 +2361,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HBaseTestingUtility</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.332">HBaseTestingUtility</a>(@Nullable
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.333">HBaseTestingUtility</a>(@Nullable
                            org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block"><p>Create an HBaseTestingUtility using a given configuration.
 
@@ -2392,7 +2393,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>available</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.230">available</a>(int&nbsp;port)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.231">available</a>(int&nbsp;port)</pre>
 <div class="block">Checks to see if a specific port is available.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -2408,7 +2409,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>bloomAndCompressionCombinations</h4>
-<pre>private static&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="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.262">bloomAndCompressionCombinations</a>()</pre>
+<pre>private static&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="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.263">bloomAndCompressionCombinations</a>()</pre>
 <div class="block">Create all combinations of Bloom filters and compression algorithms for
  testing.</div>
 </li>
@@ -2419,7 +2420,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>memStoreTSAndTagsCombination</h4>
-<pre>private static&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="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.276">memStoreTSAndTagsCombination</a>()</pre>
+<pre>private static&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="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.277">memStoreTSAndTagsCombination</a>()</pre>
 <div class="block">Create combination of memstoreTS and tags</div>
 </li>
 </ul>
@@ -2429,7 +2430,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <ul class="blockList">
 <li class="blockList">
 <h4>memStoreTSTagsAndOffheapCombination</h4>
-<pre>public static&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="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.285">memStoreTSTagsAndOffheapCombination</a>()</pre>
+<pre>public static&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="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.286">memStoreTSTagsAndOffheapCombination</a>()</pre>
 </li>
 </ul>
 <a name="createLocalHTU--">
@@ -2439,7 +2440,7 @@ private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/jav
 <li class="blockList">
 <h4>createLocalHTU</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 static&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.363">createLocalHTU</a>()</pre>
+public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.364">createLocalHTU</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">use <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#HBaseTestingUtility--"><code>HBaseTestingUtility()</code></a> instead</span></div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -2454,7 +2455,7 @@ public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
 <li class="blockList">
 <h4>createLocalHTU</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 static&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.372">createLocalHTU</a>(org.apache.hadoop.conf.Configuration&nbsp;c)</pre>
+public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.373">createLocalHTU</a>(org.apache.hadoop.conf.Configuration&nbsp;c)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">use <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#HBaseTestingUtility-org.apache.hadoop.conf.Configuration-"><code>HBaseTestingUtility(Configuration)</code></a> instead</span></div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -2468,7 +2469,7 @@ public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegionAndWAL</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.379">closeRegionAndWAL</a>(org.apache.hadoop.hbase.regionserver.Region&nbsp;r)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.380">closeRegionAndWAL</a>(org.apache.hadoop.hbase.regionserver.Region&nbsp;r)
                               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">Close both the region <code>r</code> and it's underlying WAL. For use in tests.</div>
 <dl>
@@ -2483,7 +2484,7 @@ public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegionAndWAL</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.386">closeRegionAndWAL</a>(org.apache.hadoop.hbase.regionserver.HRegion&nbsp;r)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.387">closeRegionAndWAL</a>(org.apache.hadoop.hbase.regionserver.HRegion&nbsp;r)
                               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">Close both the HRegion <code>r</code> and it's underlying WAL. For use in tests.</div>
 <dl>
@@ -2498,7 +2499,7 @@ public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
 <ul class="blockList">
 <li class="blockList">
 <h4>getConfiguration</h4>
-<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.405">getConfiguration</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.406">getConfiguration</a>()</pre>
 <div class="block">Returns this classes's instance of <code>Configuration</code>.  Be careful how
  you use the returned Configuration since <code>Connection</code> instances
  can be shared.  The Map of Connections is keyed by the Configuration.  If
@@ -2521,7 +2522,7 @@ public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
 <ul class="blockList">
 <li class="blockList">
 <h4>setHBaseCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.409">setHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a>&nbsp;hbaseCluster)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.410">setHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/HBaseCluster.html" title="class in org.apache.hadoop.hbase">HBaseCluster</a>&nbsp;hbaseCluster)</pre>
 </li>
 </ul>
 <a name="setupDataTestDir--">
@@ -2530,7 +2531,7 @@ public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
 <ul class="blockList">
 <li class="blockList">
 <h4>setupDataTestDir</h4>
-<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.430">setupDataTestDir</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.431">setupDataTestDir</a>()</pre>
 <div class="block">Home our data in a dir under <a href="../../../../org/apache/hadoop/hbase/HBaseCommonTestingUtility.html#DEFAULT_BASE_TEST_DIRECTORY"><code>HBaseCommonTestingUtility.DEFAULT_BASE_TEST_DIRECTORY</code></a>.
  Give it a random name so can have many concurrent tests running if
  we need to.  It needs to amend the <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#TEST_DIRECTORY_KEY"><code>TEST_DIRECTORY_KEY</code></a>
@@ -2557,7 +2558,7 @@ public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
 <ul class="blockList">
 <li class="blockList">
 <h4>createSubDirAndSystemProperty</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.454">createSubDirAndSystemProperty</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;propertyName,
+<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.455">createSubDirAndSystemProperty</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;propertyName,
                                            org.apache.hadoop.fs.Path&nbsp;parent,
                                            <a href="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;subDirName)</pre>
 </li>
@@ -2568,7 +2569,7 @@ public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
 <ul class="blockList">
 <li class="blockList">
 <h4>getBaseTestDirOnTestFS</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.486">getBaseTestDirOnTestFS</a>()
+<pre>private&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.487">getBaseTestDirOnTestFS</a>()
                                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -2589,7 +2590,7 @@ public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
 <li class="blockList">
 <h4>getMetaTableDescriptor</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;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.497">getMetaTableDescriptor</a>()</pre>
+public&nbsp;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.498">getMetaTableDescriptor</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
              use <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getMetaTableDescriptorBuilder--"><code>getMetaTableDescriptorBuilder()</code></a></span></div>
 <dl>
@@ -2604,7 +2605,7 @@ public&nbsp;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../s
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetaTableDescriptorBuilder</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.client.TableDescriptorBuilder&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.504">getMetaTableDescriptorBuilder</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.client.TableDescriptorBuilder&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.505">getMetaTableDescriptorBuilder</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>META table descriptor</dd>
@@ -2617,7 +2618,7 @@ public&nbsp;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../s
 <ul class="blockList">
 <li class="blockList">
 <h4>getDataTestDirOnTestFS</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.518">getDataTestDirOnTestFS</a>()
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.519">getDataTestDirOnTestFS</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">Returns a Path in the test filesystem, obtained from <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getTestFileSystem--"><code>getTestFileSystem()</code></a>
  to write temporary test data. Call this method after setting up the mini dfs cluster
@@ -2636,7 +2637,7 @@ public&nbsp;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../s
 <ul class="blockList">
 <li class="blockList">
 <h4>getDataTestDirOnTestFS</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.533">getDataTestDirOnTestFS</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;subdirName)
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.534">getDataTestDirOnTestFS</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;subdirName)
                                                  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">Returns a Path in the test filesystem, obtained from <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getTestFileSystem--"><code>getTestFileSystem()</code></a>
  to write temporary test data. Call this method after setting up the mini dfs cluster
@@ -2657,7 +2658,7 @@ public&nbsp;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../s
 <ul class="blockList">
 <li class="blockList">
 <h4>setupDataTestDirOnTestFS</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.541">setupDataTestDirOnTestFS</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.542">setupDataTestDirOnTestFS</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">Sets up a path in test filesystem to be used by tests.
  Creates a new directory if not already setup.</div>
@@ -2673,7 +2674,7 @@ public&nbsp;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../s
 <ul class="blockList">
 <li class="blockList">
 <h4>getNewDataTestDirOnTestFS</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.553">getNewDataTestDirOnTestFS</a>()
+<pre>private&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.554">getNewDataTestDirOnTestFS</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">Sets up a new path in test filesystem to be used by tests.</div>
 <dl>
@@ -2688,7 +2689,7 @@ public&nbsp;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../s
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupDataTestDirOnTestFS</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.578">cleanupDataTestDirOnTestFS</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.579">cleanupDataTestDirOnTestFS</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">Cleans the test data directory on the test filesystem.</div>
 <dl>
@@ -2705,7 +2706,7 @@ public&nbsp;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../s
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupDataTestDirOnTestFS</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.590">cleanupDataTestDirOnTestFS</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;subdirName)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.591">cleanupDataTestDirOnTestFS</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;subdirName)
                                    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">Cleans a subdirectory under the test data directory on the test filesystem.</div>
 <dl>
@@ -2722,7 +2723,7 @@ public&nbsp;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../s
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniDFSCluster</h4>
-<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.602">startMiniDFSCluster</a>(int&nbsp;servers)
+<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.603">startMiniDFSCluster</a>(int&nbsp;servers)
                                                           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>
 <div class="block">Start a minidfscluster.</div>
 <dl>
@@ -2743,7 +2744,7 @@ public&nbsp;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../s
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniDFSCluster</h4>
-<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.617">startMiniDFSCluster</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;hosts)
+<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.618">startMiniDFSCluster</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;hosts)
                                                           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>
 <div class="block">Start a minidfscluster.
  This is useful if you want to run datanode on distinct hosts for things
@@ -2768,7 +2769,7 @@ public&nbsp;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../s
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniDFSCluster</h4>
-<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.635">startMiniDFSCluster</a>(int&nbsp;servers,
+<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.636">startMiniDFSCluster</a>(int&nbsp;servers,
                                                                  <a href="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;hosts)
                                                           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>
 <div class="block">Start a minidfscluster.
@@ -2792,7 +2793,7 @@ public&nbsp;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../s
 <ul class="blockList">
 <li class="blockList">
 <h4>setFs</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.640">setFs</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.641">setFs</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>
@@ -2806,7 +2807,7 @@ public&nbsp;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../s
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniDFSCluster</h4>
-<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.652">startMiniDFSCluster</a>(int&nbsp;servers,
+<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.653">startMiniDFSCluster</a>(int&nbsp;servers,
                                                                  <a href="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;racks,
                                                                  <a href="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;hosts)
                                                           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>
@@ -2822,7 +2823,7 @@ public&nbsp;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../s
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniDFSClusterForTestWAL</h4>
-<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.683">startMiniDFSClusterForTestWAL</a>(int&nbsp;namenodePort)
+<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.684">startMiniDFSClusterForTestWAL</a>(int&nbsp;namenodePort)
                                                                     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>
@@ -2836,7 +2837,7 @@ public&nbsp;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../s
 <ul class="blockList">
 <li class="blockList">
 <h4>createDirsAndSetProperties</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.691">createDirsAndSetProperties</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.692">createDirsAndSetProperties</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">This is used before starting HDFS and map-reduce mini-clusters</div>
 <dl>
@@ -2851,7 +2852,7 @@ public&nbsp;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../s
 <ul class="blockList">
 <li class="blockList">
 <h4>isReadShortCircuitOn</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.719">isReadShortCircuitOn</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.720">isReadShortCircuitOn</a>()</pre>
 <div class="block">Get the HBase setting for dfs.client.read.shortcircuit from the conf or a system property.
   This allows to specify this parameter on the command line.
    If not set, default is true.</div>
@@ -2863,7 +2864,7 @@ public&nbsp;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../s
 <ul class="blockList">
 <li class="blockList">
 <h4>enableShortCircuit</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.732">enableShortCircuit</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.733">enableShortCircuit</a>()</pre>
 <div class="block">Enable the short circuit read, unless configured differently.
  Set both HBase and HDFS settings, including skipping the hdfs checksum checks.</div>
 </li>
@@ -2874,7 +2875,7 @@ public&nbsp;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../s
 <ul class="blockList">
 <li class="blockList">
 <h4>createDirAndSetProperty</h4>
-<pre>private&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/HBaseTestingUtility.html#line.747">createDirAndSetProperty</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;relPath,
+<pre>private&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/HBaseTestingUtility.html#line.748">createDirAndSetProperty</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;relPath,
                                        <a href="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;property)</pre>
 </li>
 </ul>
@@ -2884,7 +2885,7 @@ public&nbsp;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../s
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdownMiniDFSCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.761">shutdownMiniDFSCluster</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.762">shutdownMiniDFSCluster</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">Shuts down instance created by call to <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#startMiniDFSCluster-int-"><code>startMiniDFSCluster(int)</code></a>
  or does nothing.</div>
@@ -2901,7 +2902,7 @@ public&nbsp;org.apache.hadoop.hbase.HTableDescriptor&nbsp;<a href="../../../../s
 <li class="blockList">
 <h4>startMiniCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.780">startMiniCluster</a>(boolean&nbsp;createWALDir)
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.781">startMiniCluster</a>(boolean&nbsp;createWALDir)
                                               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>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Use <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#startMiniCluster-org.apache.hadoop.hbase.StartMiniClusterOption-"><code>startMiniCluster(StartMiniClusterOption)</code></a> instead.</span></div>
 <div class="block">Start up a minicluster of hbase, dfs, and zookeeper where WAL's walDir is created separately.
@@ -2925,7 +2926,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.796">startMiniCluster</a>(int&nbsp;numSlaves,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.797">startMiniCluster</a>(int&nbsp;numSlaves,
                                                      boolean&nbsp;createRootDir)
                                               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>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Use <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#startMiniCluster-org.apache.hadoop.hbase.StartMiniClusterOption-"><code>startMiniCluster(StartMiniClusterOption)</code></a> instead.</span></div>
@@ -2951,7 +2952,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.814">startMiniCluster</a>(int&nbsp;numSlaves,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.815">startMiniCluster</a>(int&nbsp;numSlaves,
                                                      boolean&nbsp;createRootDir,
                                                      boolean&nbsp;createWALDir)
                                               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>
@@ -2979,7 +2980,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.833">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.834">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numSlaves,
                                                      boolean&nbsp;createRootDir)
                                               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>
@@ -3007,7 +3008,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.851">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.852">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numSlaves)
                                               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>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Use <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#startMiniCluster-org.apache.hadoop.hbase.StartMiniClusterOption-"><code>startMiniCluster(StartMiniClusterOption)</code></a> instead.</span></div>
@@ -3033,7 +3034,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.870">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.871">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numSlaves,
                                                      <a href="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;dataNodeHosts,
                                                      boolean&nbsp;createRootDir)
@@ -3064,7 +3065,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.890">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.891">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numSlaves,
                                                      <a href="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;dataNodeHosts)
                                               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>
@@ -3093,7 +3094,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.909">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.910">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numRegionServers,
                                                      int&nbsp;numDataNodes)
                                               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>
@@ -3121,7 +3122,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.931">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.932">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numSlaves,
                                                      <a href="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;dataNodeHosts,
                                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends org.apache.hadoop.hbase.master.HMaster&gt;&nbsp;masterClass,
@@ -3154,7 +3155,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.958">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.959">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numRegionServers,
                                                      int&nbsp;numDataNodes,
                                                      <a href="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;dataNodeHosts,
@@ -3189,7 +3190,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.987">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.988">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numRegionServers,
                                                      int&nbsp;numDataNodes,
                                                      <a href="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;dataNodeHosts,
@@ -3227,7 +3228,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1007">startMiniCluster</a>(int&nbsp;numSlaves)
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1008">startMiniCluster</a>(int&nbsp;numSlaves)
                                   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>
 <div class="block">Start up a minicluster of hbase, dfs and zookeeper clusters with given slave node number.
  All other options will use default values, defined in <a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.Builder.html" title="class in org.apache.hadoop.hbase"><code>StartMiniClusterOption.Builder</code></a>.</div>
@@ -3248,7 +3249,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1019">startMiniCluster</a>()
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1020">startMiniCluster</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>
 <div class="block">Start up a minicluster of hbase, dfs and zookeeper all using default options.
  Option default value can be found in <a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.Builder.html" title="class in org.apache.hadoop.hbase"><code>StartMiniClusterOption.Builder</code></a>.</div>
@@ -3267,7 +3268,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1029">startMiniCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a>&nbsp;option)
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1030">startMiniCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a>&nbsp;option)
                                   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>
 <div class="block">Start up a mini cluster of hbase, optionally dfs and zookeeper if needed.
  It modifies Configuration.  It homes the cluster data directory under a random
@@ -3286,7 +3287,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniHBaseCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1067">startMiniHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a>&nbsp;option)
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1068">startMiniHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a>&nbsp;option)
                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Starts up mini hbase cluster.
@@ -3310,7 +3311,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniHBaseCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1113">startMiniHBaseCluster</a>()
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1114">startMiniHBaseCluster</a>()
                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Starts up mini hbase cluster using default options.
@@ -3332,7 +3333,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniHBaseCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1128">startMiniHBaseCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1129">startMiniHBaseCluster</a>(int&nbsp;numMasters,
                                                           int&nbsp;numRegionServers)
                                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -3361,7 +3362,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniHBaseCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1147">startMiniHBaseCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1148">startMiniHBaseCluster</a>(int&nbsp;numMasters,
                                                           int&nbsp;numRegionServers,
                                                           <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="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;rsPorts)
                                                    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>,
@@ -3392,7 +3393,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniHBaseCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1170">startMiniHBaseCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1171">startMiniHBaseCluster</a>(int&nbsp;numMasters,
                                                           int&nbsp;numRegionServers,
                                                           <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="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;rsPorts,
                                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends org.apache.hadoop.hbase.master.HMaster&gt;&nbsp;masterClass,
@@ -3430,7 +3431,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>restartHBaseCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1186">restartHBaseCluster</a>(int&nbsp;servers)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1187">restartHBaseCluster</a>(int&nbsp;servers)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Starts the hbase cluster up again after shutting it down previously in a
@@ -3450,7 +3451,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getMiniHBaseCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1214">getMiniHBaseCluster</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1215">getMiniHBaseCluster</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Current mini hbase cluster. Only has something in it after a call
@@ -3466,7 +3467,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdownMiniCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1227">shutdownMiniCluster</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1228">shutdownMiniCluster</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>
 <div class="block">Stops mini hbase, zk, and hdfs clusters.</div>
 <dl>
@@ -3484,7 +3485,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdownMiniHBaseCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1241">shutdownMiniHBaseCluster</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1242">shutdownMiniHBaseCluster</a>()
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Shutdown HBase mini cluster.  Does not shutdown zk or dfs if running.</div>
 <dl>
@@ -3499,7 +3500,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getDefaultRootDirPath</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1273">getDefaultRootDirPath</a>(boolean&nbsp;create)
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1274">getDefaultRootDirPath</a>(boolean&nbsp;create)
                                                 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">Returns the path to the default root dir the minicluster uses. If <code>create</code>
  is true, a new root directory path is fetched irrespective of whether it has been fetched
@@ -3519,7 +3520,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getDefaultRootDirPath</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1288">getDefaultRootDirPath</a>()
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1289">getDefaultRootDirPath</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">Same as {<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getDefaultRootDirPath-boolean-"><code>getDefaultRootDirPath(boolean create)</code></a>
  except that <code>create</code> flag is false.
@@ -3538,7 +3539,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>createRootDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1304">createRootDir</a>(boolean&nbsp;create)
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1305">createRootDir</a>(boolean&nbsp;create)
                                         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">Creates an hbase rootdir in user home directory.  Also creates hbase
  version file.  Normally you won't make use of this method.  Root hbasedir
@@ -3563,7 +3564,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>createRootDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1319">createRootDir</a>()
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1320">createRootDir</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">Same as <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#createRootDir-boolean-"><code>createRootDir(boolean create)</code></a>
  except that <code>create</code> flag is false.</div>
@@ -3581,7 +3582,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>createWALRootDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1332">createWALRootDir</a>()
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1333">createWALRootDir</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">Creates a hbase walDir in the user's home directory.
  Normally you won't make use of this method. Root hbaseWALDir
@@ -3601,7 +3602,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>setHBaseFsTmpDir</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1340">setHBaseFsTmpDir</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1341">setHBaseFsTmpDir</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>
@@ -3615,7 +3616,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>flush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hba

<TRUNCATED>

[03/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
index 0c894de..65a28b9 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
@@ -179,4145 +179,4146 @@
 <span class="sourceLineNo">171</span> * avoiding port contention if another local HBase instance is already running).<a name="line.171"></a>
 <span class="sourceLineNo">172</span> * &lt;p&gt;To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"<a name="line.172"></a>
 <span class="sourceLineNo">173</span> * setting it to true.<a name="line.173"></a>
-<span class="sourceLineNo">174</span> */<a name="line.174"></a>
-<span class="sourceLineNo">175</span>@InterfaceAudience.Public<a name="line.175"></a>
-<span class="sourceLineNo">176</span>@SuppressWarnings("deprecation")<a name="line.176"></a>
-<span class="sourceLineNo">177</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<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>   * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * used in mini dfs.<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   * @deprecated can be used only with mini dfs<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   */<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  @Deprecated<a name="line.185"></a>
-<span class="sourceLineNo">186</span>  private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>  public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  /**<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * The default number of regions per regionserver when creating a pre-split<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * table.<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">174</span> * For triggering test.<a name="line.174"></a>
+<span class="sourceLineNo">175</span> */<a name="line.175"></a>
+<span class="sourceLineNo">176</span>@InterfaceAudience.Public<a name="line.176"></a>
+<span class="sourceLineNo">177</span>@SuppressWarnings("deprecation")<a name="line.177"></a>
+<span class="sourceLineNo">178</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<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>   * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * used in mini dfs.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * @deprecated can be used only with mini dfs<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   */<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  @Deprecated<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>  public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * The default number of regions per regionserver when creating a pre-split<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   * table.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>   */<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.194"></a>
 <span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>  public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>  private MiniDFSCluster dfsCluster = null;<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>  private volatile HBaseCluster hbaseCluster = null;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private MiniMRCluster mrCluster = null;<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>  /** If there is a mini cluster running for this testing utility instance. */<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  private volatile boolean miniClusterRunning;<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  private String hadoopLogDir;<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>  /** Directory on test filesystem where we put the data for this instance of<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    * HBaseTestingUtility*/<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  private Path dataTestDirOnTestFS = null;<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>  /**<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * Shared cluster connection.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   */<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  private volatile Connection connection;<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>  /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  private static String FS_URI;<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>  /** This is for unit tests parameterized with a single boolean. */<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  public static final List&lt;Object[]&gt; MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<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>   * Checks to see if a specific port is available.<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   *<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @param port the port number to check for availability<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the port is available, or &lt;tt&gt;false&lt;/tt&gt; if not<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   */<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  public static boolean available(int port) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    ServerSocket ss = null;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    DatagramSocket ds = null;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    try {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      ss = new ServerSocket(port);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      ss.setReuseAddress(true);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      ds = new DatagramSocket(port);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      ds.setReuseAddress(true);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      return true;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    } catch (IOException e) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      // Do nothing<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    } finally {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      if (ds != null) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        ds.close();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      }<a name="line.244"></a>
-<span class="sourceLineNo">245</span><a name="line.245"></a>
-<span class="sourceLineNo">246</span>      if (ss != null) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        try {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          ss.close();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        } catch (IOException e) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          /* should not be thrown */<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><a name="line.254"></a>
-<span class="sourceLineNo">255</span>    return false;<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>  /**<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * Create all combinations of Bloom filters and compression algorithms for<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * testing.<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   */<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  private static List&lt;Object[]&gt; bloomAndCompressionCombinations() {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    for (Compression.Algorithm comprAlgo :<a name="line.264"></a>
-<span class="sourceLineNo">265</span>         HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      for (BloomType bloomType : BloomType.values()) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>        configurations.add(new Object[] { comprAlgo, bloomType });<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>    return Collections.unmodifiableList(configurations);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  /**<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * Create combination of memstoreTS and tags<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  private static List&lt;Object[]&gt; memStoreTSAndTagsCombination() {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    configurations.add(new Object[] { false, false });<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    configurations.add(new Object[] { false, true });<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    configurations.add(new Object[] { true, false });<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    configurations.add(new Object[] { true, true });<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    return Collections.unmodifiableList(configurations);<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>  public static List&lt;Object[]&gt; memStoreTSTagsAndOffheapCombination() {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    configurations.add(new Object[] { false, false, true });<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    configurations.add(new Object[] { false, false, false });<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    configurations.add(new Object[] { false, true, true });<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    configurations.add(new Object[] { false, true, false });<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    configurations.add(new Object[] { true, false, true });<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    configurations.add(new Object[] { true, false, false });<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    configurations.add(new Object[] { true, true, true });<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    configurations.add(new Object[] { true, true, false });<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    return Collections.unmodifiableList(configurations);<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>  public static final Collection&lt;Object[]&gt; BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      bloomAndCompressionCombinations();<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>  public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.197"></a>
+<span class="sourceLineNo">198</span>  public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>  private MiniDFSCluster dfsCluster = null;<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>  private volatile HBaseCluster hbaseCluster = null;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  private MiniMRCluster mrCluster = null;<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>  /** If there is a mini cluster running for this testing utility instance. */<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  private volatile boolean miniClusterRunning;<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>  private String hadoopLogDir;<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>  /** Directory on test filesystem where we put the data for this instance of<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    * HBaseTestingUtility*/<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  private Path dataTestDirOnTestFS = null;<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>   * Shared cluster connection.<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   */<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  private volatile Connection connection;<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>  /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  private static String FS_URI;<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>  /** This is for unit tests parameterized with a single boolean. */<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  public static final List&lt;Object[]&gt; MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<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>   * Checks to see if a specific port is available.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   *<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * @param port the port number to check for availability<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the port is available, or &lt;tt&gt;false&lt;/tt&gt; if not<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  public static boolean available(int port) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    ServerSocket ss = null;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    DatagramSocket ds = null;<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    try {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      ss = new ServerSocket(port);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      ss.setReuseAddress(true);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      ds = new DatagramSocket(port);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      ds.setReuseAddress(true);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      return true;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    } catch (IOException e) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      // Do nothing<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    } finally {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      if (ds != null) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        ds.close();<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      }<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>      if (ss != null) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        try {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          ss.close();<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        } catch (IOException e) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          /* should not be thrown */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      }<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    }<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>    return false;<a name="line.256"></a>
+<span class="sourceLineNo">257</span>  }<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span>  /**<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * Create all combinations of Bloom filters and compression algorithms for<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * testing.<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   */<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  private static List&lt;Object[]&gt; bloomAndCompressionCombinations() {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    for (Compression.Algorithm comprAlgo :<a name="line.265"></a>
+<span class="sourceLineNo">266</span>         HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      for (BloomType bloomType : BloomType.values()) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>        configurations.add(new Object[] { comprAlgo, bloomType });<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>    return Collections.unmodifiableList(configurations);<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>   * Create combination of memstoreTS and tags<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   */<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  private static List&lt;Object[]&gt; memStoreTSAndTagsCombination() {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    configurations.add(new Object[] { false, false });<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    configurations.add(new Object[] { false, true });<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    configurations.add(new Object[] { true, false });<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    configurations.add(new Object[] { true, true });<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    return Collections.unmodifiableList(configurations);<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>  public static List&lt;Object[]&gt; memStoreTSTagsAndOffheapCombination() {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    configurations.add(new Object[] { false, false, true });<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    configurations.add(new Object[] { false, false, false });<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    configurations.add(new Object[] { false, true, true });<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    configurations.add(new Object[] { false, true, false });<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    configurations.add(new Object[] { true, false, true });<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    configurations.add(new Object[] { true, false, false });<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    configurations.add(new Object[] { true, true, true });<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    configurations.add(new Object[] { true, true, false });<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    return Collections.unmodifiableList(configurations);<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>  public static final Collection&lt;Object[]&gt; BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      bloomAndCompressionCombinations();<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>   * &lt;p&gt;Create an HBaseTestingUtility using a default configuration.<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   *<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   *<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * &lt;p&gt;Previously, there was a distinction between the type of utility returned by<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * at which point they will switch to using mini DFS for storage.<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   */<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  public HBaseTestingUtility() {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    this(HBaseConfiguration.create());<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  }<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span>  /**<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * &lt;p&gt;Create an HBaseTestingUtility using a given configuration.<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   *<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   *<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * &lt;p&gt;Previously, there was a distinction between the type of utility returned by<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * at which point they will switch to using mini DFS for storage.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   *<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * @param conf The configuration to use for further operations<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   */<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    super(conf);<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>    // a hbase checksum verification failure will cause unit tests to fail<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.336"></a>
-<span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>    // Save this for when setting default file:// breaks things<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    if (this.conf.get("fs.defaultFS") != null) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    // Every cluster is a local cluster until we start DFS<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    // Note that conf could be null, but this.conf will not be<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    String dataTestDir = getDataTestDir().toString();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    this.conf.set("fs.defaultFS","file:///");<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    // If the value for random ports isn't set set it to true, thus making<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    // tests opt-out for random port assignment<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  }<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>  /**<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility()} instead<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * @return a normal HBaseTestingUtility<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   */<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  @Deprecated<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  public static HBaseTestingUtility createLocalHTU() {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    return new HBaseTestingUtility();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>  /**<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility(Configuration)} instead<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * @return a normal HBaseTestingUtility<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   */<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  @Deprecated<a name="line.371"></a>
-<span class="sourceLineNo">372</span>  public static HBaseTestingUtility createLocalHTU(Configuration c) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    return new HBaseTestingUtility(c);<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>   * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   */<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    closeRegionAndWAL((HRegion)r);<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>  /**<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   */<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    if (r == null) return;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    r.close();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    if (r.getWAL() == null) return;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    r.getWAL().close();<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  /**<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   * Returns this classes's instance of {@link Configuration}.  Be careful how<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   * you use the returned Configuration since {@link Connection} instances<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   * can be shared.  The Map of Connections is keyed by the Configuration.  If<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * say, a Connection was being used against a cluster that had been shutdown,<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * be wholesome.  Rather than use the return direct, its usually best to<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * make a copy and use that.  Do<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * &lt;code&gt;Configuration c = new Configuration(INSTANCE.getConfiguration());&lt;/code&gt;<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * @return Instance of Configuration.<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   */<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  @Override<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  public Configuration getConfiguration() {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    return super.getConfiguration();<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>  public void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    this.hbaseCluster = hbaseCluster;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>  }<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>  /**<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * Give it a random name so can have many concurrent tests running if<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * we need to.  It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * System property, as it's what minidfscluster bases<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   * it data dir on.  Moding a System property is not the way to do concurrent<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * instances -- another instance could grab the temporary<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * value unintentionally -- but not anything can do about it at moment;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * single instance only is how the minidfscluster works.<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   *<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * We also create the underlying directory for<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   *  hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   *  in the conf, and as a system property for hadoop.tmp.dir<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   *<a name="line.426"></a>
-<span class="sourceLineNo">427</span>   * @return The calculated data test build directory, if newly-created.<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   */<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  @Override<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  protected Path setupDataTestDir() {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    Path testPath = super.setupDataTestDir();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    if (null == testPath) {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      return null;<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>    createSubDirAndSystemProperty(<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      "hadoop.log.dir",<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      testPath, "hadoop-log-dir");<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>    // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    //  we want our own value to ensure uniqueness on the same machine<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    createSubDirAndSystemProperty(<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      "hadoop.tmp.dir",<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      testPath, "hadoop-tmp-dir");<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>    // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    createSubDir(<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      "mapreduce.cluster.local.dir",<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      testPath, "mapred-local-dir");<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>    return testPath;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  private void createSubDirAndSystemProperty(<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    String propertyName, Path parent, String subDirName){<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    String sysValue = System.getProperty(propertyName);<a name="line.457"></a>
-<span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span>    if (sysValue != null) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // There is already a value set. So we do nothing but hope<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      //  that there will be no conflicts<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.462"></a>
-<span class="sourceLineNo">463</span>        sysValue + " so I do NOT create it in " + parent);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      String confValue = conf.get(propertyName);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      if (confValue != null &amp;&amp; !confValue.endsWith(sysValue)){<a name="line.465"></a>
-<span class="sourceLineNo">466</span>       LOG.warn(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>         propertyName + " property value differs in configuration and system: "+<a name="line.467"></a>
-<span class="sourceLineNo">468</span>         "Configuration="+confValue+" while System="+sysValue+<a name="line.468"></a>
-<span class="sourceLineNo">469</span>         " Erasing configuration value by system value."<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>      conf.set(propertyName, sysValue);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    } else {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      // Ok, it's not set, so we create it as a subdirectory<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      createSubDir(propertyName, parent, subDirName);<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      System.setProperty(propertyName, conf.get(propertyName));<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span>  /**<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * @return Where to write test data on the test filesystem; Returns working directory<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * for the test filesystem by default<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * @see #setupDataTestDirOnTestFS()<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   * @see #getTestFileSystem()<a name="line.484"></a>
-<span class="sourceLineNo">485</span>   */<a name="line.485"></a>
-<span class="sourceLineNo">486</span>  private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    FileSystem fs = getTestFileSystem();<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.488"></a>
-<span class="sourceLineNo">489</span>  }<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>  /**<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * @return META table descriptor<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * @deprecated since 2.0 version and will be removed in 3.0 version.<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   *             use {@link #getMetaTableDescriptorBuilder()}<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   */<a name="line.495"></a>
-<span class="sourceLineNo">496</span>  @Deprecated<a name="line.496"></a>
-<span class="sourceLineNo">497</span>  public HTableDescriptor getMetaTableDescriptor() {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    return new ImmutableHTableDescriptor(getMetaTableDescriptorBuilder().build());<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span>  /**<a name="line.501"></a>
-<span class="sourceLineNo">502</span>   * @return META table descriptor<a name="line.502"></a>
-<span class="sourceLineNo">503</span>   */<a name="line.503"></a>
-<span class="sourceLineNo">504</span>  public TableDescriptorBuilder getMetaTableDescriptorBuilder() {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    try {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      return FSTableDescriptors.createMetaTableDescriptorBuilder(conf);<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    } catch (IOException e) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      throw new RuntimeException("Unable to create META table descriptor", e);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<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>  /**<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.514"></a>
-<span class="sourceLineNo">515</span>   * if the test relies on it.<a name="line.515"></a>
-<span class="sourceLineNo">516</span>   * @return a unique path in the test filesystem<a name="line.516"></a>
-<span class="sourceLineNo">517</span>   */<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  public Path getDataTestDirOnTestFS() throws IOException {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    if (dataTestDirOnTestFS == null) {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      setupDataTestDirOnTestFS();<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>    return dataTestDirOnTestFS;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>  }<a name="line.524"></a>
-<span class="sourceLineNo">525</span><a name="line.525"></a>
-<span class="sourceLineNo">526</span>  /**<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.527"></a>
-<span class="sourceLineNo">528</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * if the test relies on it.<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * @return a unique path in the test filesystem<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   * @param subdirName name of the subdir to create under the base test dir<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   */<a name="line.532"></a>
-<span class="sourceLineNo">533</span>  public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
-<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span>  /**<a name="line.537"></a>
-<span class="sourceLineNo">538</span>   * Sets up a path in test filesystem to be used by tests.<a name="line.538"></a>
-<span class="sourceLineNo">539</span>   * Creates a new directory if not already setup.<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   */<a name="line.540"></a>
-<span class="sourceLineNo">541</span>  private void setupDataTestDirOnTestFS() throws IOException {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    if (dataTestDirOnTestFS != null) {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      LOG.warn("Data test on test fs dir already setup in "<a name="line.543"></a>
-<span class="sourceLineNo">544</span>          + dataTestDirOnTestFS.toString());<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      return;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    dataTestDirOnTestFS = getNewDataTestDirOnTestFS();<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 up a new path in test filesystem to be used by tests.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   */<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  private Path getNewDataTestDirOnTestFS() throws IOException {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    //The file system can be either local, mini dfs, or if the configuration<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    //is supplied externally, it can be an external cluster FS. If it is a local<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    //file system, the tests should use getBaseTestDir, otherwise, we can use<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    //the working directory, and create a unique sub dir there<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    FileSystem fs = getTestFileSystem();<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    Path newDataTestDir;<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    String randomStr = getRandomUUID().toString();<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    if (fs.getUri().getScheme().equals(FileSystem.getLocal(conf).getUri().getScheme())) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      newDataTestDir = new Path(getDataTestDir(), randomStr);<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      File dataTestDir = new File(newDataTestDir.toString());<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      if (deleteOnExit()) dataTestDir.deleteOnExit();<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    } else {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      Path base = getBaseTestDirOnTestFS();<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      newDataTestDir = new Path(base, randomStr);<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      if (deleteOnExit()) fs.deleteOnExit(newDataTestDir);<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    return newDataTestDir;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>  /**<a name="line.573"></a>
-<span class="sourceLineNo">574</span>   * Cleans the test data directory on the test filesystem.<a name="line.574"></a>
-<span class="sourceLineNo">575</span>   * @return True if we removed the test dirs<a name="line.575"></a>
-<span class="sourceLineNo">576</span>   * @throws IOException<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   */<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  public boolean cleanupDataTestDirOnTestFS() throws IOException {<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    boolean ret = getTestFileSystem().delete(dataTestDirOnTestFS, true);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    if (ret)<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      dataTestDirOnTestFS = null;<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    return ret;<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>   * Cleans a subdirectory under the test data directory on the test filesystem.<a name="line.586"></a>
-<span class="sourceLineNo">587</span>   * @return True if we removed child<a name="line.587"></a>
-<span class="sourceLineNo">588</span>   * @throws IOException<a name="line.588"></a>
-<span class="sourceLineNo">589</span>   */<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  public boolean cleanupDataTestDirOnTestFS(String subdirName) throws IOException {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    Path cpath = getDataTestDirOnTestFS(subdirName);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return getTestFileSystem().delete(cpath, true);<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>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * Start a minidfscluster.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * @param servers How many DNs to start.<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   * @throws Exception<a name="line.598"></a>
-<span class="sourceLineNo">599</span>   * @see #shutdownMiniDFSCluster()<a name="line.599"></a>
-<span class="sourceLineNo">600</span>   * @return The mini dfs cluster created.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>   */<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  public MiniDFSCluster startMiniDFSCluster(int servers) throws Exception {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    return startMiniDFSCluster(servers, null);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>  }<a name="line.604"></a>
-<span class="sourceLineNo">605</span><a name="line.605"></a>
-<span class="sourceLineNo">606</span>  /**<a name="line.606"></a>
-<span class="sourceLineNo">607</span>   * Start a minidfscluster.<a name="line.607"></a>
-<span class="sourceLineNo">608</span>   * This is useful if you want to run datanode on distinct hosts for things<a name="line.608"></a>
-<span class="sourceLineNo">609</span>   * like HDFS block location verification.<a name="line.609"></a>
-<span class="sourceLineNo">610</span>   * If you start MiniDFSCluster without host names, all instances of the<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * datanodes will have the same host name.<a name="line.611"></a>
-<span class="sourceLineNo">612</span>   * @param hosts hostnames DNs to run on.<a name="line.612"></a>
-<span class="sourceLineNo">613</span>   * @throws Exception<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * @see #shutdownMiniDFSCluster()<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @return The mini dfs cluster created.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   */<a name="line.616"></a>
-<span class="sourceLineNo">617</span>  public MiniDFSCluster startMiniDFSCluster(final String hosts[])<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  throws Exception {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    if ( hosts != null &amp;&amp; hosts.length != 0) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return startMiniDFSCluster(hosts.length, hosts);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    } else {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      return startMiniDFSCluster(1, null);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    }<a name="line.623"></a>
-<span class="sourceLineNo">624</span>  }<a name="line.624"></a>
-<span class="sourceLineNo">625</span><a name="line.625"></a>
-<span class="sourceLineNo">626</span>  /**<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   * Start a minidfscluster.<a name="line.627"></a>
-<span class="sourceLineNo">628</span>   * Can only create one.<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   * @param servers How many DNs to start.<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   * @param hosts hostnames DNs to run on.<a name="line.630"></a>
-<span class="sourceLineNo">631</span>   * @throws Exception<a name="line.631"></a>
-<span class="sourceLineNo">632</span>   * @see #shutdownMiniDFSCluster()<a name="line.632"></a>
-<span class="sourceLineNo">633</span>   * @return The mini dfs cluster created.<a name="line.633"></a>
-<span class="sourceLineNo">634</span>   */<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  public MiniDFSCluster startMiniDFSCluster(int servers, final String hosts[])<a name="line.635"></a>
-<span class="sourceLineNo">636</span>  throws Exception {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    return startMiniDFSCluster(servers, null, hosts);<a name="line.637"></a>
-<span class="sourceLineNo">638</span>  }<a name="line.638"></a>
-<span class="sourceLineNo">639</span><a name="line.639"></a>
-<span class="sourceLineNo">640</span>  private void setFs() throws IOException {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    if(this.dfsCluster == null){<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      LOG.info("Skipping setting fs because dfsCluster is null");<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      return;<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    }<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    FileSystem fs = this.dfsCluster.getFileSystem();<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    FSUtils.setFsDefault(this.conf, new Path(fs.getUri()));<a name="line.646"></a>
-<span class="sourceLineNo">647</span><a name="line.647"></a>
-<span class="sourceLineNo">648</span>    // re-enable this check with dfs<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    conf.unset(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>  }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span>  public MiniDFSCluster startMiniDFSCluster(int servers, final  String racks[], String hosts[])<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      throws Exception {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    createDirsAndSetProperties();<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    EditLogFileOutputStream.setShouldSkipFsyncForTesting(true);<a name="line.655"></a>
-<span class="sourceLineNo">656</span><a name="line.656"></a>
-<span class="sourceLineNo">657</span>    // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    org.apache.log4j.Logger.getLogger(org.apache.hadoop.metrics2.util.MBeans.class).<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        setLevel(org.apache.log4j.Level.ERROR);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    org.apache.log4j.Logger.getLogger(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class).<a name="line.660"></a>
-<span class="sourceLineNo">661</span>        setLevel(org.apache.log4j.Level.ERROR);<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>    TraceUtil.initTracer(conf);<a name="line.663"></a>
-<span class="sourceLineNo">664</span><a name="line.664"></a>
-<span class="sourceLineNo">665</span>    this.dfsCluster = new MiniDFSCluster(0, this.conf, servers, true, true,<a name="line.665"></a>
-<span class="sourceLineNo">666</span>        true, null, racks, hosts, null);<a name="line.666"></a>
-<span class="sourceLineNo">667</span><a name="line.667"></a>
-<span class="sourceLineNo">668</span>    // Set this just-started cluster as our filesystem.<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    setFs();<a name="line.669"></a>
-<span class="sourceLineNo">670</span><a name="line.670"></a>
-<span class="sourceLineNo">671</span>    // Wait for the cluster to be totally up<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    this.dfsCluster.waitClusterUp();<a name="line.672"></a>
-<span class="sourceLineNo">673</span><a name="line.673"></a>
-<span class="sourceLineNo">674</span>    //reset the test directory for test file system<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    dataTestDirOnTestFS = null;<a name="line.675"></a>
-<span class="sourceLineNo">676</span>    String dataTestDir = getDataTestDir().toString();<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    conf.set(HConstants.HBASE_DIR, dataTestDir);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>    return this.dfsCluster;<a name="line.680"></a>
-<span class="sourceLineNo">681</span>  }<a name="line.681"></a>
-<span class="sourceLineNo">682</span><a name="line.682"></a>
-<span class="sourceLineNo">683</span>  public MiniDFSCluster startMiniDFSClusterForTestWAL(int namenodePort) throws IOException {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    createDirsAndSetProperties();<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    dfsCluster = new MiniDFSCluster(namenodePort, conf, 5, false, true, true, null,<a name="line.685"></a>
-<span class="sourceLineNo">686</span>        null, null, null);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>    return dfsCluster;<a name="line.687"></a>
-<span class="sourceLineNo">688</span>  }<a name="line.688"></a>
-<span class="sourceLineNo">689</span><a name="line.689"></a>
-<span class="sourceLineNo">690</span>  /** This is used before starting HDFS and map-reduce mini-clusters */<a name="line.690"></a>
-<span class="sourceLineNo">691</span>  private void createDirsAndSetProperties() throws IOException {<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    setupClusterTestDir();<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    conf.set(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    System.setProperty(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    createDirAndSetProperty("cache_data", "test.cache.data");<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    createDirAndSetProperty("hadoop_tmp", "hadoop.tmp.dir");<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    hadoopLogDir = createDirAndSetProperty("hadoop_logs", "hadoop.log.dir");<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    createDirAndSetProperty("mapred_local", "mapreduce.cluster.local.dir");<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    createDirAndSetProperty("mapred_temp", "mapreduce.cluster.temp.dir");<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    enableShortCircuit();<a name="line.700"></a>
-<span class="sourceLineNo">701</span><a name="line.701"></a>
-<span class="sourceLineNo">702</span>    Path root = getDataTestDirOnTestFS("hadoop");<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    conf.set(MapreduceTestingShim.getMROutputDirProp(),<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      new Path(root, "mapred-output-dir").toString());<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    conf.set("mapreduce.jobtracker.system.dir", new Path(root, "mapred-system-dir").toString());<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    conf.set("mapreduce.jobtracker.staging.root.dir",<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      new Path(root, "mapreduce-jobtracker-staging-root-dir").toString());<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    conf.set("mapreduce.job.working.dir", new Path(root, "mapred-working-dir").toString());<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    conf.set("yarn.app.mapreduce.am.staging-dir",<a name="line.709"></a>
-<span class="sourceLineNo">710</span>      new Path(root, "mapreduce-am-staging-root-dir").toString());<a name="line.710"></a>
-<span class="sourceLineNo">711</span>  }<a name="line.711"></a>
-<span class="sourceLineNo">712</span><a name="line.712"></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>   * &lt;p&gt;Create an HBaseTestingUtility using a default configuration.<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   *<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   *<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   * &lt;p&gt;Previously, there was a distinction between the type of utility returned by<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * at which point they will switch to using mini DFS for storage.<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   */<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  public HBaseTestingUtility() {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    this(HBaseConfiguration.create());<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>   * &lt;p&gt;Create an HBaseTestingUtility using a given configuration.<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   *<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   *<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * &lt;p&gt;Previously, there was a distinction between the type of utility returned by<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.328"></a>
+<span class="sourceLineNo">329</span>   * at which point they will switch to using mini DFS for storage.<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   *<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   * @param conf The configuration to use for further operations<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    super(conf);<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>    // a hbase checksum verification failure will cause unit tests to fail<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>    // Save this for when setting default file:// breaks things<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    if (this.conf.get("fs.defaultFS") != null) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    }<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    // Every cluster is a local cluster until we start DFS<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    // Note that conf could be null, but this.conf will not be<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    String dataTestDir = getDataTestDir().toString();<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    this.conf.set("fs.defaultFS","file:///");<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    // If the value for random ports isn't set set it to true, thus making<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    // tests opt-out for random port assignment<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>  /**<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility()} instead<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * @return a normal HBaseTestingUtility<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  @Deprecated<a name="line.363"></a>
+<span class="sourceLineNo">364</span>  public static HBaseTestingUtility createLocalHTU() {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    return new HBaseTestingUtility();<a name="line.365"></a>
+<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>  /**<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility(Configuration)} instead<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   * @return a normal HBaseTestingUtility<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   */<a name="line.371"></a>
+<span class="sourceLineNo">372</span>  @Deprecated<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  public static HBaseTestingUtility createLocalHTU(Configuration c) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    return new HBaseTestingUtility(c);<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>  /**<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    closeRegionAndWAL((HRegion)r);<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>  /**<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   */<a name="line.386"></a>
+<span class="sourceLineNo">387</span>  public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    if (r == null) return;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    r.close();<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    if (r.getWAL() == null) return;<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    r.getWAL().close();<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>  /**<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * Returns this classes's instance of {@link Configuration}.  Be careful how<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * you use the returned Configuration since {@link Connection} instances<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   * can be shared.  The Map of Connections is keyed by the Configuration.  If<a name="line.397"></a>
+<span class="sourceLineNo">398</span>   * say, a Connection was being used against a cluster that had been shutdown,<a name="line.398"></a>
+<span class="sourceLineNo">399</span>   * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.399"></a>
+<span class="sourceLineNo">400</span>   * be wholesome.  Rather than use the return direct, its usually best to<a name="line.400"></a>
+<span class="sourceLineNo">401</span>   * make a copy and use that.  Do<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   * &lt;code&gt;Configuration c = new Configuration(INSTANCE.getConfiguration());&lt;/code&gt;<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * @return Instance of Configuration.<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  @Override<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  public Configuration getConfiguration() {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    return super.getConfiguration();<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 void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    this.hbaseCluster = hbaseCluster;<a name="line.411"></a>
+<span class="sourceLineNo">412</span>  }<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>  /**<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   * Give it a random name so can have many concurrent tests running if<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * we need to.  It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * System property, as it's what minidfscluster bases<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   * it data dir on.  Moding a System property is not the way to do concurrent<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * instances -- another instance could grab the temporary<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * value unintentionally -- but not anything can do about it at moment;<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * single instance only is how the minidfscluster works.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   *<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * We also create the underlying directory for<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   *  hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   *  in the conf, and as a system property for hadoop.tmp.dir<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   *<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @return The calculated data test build directory, if newly-created.<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   */<a name="line.429"></a>
+<span class="sourceLineNo">430</span>  @Override<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  protected Path setupDataTestDir() {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    Path testPath = super.setupDataTestDir();<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    if (null == testPath) {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      return null;<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    }<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span>    createSubDirAndSystemProperty(<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      "hadoop.log.dir",<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      testPath, "hadoop-log-dir");<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>    // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    //  we want our own value to ensure uniqueness on the same machine<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    createSubDirAndSystemProperty(<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      "hadoop.tmp.dir",<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      testPath, "hadoop-tmp-dir");<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>    // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    createSubDir(<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      "mapreduce.cluster.local.dir",<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      testPath, "mapred-local-dir");<a name="line.450"></a>
+<span class="sourceLineNo">451</span><a name="line.451"></a>
+<span class="sourceLineNo">452</span>    return testPath;<a name="line.452"></a>
+<span class="sourceLineNo">453</span>  }<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>  private void createSubDirAndSystemProperty(<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    String propertyName, Path parent, String subDirName){<a name="line.456"></a>
+<span class="sourceLineNo">457</span><a name="line.457"></a>
+<span class="sourceLineNo">458</span>    String sysValue = System.getProperty(propertyName);<a name="line.458"></a>
+<span class="sourceLineNo">459</span><a name="line.459"></a>
+<span class="sourceLineNo">460</span>    if (sysValue != null) {<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      // There is already a value set. So we do nothing but hope<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      //  that there will be no conflicts<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        sysValue + " so I do NOT create it in " + parent);<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      String confValue = conf.get(propertyName);<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      if (confValue != null &amp;&amp; !confValue.endsWith(sysValue)){<a name="line.466"></a>
+<span class="sourceLineNo">467</span>       LOG.warn(<a name="line.467"></a>
+<span class="sourceLineNo">468</span>         propertyName + " property value differs in configuration and system: "+<a name="line.468"></a>
+<span class="sourceLineNo">469</span>         "Configuration="+confValue+" while System="+sysValue+<a name="line.469"></a>
+<span class="sourceLineNo">470</span>         " Erasing configuration value by system value."<a name="line.470"></a>
+<span class="sourceLineNo">471</span>       );<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      }<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      conf.set(propertyName, sysValue);<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    } else {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      // Ok, it's not set, so we create it as a subdirectory<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      createSubDir(propertyName, parent, subDirName);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      System.setProperty(propertyName, conf.get(propertyName));<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
+<span class="sourceLineNo">480</span><a name="line.480"></a>
+<span class="sourceLineNo">481</span>  /**<a name="line.481"></a>
+<span class="sourceLineNo">482</span>   * @return Where to write test data on the test filesystem; Returns working directory<a name="line.482"></a>
+<span class="sourceLineNo">483</span>   * for the test filesystem by default<a name="line.483"></a>
+<span class="sourceLineNo">484</span>   * @see #setupDataTestDirOnTestFS()<a name="line.484"></a>
+<span class="sourceLineNo">485</span>   * @see #getTestFileSystem()<a name="line.485"></a>
+<span class="sourceLineNo">486</span>   */<a name="line.486"></a>
+<span class="sourceLineNo">487</span>  private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    FileSystem fs = getTestFileSystem();<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.489"></a>
+<span class="sourceLineNo">490</span>  }<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>   * @return META table descriptor<a name="line.493"></a>
+<span class="sourceLineNo">494</span>   * @deprecated since 2.0 version and will be removed in 3.0 version.<a name="line.494"></a>
+<span class="sourceLineNo">495</span>   *             use {@link #getMetaTableDescriptorBuilder()}<a name="line.495"></a>
+<span class="sourceLineNo">496</span>   */<a name="line.496"></a>
+<span class="sourceLineNo">497</span>  @Deprecated<a name="line.497"></a>
+<span class="sourceLineNo">498</span>  public HTableDescriptor getMetaTableDescriptor() {<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    return new ImmutableHTableDescriptor(getMetaTableDescriptorBuilder().build());<a name="line.499"></a>
+<span class="sourceLineNo">500</span>  }<a name="line.500"></a>
+<span class="sourceLineNo">501</span><a name="line.501"></a>
+<span class="sourceLineNo">502</span>  /**<a name="line.502"></a>
+<span class="sourceLineNo">503</span>   * @return META table descriptor<a name="line.503"></a>
+<span class="sourceLineNo">504</span>   */<a name="line.504"></a>
+<span class="sourceLineNo">505</span>  public TableDescriptorBuilder getMetaTableDescriptorBuilder() {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    try {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      return FSTableDescriptors.createMetaTableDescriptorBuilder(conf);<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    } catch (IOException e) {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      throw new RuntimeException("Unable to create META table descriptor", e);<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><a name="line.512"></a>
+<span class="sourceLineNo">513</span>  /**<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.514"></a>
+<span class="sourceLineNo">515</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.515"></a>
+<span class="sourceLineNo">516</span>   * if the test relies on it.<a name="line.516"></a>
+<span class="sourceLineNo">517</span>   * @return a unique path in the test filesystem<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   */<a name="line.518"></a>
+<span class="sourceLineNo">519</span>  public Path getDataTestDirOnTestFS() throws IOException {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    if (dataTestDirOnTestFS == null) {<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      setupDataTestDirOnTestFS();<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>    return dataTestDirOnTestFS;<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  }<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>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.528"></a>
+<span class="sourceLineNo">529</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.529"></a>
+<span class="sourceLineNo">530</span>   * if the test relies on it.<a name="line.530"></a>
+<span class="sourceLineNo">531</span>   * @return a unique path in the test filesystem<a name="line.531"></a>
+<span class="sourceLineNo">532</span>   * @param subdirName name of the subdir to create under the base test dir<a name="line.532"></a>
+<span class="sourceLineNo">533</span>   */<a name="line.533"></a>
+<span class="sourceLineNo">534</span>  public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.535"></a>
+<span class="sourceLineNo">536</span>  }<a name="li

<TRUNCATED>

[31/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/WALProcedureMap.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/WALProcedureMap.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/WALProcedureMap.html
new file mode 100644
index 0000000..225eb54
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/WALProcedureMap.html
@@ -0,0 +1,182 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/class-use/WALProcedureMap.html" target="_top">Frames</a></li>
+<li><a href="WALProcedureMap.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap" class="title">Uses of Class<br>org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap</h2>
+</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
+<caption><span>Packages that use <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Package</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.procedure2.store.wal">org.apache.hadoop.hbase.procedure2.store.wal</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<ul class="blockList">
+<li class="blockList"><a name="org.apache.hadoop.hbase.procedure2.store.wal">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a> in <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html">org.apache.hadoop.hbase.procedure2.store.wal</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html">org.apache.hadoop.hbase.procedure2.store.wal</a> declared as <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#localProcedureMap">localProcedureMap</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#procedureMap">procedureMap</a></span></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html">org.apache.hadoop.hbase.procedure2.store.wal</a> with parameters of type <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#mergeTail-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap-">mergeTail</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a>&nbsp;other)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/class-use/WALProcedureMap.html" target="_top">Frames</a></li>
+<li><a href="WALProcedureMap.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/WALProcedureStore.SyncMetrics.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/WALProcedureStore.SyncMetrics.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/WALProcedureStore.SyncMetrics.html
index f0b38cb..8be169f 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/WALProcedureStore.SyncMetrics.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/WALProcedureStore.SyncMetrics.html
@@ -95,6 +95,19 @@
 <!--   -->
 </a>
 <h3>Uses of <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.SyncMetrics</a> in <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html">org.apache.hadoop.hbase.procedure2.store.wal</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html">org.apache.hadoop.hbase.procedure2.store.wal</a> with type parameters of type <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.SyncMetrics</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private org.apache.hbase.thirdparty.org.apache.commons.collections4.queue.CircularFifoQueue&lt;<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.SyncMetrics</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#syncMetricsQueue">syncMetricsQueue</a></span></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
 <caption><span>Methods in <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html">org.apache.hadoop.hbase.procedure2.store.wal</a> that return types with arguments of type <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.SyncMetrics</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-frame.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-frame.html
index 0402eb6..c26bf9a 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-frame.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-frame.html
@@ -21,10 +21,10 @@
 <li><a href="ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame">ProcedureWALFile</a></li>
 <li><a href="ProcedureWALFormat.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame">ProcedureWALFormat</a></li>
 <li><a href="ProcedureWALFormatReader.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame">ProcedureWALFormatReader</a></li>
-<li><a href="ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame">ProcedureWALFormatReader.Entry</a></li>
-<li><a href="ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame">ProcedureWALFormatReader.EntryIterator</a></li>
-<li><a href="ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame">ProcedureWALFormatReader.WalProcedureMap</a></li>
 <li><a href="ProcedureWALPrettyPrinter.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame">ProcedureWALPrettyPrinter</a></li>
+<li><a href="WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame">WALProcedureMap</a></li>
+<li><a href="WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame">WALProcedureMap.Entry</a></li>
+<li><a href="WALProcedureMap.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame">WALProcedureMap.EntryIterator</a></li>
 <li><a href="WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame">WALProcedureStore</a></li>
 <li><a href="WALProcedureStore.SyncMetrics.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame">WALProcedureStore.SyncMetrics</a></li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html
index 33aa471..e27c919 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html
@@ -120,22 +120,24 @@
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></td>
-<td class="colLast">&nbsp;</td>
+<td class="colFirst"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALPrettyPrinter</a></td>
+<td class="colLast">
+<div class="block">ProcedureWALPrettyPrinter prints the contents of a given ProcedureWAL file</div>
+</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a></td>
-<td class="colLast">&nbsp;</td>
+<td class="colFirst"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></td>
+<td class="colLast">
+<div class="block">We keep an in-memory map of the procedures sorted by replay order.</div>
+</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></td>
+<td class="colFirst"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALPrettyPrinter</a></td>
-<td class="colLast">
-<div class="block">ProcedureWALPrettyPrinter prints the contents of a given ProcedureWAL file</div>
-</td>
+<td class="colFirst"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.EntryIterator</a></td>
+<td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a></td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html
index 989b4b3..df17046 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html
@@ -94,9 +94,6 @@
 <li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">ProcedureWALFile</span></a> (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>
 <li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">ProcedureWALFormat</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">ProcedureWALFormatReader</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">ProcedureWALFormatReader.Entry</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">ProcedureWALFormatReader.EntryIterator</span></a> (implements org.apache.hadoop.hbase.procedure2.store.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">ProcedureWALFormatReader.WalProcedureMap</span></a></li>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Throwable</span></a> (implements 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">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Exception</span></a>
@@ -115,6 +112,9 @@
 </li>
 </ul>
 </li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">WALProcedureMap</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">WALProcedureMap.Entry</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">WALProcedureMap.EntryIterator</span></a> (implements org.apache.hadoop.hbase.procedure2.store.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">WALProcedureStore.SyncMetrics</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-use.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-use.html
index 0b24550..c17a8e0 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-use.html
@@ -147,21 +147,20 @@
 <td class="colOne"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/class-use/ProcedureWALFormat.Loader.html#org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormat.Loader</a>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colOne"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/class-use/ProcedureWALFormatReader.Entry.html#org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;</td>
+<td class="colOne"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/class-use/WALProcedureMap.html#org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a>
+<div class="block">We keep an in-memory map of the procedures sorted by replay order.</div>
+</td>
 </tr>
 <tr class="rowColor">
-<td class="colOne"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/class-use/ProcedureWALFormatReader.EntryIterator.html#org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a>&nbsp;</td>
+<td class="colOne"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/class-use/WALProcedureMap.Entry.html#org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colOne"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/class-use/ProcedureWALFormatReader.WalProcedureMap.html#org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a>&nbsp;</td>
-</tr>
-<tr class="rowColor">
 <td class="colOne"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/class-use/WALProcedureStore.LeaseRecovery.html#org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.LeaseRecovery</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/class-use/WALProcedureStore.PushType.html#org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/class-use/WALProcedureStore.SyncMetrics.html#org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.SyncMetrics</a>&nbsp;</td>
 </tr>
 </tbody>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/util/class-use/ByteSlot.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/util/class-use/ByteSlot.html b/devapidocs/org/apache/hadoop/hbase/procedure2/util/class-use/ByteSlot.html
index a1be688..4c973de 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/util/class-use/ByteSlot.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/util/class-use/ByteSlot.html
@@ -167,31 +167,31 @@
 <tr class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">ProcedureWALFormat.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#writeDelete-org.apache.hadoop.hbase.procedure2.util.ByteSlot-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">writeDelete</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
-           <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
+           <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
            long[]&nbsp;subprocs)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">ProcedureWALFormat.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#writeEntry-org.apache.hadoop.hbase.procedure2.util.ByteSlot-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry.Type-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">writeEntry</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
           org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry.Type&nbsp;type,
-          <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
-          <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</code>&nbsp;</td>
+          <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+          <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;subprocs)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">ProcedureWALFormat.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#writeInsert-org.apache.hadoop.hbase.procedure2.util.ByteSlot-org.apache.hadoop.hbase.procedure2.Procedure-">writeInsert</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
-           <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</code>&nbsp;</td>
+           <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">ProcedureWALFormat.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#writeInsert-org.apache.hadoop.hbase.procedure2.util.ByteSlot-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">writeInsert</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
-           <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
-           <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</code>&nbsp;</td>
+           <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+           <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;subprocs)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">ProcedureWALFormat.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#writeUpdate-org.apache.hadoop.hbase.procedure2.util.ByteSlot-org.apache.hadoop.hbase.procedure2.Procedure-">writeUpdate</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
-           <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</code>&nbsp;</td>
+           <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc)</code>&nbsp;</td>
 </tr>
 </tbody>
 </table>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/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 6678fea..eb948f3 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -230,12 +230,12 @@
 <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/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/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>
 <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/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/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/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/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 af7860c..16fc1de 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -710,20 +710,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/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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.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/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/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/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/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
index c20ff47..034077c 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
@@ -110,8 +110,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&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.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.FilterType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.FilterType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/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 69f2dc6..f594c43 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -143,8 +143,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.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>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/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..dfa02b5 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -192,8 +192,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.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/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/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 eca61c3..b675ab5 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -521,13 +521,13 @@
 <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/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/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/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/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/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/overview-tree.html b/devapidocs/overview-tree.html
index aba5cb3..6eeb929 100644
--- a/devapidocs/overview-tree.html
+++ b/devapidocs/overview-tree.html
@@ -767,6 +767,7 @@
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/BatchErrors.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">BatchErrors</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/BatchScanResultCache.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">BatchScanResultCache</span></a> (implements org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ScanResultCache.html" title="interface in org.apache.hadoop.hbase.client">ScanResultCache</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/BBKVComparator.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">BBKVComparator</span></a> (implements java.util.<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;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">BitSetNode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockCacheKey</span></a> (implements org.apache.hadoop.hbase.io.<a href="org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a>, 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>)</li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/BlockCachesIterator.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockCachesIterator</span></a> (implements java.util.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;E&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockCacheUtil</span></a></li>
@@ -2799,7 +2800,6 @@
 </ul>
 </li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">ProcedureStoreTracker</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">ProcedureStoreTracker.BitSetNode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/ProcedureSyncWait.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ProcedureSyncWait</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/ProcedureSyncWait.ProcedureFuture.html" title="class in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ProcedureSyncWait.ProcedureFuture</span></a> (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;V&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/ProcedureUtil.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">ProcedureUtil</span></a></li>
@@ -2808,9 +2808,6 @@
 <li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">ProcedureWALFile</span></a> (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>
 <li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">ProcedureWALFormat</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">ProcedureWALFormatReader</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">ProcedureWALFormatReader.Entry</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">ProcedureWALFormatReader.EntryIterator</span></a> (implements org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">ProcedureWALFormatReader.WalProcedureMap</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrContext.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrContext</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.provider.consumer.<a href="org/apache/hadoop/hbase/rest/provider/consumer/ProtobufMessageBodyConsumer.html" title="class in org.apache.hadoop.hbase.rest.provider.consumer"><span class="typeNameLink">ProtobufMessageBodyConsumer</span></a> (implements javax.ws.rs.ext.MessageBodyReader&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.rest.provider.producer.<a href="org/apache/hadoop/hbase/rest/provider/producer/ProtobufMessageBodyProducer.html" title="class in org.apache.hadoop.hbase.rest.provider.producer"><span class="typeNameLink">ProtobufMessageBodyProducer</span></a> (implements javax.ws.rs.ext.MessageBodyWriter&lt;T&gt;)</li>
@@ -4197,6 +4194,9 @@
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALKeyImpl</span></a> (implements org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/WALKey.html" title="interface in org.apache.hadoop.hbase.wal">WALKey</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/WALPrettyPrinter.html" title="class in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALPrettyPrinter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">WALProcedureMap</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">WALProcedureMap.Entry</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">WALProcedureMap.EntryIterator</span></a> (implements org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">WALProcedureStore.SyncMetrics</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/WALSplitter.html" title="class in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALSplitter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/WALSplitter.EntryBuffers.html" title="class in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALSplitter.EntryBuffers</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/serialized-form.html
----------------------------------------------------------------------
diff --git a/devapidocs/serialized-form.html b/devapidocs/serialized-form.html
index 38f79a9..2bbf6ed 100644
--- a/devapidocs/serialized-form.html
+++ b/devapidocs/serialized-form.html
@@ -1333,11 +1333,19 @@
 <!--   -->
 </a>
 <h3>Class <a href="org/apache/hadoop/hbase/procedure2/store/wal/CorruptedWALProcedureStoreException.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">org.apache.hadoop.hbase.procedure2.store.wal.CorruptedWALProcedureStoreException</a> extends <a href="org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a> implements Serializable</h3>
+<dl class="nameValue">
+<dt>serialVersionUID:</dt>
+<dd>-3407300445435898074L</dd>
+</dl>
 </li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormat.InvalidWALDataException">
 <!--   -->
 </a>
 <h3>Class <a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.InvalidWALDataException.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormat.InvalidWALDataException</a> extends <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> implements Serializable</h3>
+<dl class="nameValue">
+<dt>serialVersionUID:</dt>
+<dd>5471733223070202196L</dd>
+</dl>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/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 a448df4..6adb66a 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 = "e42741e0858a59961ae0900b5ef073e16ef6126c";<a name="line.11"></a>
+<span class="sourceLineNo">011</span>  public static final String revision = "118b0746849c886fc64b0a53014f3186e2db4d9d";<a name="line.11"></a>
 <span class="sourceLineNo">012</span>  public static final String user = "jenkins";<a name="line.12"></a>
-<span class="sourceLineNo">013</span>  public static final String date = "Fri Oct  5 14:44:02 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Sun Oct  7 14:43:35 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 = "a18bd10ed008a7354e8f6b089bfc87aa";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "b7d588f335c5ff6e4fab5b0955be3c4a";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 


[22/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html
deleted file mode 100644
index 6253d3f..0000000
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html
+++ /dev/null
@@ -1,936 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<title>Source code</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../../stylesheet.css" title="Style">
-</head>
-<body>
-<div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
-<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
-<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
-<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
-<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
-<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
-<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
-<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
-<span class="sourceLineNo">009</span> *<a name="line.9"></a>
-<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
-<span class="sourceLineNo">011</span> *<a name="line.11"></a>
-<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
-<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
-<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
-<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
-<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
-<span class="sourceLineNo">017</span> */<a name="line.17"></a>
-<span class="sourceLineNo">018</span><a name="line.18"></a>
-<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.procedure2.store.wal;<a name="line.19"></a>
-<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hbase.thirdparty.com.google.protobuf.InvalidProtocolBufferException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span><a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.slf4j.Logger;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.slf4j.LoggerFactory;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureIterator;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry;<a name="line.35"></a>
-<span class="sourceLineNo">036</span><a name="line.36"></a>
-<span class="sourceLineNo">037</span>/**<a name="line.37"></a>
-<span class="sourceLineNo">038</span> * Helper class that loads the procedures stored in a WAL<a name="line.38"></a>
-<span class="sourceLineNo">039</span> */<a name="line.39"></a>
-<span class="sourceLineNo">040</span>@InterfaceAudience.Private<a name="line.40"></a>
-<span class="sourceLineNo">041</span>@InterfaceStability.Evolving<a name="line.41"></a>
-<span class="sourceLineNo">042</span>public class ProcedureWALFormatReader {<a name="line.42"></a>
-<span class="sourceLineNo">043</span>  private static final Logger LOG = LoggerFactory.getLogger(ProcedureWALFormatReader.class);<a name="line.43"></a>
-<span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>  // ==============================================================================================<a name="line.45"></a>
-<span class="sourceLineNo">046</span>  //  We read the WALs in reverse order from the newest to the oldest.<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  //  We have different entry types:<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  //   - INIT: Procedure submitted by the user (also known as 'root procedure')<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  //   - INSERT: Children added to the procedure &lt;parentId&gt;:[&lt;childId&gt;, ...]<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  //   - UPDATE: The specified procedure was updated<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  //   - DELETE: The procedure was removed (finished/rolledback and result TTL expired)<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  //<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  // In the WAL we can find multiple times the same procedure as UPDATE or INSERT.<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  // We read the WAL from top to bottom, so every time we find an entry of the<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  // same procedure, that will be the "latest" update (Caveat: with multiple threads writing<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  // the store, this assumption does not hold).<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  //<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  // We keep two in-memory maps:<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  //  - localProcedureMap: is the map containing the entries in the WAL we are processing<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  //  - procedureMap: is the map containing all the procedures we found up to the WAL in process.<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  // localProcedureMap is merged with the procedureMap once we reach the WAL EOF.<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  //<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  // Since we are reading the WALs in reverse order (newest to oldest),<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  // if we find an entry related to a procedure we already have in 'procedureMap' we can discard it.<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  //<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  // The WAL is append-only so the last procedure in the WAL is the one that<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  // was in execution at the time we crashed/closed the server.<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  // Given that, the procedure replay order can be inferred by the WAL order.<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  //<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  // Example:<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  //    WAL-2: [A, B, A, C, D]<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  //    WAL-1: [F, G, A, F, B]<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  //    Replay-Order: [D, C, A, B, F, G]<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  //<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  // The "localProcedureMap" keeps a "replayOrder" list. Every time we add the<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  // record to the map that record is moved to the head of the "replayOrder" list.<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  // Using the example above:<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  //    WAL-2 localProcedureMap.replayOrder is [D, C, A, B]<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  //    WAL-1 localProcedureMap.replayOrder is [F, G]<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  //<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  // Each time we reach the WAL-EOF, the "replayOrder" list is merged/appended in 'procedureMap'<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  // so using the example above we end up with: [D, C, A, B] + [F, G] as replay order.<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  //<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  //  Fast Start: INIT/INSERT record and StackIDs<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  // ---------------------------------------------<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  // We have two special records, INIT and INSERT, that track the first time<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  // the procedure was added to the WAL. We can use this information to be able<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  // to start procedures before reaching the end of the WAL, or before reading all WALs.<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  // But in some cases, the WAL with that record can be already gone.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  // As an alternative, we can use the stackIds on each procedure,<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  // to identify when a procedure is ready to start.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  // If there are gaps in the sum of the stackIds we need to read more WALs.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  //<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  // Example (all procs child of A):<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  //   WAL-2: [A, B]                   A stackIds = [0, 4], B stackIds = [1, 5]<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  //   WAL-1: [A, B, C, D]<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  //<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  // In the case above we need to read one more WAL to be able to consider<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  // the root procedure A and all children as ready.<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  // ==============================================================================================<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private final WalProcedureMap localProcedureMap = new WalProcedureMap(1024);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  private final WalProcedureMap procedureMap = new WalProcedureMap(1024);<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  private final ProcedureWALFormat.Loader loader;<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>   * Global tracker that will be used by the WALProcedureStore after load.<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   * If the last WAL was closed cleanly we already have a full tracker ready to be used.<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * If the last WAL was truncated (e.g. master killed) the tracker will be empty<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * and the 'partial' flag will be set. In this case, on WAL replay we are going<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * to rebuild the tracker.<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   */<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private final ProcedureStoreTracker tracker;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  // TODO: private final boolean hasFastStartSupport;<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>   * If tracker for a log file is partial (see {@link ProcedureStoreTracker#partial}), we<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * re-build the list of procedures updated in that WAL because we need it for log cleaning<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * purposes. If all procedures updated in a WAL are found to be obsolete, it can be safely deleted.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * (see {@link WALProcedureStore#removeInactiveLogs()}).<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * However, we don't need deleted part of a WAL's tracker for this purpose, so we don't bother<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   * re-building it.<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   */<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  private ProcedureStoreTracker localTracker;<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>  // private long compactionLogId;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  private long maxProcId = 0;<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>  public ProcedureWALFormatReader(final ProcedureStoreTracker tracker,<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      ProcedureWALFormat.Loader loader) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    this.tracker = tracker;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    this.loader = loader;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    // we support fast-start only if we have a clean shutdown.<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    // this.hasFastStartSupport = !tracker.isEmpty();<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>  public void read(final ProcedureWALFile log) throws IOException {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    localTracker = log.getTracker().isPartial() ? log.getTracker() : null;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    if (localTracker != null) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      LOG.info("Rebuilding tracker for " + log);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>    long count = 0;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    FSDataInputStream stream = log.getStream();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    try {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      boolean hasMore = true;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      while (hasMore) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        ProcedureWALEntry entry = ProcedureWALFormat.readEntry(stream);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        if (entry == null) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>          LOG.warn("Nothing left to decode. Exiting with missing EOF, log=" + log);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>          break;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        }<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        count++;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        switch (entry.getType()) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>          case PROCEDURE_WAL_INIT:<a name="line.155"></a>
-<span class="sourceLineNo">156</span>            readInitEntry(entry);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>            break;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>          case PROCEDURE_WAL_INSERT:<a name="line.158"></a>
-<span class="sourceLineNo">159</span>            readInsertEntry(entry);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            break;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>          case PROCEDURE_WAL_UPDATE:<a name="line.161"></a>
-<span class="sourceLineNo">162</span>          case PROCEDURE_WAL_COMPACT:<a name="line.162"></a>
-<span class="sourceLineNo">163</span>            readUpdateEntry(entry);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>            break;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>          case PROCEDURE_WAL_DELETE:<a name="line.165"></a>
-<span class="sourceLineNo">166</span>            readDeleteEntry(entry);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>            break;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>          case PROCEDURE_WAL_EOF:<a name="line.168"></a>
-<span class="sourceLineNo">169</span>            hasMore = false;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>            break;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>          default:<a name="line.171"></a>
-<span class="sourceLineNo">172</span>            throw new CorruptedWALProcedureStoreException("Invalid entry: " + entry);<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>      LOG.info("Read {} entries in {}", count, log);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    } catch (InvalidProtocolBufferException e) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      LOG.error("While reading entry #{} in {}", count, log, e);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      loader.markCorruptedWAL(log, e);<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>    if (localTracker != null) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      localTracker.setPartialFlag(false);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    if (!localProcedureMap.isEmpty()) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      log.setProcIds(localProcedureMap.getMinProcId(), localProcedureMap.getMaxProcId());<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      procedureMap.mergeTail(localProcedureMap);<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>      //if (hasFastStartSupport) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      // TODO: Some procedure may be already runnables (see readInitEntry())<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      //       (we can also check the "update map" in the log trackers)<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      // --------------------------------------------------<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      //EntryIterator iter = procedureMap.fetchReady();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      //if (iter != null) loader.load(iter);<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>    }<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>  public void finish() throws IOException {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    // notify the loader about the max proc ID<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    loader.setMaxProcId(maxProcId);<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>    // fetch the procedure ready to run.<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    ProcedureIterator procIter = procedureMap.fetchReady();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    if (procIter != null) loader.load(procIter);<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>    // remaining procedures have missing link or dependencies<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    // consider them as corrupted, manual fix is probably required.<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    procIter = procedureMap.fetchAll();<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    if (procIter != null) loader.handleCorrupted(procIter);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>  private void loadProcedure(final ProcedureWALEntry entry, final ProcedureProtos.Procedure proc) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    maxProcId = Math.max(maxProcId, proc.getProcId());<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    if (isRequired(proc.getProcId())) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      if (LOG.isTraceEnabled()) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        LOG.trace("Read " + entry.getType() + " entry " + proc.getProcId());<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      localProcedureMap.add(proc);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      if (tracker.isPartial()) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        tracker.insert(proc.getProcId());<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>    if (localTracker != null) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      localTracker.insert(proc.getProcId());<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  }<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>  private void readInitEntry(final ProcedureWALEntry entry)<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  throws IOException {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    assert entry.getProcedureCount() == 1 : "Expected only one procedure";<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    loadProcedure(entry, entry.getProcedure(0));<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  }<a name="line.233"></a>
-<span class="sourceLineNo">234</span><a name="line.234"></a>
-<span class="sourceLineNo">235</span>  private void readInsertEntry(final ProcedureWALEntry entry) throws IOException {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    assert entry.getProcedureCount() &gt;= 1 : "Expected one or more procedures";<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    loadProcedure(entry, entry.getProcedure(0));<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    for (int i = 1; i &lt; entry.getProcedureCount(); ++i) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      loadProcedure(entry, entry.getProcedure(i));<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><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  private void readUpdateEntry(final ProcedureWALEntry entry) throws IOException {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    assert entry.getProcedureCount() == 1 : "Expected only one procedure";<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    loadProcedure(entry, entry.getProcedure(0));<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>  private void readDeleteEntry(final ProcedureWALEntry entry) throws IOException {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    assert entry.hasProcId() : "expected ProcID";<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>    if (entry.getChildIdCount() &gt; 0) {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      assert entry.getProcedureCount() == 1 : "Expected only one procedure";<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>      // update the parent procedure<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      loadProcedure(entry, entry.getProcedure(0));<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>      // remove the child procedures of entry.getProcId()<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      for (int i = 0, count = entry.getChildIdCount(); i &lt; count; ++i) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        deleteEntry(entry.getChildId(i));<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      }<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    } else {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      assert entry.getProcedureCount() == 0 : "Expected no procedures";<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>      // delete the procedure<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      deleteEntry(entry.getProcId());<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  private void deleteEntry(final long procId) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    if (LOG.isTraceEnabled()) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      LOG.trace("delete entry " + procId);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    maxProcId = Math.max(maxProcId, procId);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    localProcedureMap.remove(procId);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    assert !procedureMap.contains(procId);<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    if (tracker.isPartial()) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      tracker.setDeleted(procId, true);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    }<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    if (localTracker != null) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      // In case there is only delete entry for this procedure in current log.<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      localTracker.setDeleted(procId, 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><a name="line.284"></a>
-<span class="sourceLineNo">285</span>  private boolean isDeleted(final long procId) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    return tracker.isDeleted(procId) == ProcedureStoreTracker.DeleteState.YES;<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>  private boolean isRequired(final long procId) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    return !isDeleted(procId) &amp;&amp; !procedureMap.contains(procId);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>  // ==========================================================================<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  //  We keep an in-memory map of the procedures sorted by replay order.<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  //  (see the details in the beginning of the file)<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  //                      _______________________________________________<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  //      procedureMap = | A |   | E |   | C |   |   |   |   | G |   |   |<a name="line.297"></a>
-<span class="sourceLineNo">298</span>  //                       D               B<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  //      replayOrderHead = C &lt;-&gt; B &lt;-&gt; E &lt;-&gt; D &lt;-&gt; A &lt;-&gt; G<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  //<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  //  We also have a lazy grouping by "root procedure", and a list of<a name="line.301"></a>
-<span class="sourceLineNo">302</span>  //  unlinked procedures. If after reading all the WALs we have unlinked<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  //  procedures it means that we had a missing WAL or a corruption.<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  //      rootHead = A &lt;-&gt; D &lt;-&gt; G<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  //                 B     E<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  //                 C<a name="line.306"></a>
-<span class="sourceLineNo">307</span>  //      unlinkFromLinkList = None<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  // ==========================================================================<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  private static class Entry {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    // For bucketed linked lists in hash-table.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    protected Entry hashNext;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    // child head<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    protected Entry childHead;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    // double-link for rootHead or childHead<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    protected Entry linkNext;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    protected Entry linkPrev;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    // replay double-linked-list<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    protected Entry replayNext;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    protected Entry replayPrev;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    // procedure-infos<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    protected Procedure procedure;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    protected ProcedureProtos.Procedure proto;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    protected boolean ready = false;<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    public Entry(Entry hashNext) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.hashNext = hashNext;<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>    public long getProcId() {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      return proto.getProcId();<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 long getParentId() {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      return proto.getParentId();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>    public boolean hasParent() {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      return proto.hasParentId();<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>    public boolean isReady() {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      return ready;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span>    public boolean isFinished() {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      if (!hasParent()) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        // we only consider 'root' procedures. because for the user 'finished'<a name="line.347"></a>
-<span class="sourceLineNo">348</span>        // means when everything up to the 'root' is finished.<a name="line.348"></a>
-<span class="sourceLineNo">349</span>        switch (proto.getState()) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>          case ROLLEDBACK:<a name="line.350"></a>
-<span class="sourceLineNo">351</span>          case SUCCESS:<a name="line.351"></a>
-<span class="sourceLineNo">352</span>            return true;<a name="line.352"></a>
-<span class="sourceLineNo">353</span>          default:<a name="line.353"></a>
-<span class="sourceLineNo">354</span>            break;<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>      return false;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public Procedure convert() throws IOException {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      if (procedure == null) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        procedure = ProcedureUtil.convertToProcedure(proto);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      }<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      return procedure;<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>    @Override<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    public String toString() {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      final StringBuilder sb = new StringBuilder();<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      sb.append("Entry(");<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      sb.append(getProcId());<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      sb.append(", parentId=");<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      sb.append(getParentId());<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      sb.append(", class=");<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      sb.append(proto.getClassName());<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      sb.append(")");<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      return sb.toString();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>  private static class EntryIterator implements ProcedureIterator {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    private final Entry replayHead;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    private Entry current;<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>    public EntryIterator(Entry replayHead) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      this.replayHead = replayHead;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      this.current = replayHead;<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>    @Override<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    public void reset() {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      this.current = replayHead;<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>    @Override<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    public boolean hasNext() {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      return current != null;<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>    @Override<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    public boolean isNextFinished() {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      return current != null &amp;&amp; current.isFinished();<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>    @Override<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    public void skipNext() {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      current = current.replayNext;<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>    @Override<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    public Procedure next() throws IOException {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      try {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        return current.convert();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      } finally {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        current = current.replayNext;<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      }<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  }<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span>  private static class WalProcedureMap {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    // procedure hash table<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    private Entry[] procedureMap;<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>    // replay-order double-linked-list<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    private Entry replayOrderHead;<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    private Entry replayOrderTail;<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>    // root linked-list<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    private Entry rootHead;<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>    // pending unlinked children (root not present yet)<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    private Entry childUnlinkedHead;<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    // Track ProcId range<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    private long minProcId = Long.MAX_VALUE;<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    private long maxProcId = Long.MIN_VALUE;<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    public WalProcedureMap(int size) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      procedureMap = new Entry[size];<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      replayOrderHead = null;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      replayOrderTail = null;<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      rootHead = null;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      childUnlinkedHead = null;<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 void add(ProcedureProtos.Procedure procProto) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      trackProcIds(procProto.getProcId());<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      Entry entry = addToMap(procProto.getProcId(), procProto.hasParentId());<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      boolean newEntry = entry.proto == null;<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      // We have seen procedure WALs where the entries are out of order; see HBASE-18152.<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      // To compensate, only replace the Entry procedure if for sure this new procedure<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      // is indeed an entry that came later. TODO: Fix the writing of procedure info so<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      // it does not violate basic expectation, that WALs contain procedure changes going<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      // from start to finish in sequence.<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      if (newEntry || isIncreasing(entry.proto, procProto)) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        entry.proto = procProto;<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      addToReplayList(entry);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      if(newEntry) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        if (procProto.hasParentId()) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          childUnlinkedHead = addToLinkList(entry, childUnlinkedHead);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        } else {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          rootHead = addToLinkList(entry, rootHead);<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><a name="line.467"></a>
-<span class="sourceLineNo">468</span>    /**<a name="line.468"></a>
-<span class="sourceLineNo">469</span>     * @return True if this new procedure is 'richer' than the current one else<a name="line.469"></a>
-<span class="sourceLineNo">470</span>     * false and we log this incidence where it appears that the WAL has older entries<a name="line.470"></a>
-<span class="sourceLineNo">471</span>     * appended after newer ones. See HBASE-18152.<a name="line.471"></a>
-<span class="sourceLineNo">472</span>     */<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    private static boolean isIncreasing(ProcedureProtos.Procedure current,<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        ProcedureProtos.Procedure candidate) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      // Check that the procedures we see are 'increasing'. We used to compare<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      // procedure id first and then update time but it can legitimately go backwards if the<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      // procedure is failed or rolled back so that was unreliable. Was going to compare<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      // state but lets see if comparing update time enough (unfortunately this issue only<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      // seen under load...)<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      boolean increasing = current.getLastUpdate() &lt;= candidate.getLastUpdate();<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      if (!increasing) {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        LOG.warn("NOT INCREASING! current=" + current + ", candidate=" + candidate);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      }<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      return increasing;<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>    public boolean remove(long procId) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      trackProcIds(procId);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      Entry entry = removeFromMap(procId);<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      if (entry != null) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        unlinkFromReplayList(entry);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        unlinkFromLinkList(entry);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        return true;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      }<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      return false;<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    }<a name="line.496"></a>
-<span class="sourceLineNo">497</span><a name="line.497"></a>
-<span class="sourceLineNo">498</span>    private void trackProcIds(long procId) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      minProcId = Math.min(minProcId, procId);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      maxProcId = Math.max(maxProcId, procId);<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    }<a name="line.501"></a>
-<span class="sourceLineNo">502</span><a name="line.502"></a>
-<span class="sourceLineNo">503</span>    public long getMinProcId() {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      return minProcId;<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>    public long getMaxProcId() {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      return maxProcId;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>    public boolean contains(long procId) {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      return getProcedure(procId) != null;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    }<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>    public boolean isEmpty() {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      return replayOrderHead == null;<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span>    public void clear() {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        procedureMap[i] = null;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      }<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      replayOrderHead = null;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      replayOrderTail = null;<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      rootHead = null;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      childUnlinkedHead = null;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      minProcId = Long.MAX_VALUE;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      maxProcId = Long.MIN_VALUE;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>    /*<a name="line.531"></a>
-<span class="sourceLineNo">532</span>     * Merges two WalProcedureMap,<a name="line.532"></a>
-<span class="sourceLineNo">533</span>     * the target is the "global" map, the source is the "local" map.<a name="line.533"></a>
-<span class="sourceLineNo">534</span>     *  - The entries in the hashtables are guaranteed to be unique.<a name="line.534"></a>
-<span class="sourceLineNo">535</span>     *    On replay we don't load procedures that already exist in the "global"<a name="line.535"></a>
-<span class="sourceLineNo">536</span>     *    map (the one we are merging the "local" in to).<a name="line.536"></a>
-<span class="sourceLineNo">537</span>     *  - The replayOrderList of the "local" nao will be appended to the "global"<a name="line.537"></a>
-<span class="sourceLineNo">538</span>     *    map replay list.<a name="line.538"></a>
-<span class="sourceLineNo">539</span>     *  - The "local" map will be cleared at the end of the operation.<a name="line.539"></a>
-<span class="sourceLineNo">540</span>     */<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    public void mergeTail(WalProcedureMap other) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      for (Entry p = other.replayOrderHead; p != null; p = p.replayNext) {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>        int slotIndex = getMapSlot(p.getProcId());<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        p.hashNext = procedureMap[slotIndex];<a name="line.544"></a>
-<span class="sourceLineNo">545</span>        procedureMap[slotIndex] = p;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>      if (replayOrderHead == null) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>        replayOrderHead = other.replayOrderHead;<a name="line.549"></a>
-<span class="sourceLineNo">550</span>        replayOrderTail = other.replayOrderTail;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>        rootHead = other.rootHead;<a name="line.551"></a>
-<span class="sourceLineNo">552</span>        childUnlinkedHead = other.childUnlinkedHead;<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      } else {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>        // append replay list<a name="line.554"></a>
-<span class="sourceLineNo">555</span>        assert replayOrderTail.replayNext == null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>        assert other.replayOrderHead.replayPrev == null;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>        replayOrderTail.replayNext = other.replayOrderHead;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>        other.replayOrderHead.replayPrev = replayOrderTail;<a name="line.558"></a>
-<span class="sourceLineNo">559</span>        replayOrderTail = other.replayOrderTail;<a name="line.559"></a>
-<span class="sourceLineNo">560</span><a name="line.560"></a>
-<span class="sourceLineNo">561</span>        // merge rootHead<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        if (rootHead == null) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>          rootHead = other.rootHead;<a name="line.563"></a>
-<span class="sourceLineNo">564</span>        } else if (other.rootHead != null) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>          Entry otherTail = findLinkListTail(other.rootHead);<a name="line.565"></a>
-<span class="sourceLineNo">566</span>          otherTail.linkNext = rootHead;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>          rootHead.linkPrev = otherTail;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>          rootHead = other.rootHead;<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>        // merge childUnlinkedHead<a name="line.571"></a>
-<span class="sourceLineNo">572</span>        if (childUnlinkedHead == null) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>          childUnlinkedHead = other.childUnlinkedHead;<a name="line.573"></a>
-<span class="sourceLineNo">574</span>        } else if (other.childUnlinkedHead != null) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>          Entry otherTail = findLinkListTail(other.childUnlinkedHead);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>          otherTail.linkNext = childUnlinkedHead;<a name="line.576"></a>
-<span class="sourceLineNo">577</span>          childUnlinkedHead.linkPrev = otherTail;<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          childUnlinkedHead = other.childUnlinkedHead;<a name="line.578"></a>
-<span class="sourceLineNo">579</span>        }<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      }<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      maxProcId = Math.max(maxProcId, other.maxProcId);<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      minProcId = Math.max(minProcId, other.minProcId);<a name="line.582"></a>
-<span class="sourceLineNo">583</span><a name="line.583"></a>
-<span class="sourceLineNo">584</span>      other.clear();<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    }<a name="line.585"></a>
-<span class="sourceLineNo">586</span><a name="line.586"></a>
-<span class="sourceLineNo">587</span>    /*<a name="line.587"></a>
-<span class="sourceLineNo">588</span>     * Returns an EntryIterator with the list of procedures ready<a name="line.588"></a>
-<span class="sourceLineNo">589</span>     * to be added to the executor.<a name="line.589"></a>
-<span class="sourceLineNo">590</span>     * A Procedure is ready if its children and parent are ready.<a name="line.590"></a>
-<span class="sourceLineNo">591</span>     */<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    public EntryIterator fetchReady() {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      buildGraph();<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>      Entry readyHead = null;<a name="line.595"></a>
-<span class="sourceLineNo">596</span>      Entry readyTail = null;<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      Entry p = replayOrderHead;<a name="line.597"></a>
-<span class="sourceLineNo">598</span>      while (p != null) {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>        Entry next = p.replayNext;<a name="line.599"></a>
-<span class="sourceLineNo">600</span>        if (p.isReady()) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>          unlinkFromReplayList(p);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>          if (readyTail != null) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>            readyTail.replayNext = p;<a name="line.603"></a>
-<span class="sourceLineNo">604</span>            p.replayPrev = readyTail;<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          } else {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>            p.replayPrev = null;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>            readyHead = p;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>          }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>          readyTail = p;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          p.replayNext = null;<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        }<a name="line.611"></a>
-<span class="sourceLineNo">612</span>        p = next;<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      }<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      // we need the hash-table lookups for parents, so this must be done<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      // out of the loop where we check isReadyToRun()<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      for (p = readyHead; p != null; p = p.replayNext) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        removeFromMap(p.getProcId());<a name="line.617"></a>
-<span class="sourceLineNo">618</span>        unlinkFromLinkList(p);<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      }<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return readyHead != null ? new EntryIterator(readyHead) : null;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    }<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>     * Drain this map and return all procedures in it.<a name="line.624"></a>
-<span class="sourceLineNo">625</span>     */<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    public EntryIterator fetchAll() {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      Entry head = replayOrderHead;<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      for (Entry p = head; p != null; p = p.replayNext) {<a name="line.628"></a>
-<span class="sourceLineNo">629</span>        removeFromMap(p.getProcId());<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      }<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>        assert procedureMap[i] == null : "map not empty i=" + i;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      replayOrderHead = null;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      replayOrderTail = null;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      childUnlinkedHead = null;<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      rootHead = null;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      return head != null ? new EntryIterator(head) : null;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    }<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span>    private void buildGraph() {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      Entry p = childUnlinkedHead;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      while (p != null) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>        Entry next = p.linkNext;<a name="line.644"></a>
-<span class="sourceLineNo">645</span>        Entry rootProc = getRootProcedure(p);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        if (rootProc != null) {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>          rootProc.childHead = addToLinkList(p, rootProc.childHead);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        }<a name="line.648"></a>
-<span class="sourceLineNo">649</span>        p = next;<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span>      for (p = rootHead; p != null; p = p.linkNext) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        checkReadyToRun(p);<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      }<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
-<span class="sourceLineNo">656</span><a name="line.656"></a>
-<span class="sourceLineNo">657</span>    private Entry getRootProcedure(Entry entry) {<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      while (entry != null &amp;&amp; entry.hasParent()) {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        entry = getProcedure(entry.getParentId());<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      }<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      return entry;<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    }<a name="line.662"></a>
-<span class="sourceLineNo">663</span><a name="line.663"></a>
-<span class="sourceLineNo">664</span>    /*<a name="line.664"></a>
-<span class="sourceLineNo">665</span>     * (see the comprehensive explanation in the beginning of the file)<a name="line.665"></a>
-<span class="sourceLineNo">666</span>     * A Procedure is ready when parent and children are ready.<a name="line.666"></a>
-<span class="sourceLineNo">667</span>     * "ready" means that we all the information that we need in-memory.<a name="line.667"></a>
-<span class="sourceLineNo">668</span>     *<a name="line.668"></a>
-<span class="sourceLineNo">669</span>     * Example-1:<a name="line.669"></a>
-<span class="sourceLineNo">670</span>     * We have two WALs, we start reading from the newest (wal-2)<a name="line.670"></a>
-<span class="sourceLineNo">671</span>     *    wal-2 | C B |<a name="line.671"></a>
-<span class="sourceLineNo">672</span>     *    wal-1 | A B C |<a name="line.672"></a>
-<span class="sourceLineNo">673</span>     *<a name="line.673"></a>
-<span class="sourceLineNo">674</span>     * If C and B don't depend on A (A is not the parent), we can start them<a name="line.674"></a>
-<span class="sourceLineNo">675</span>     * before reading wal-1. If B is the only one with parent A we can start C.<a name="line.675"></a>
-<span class="sourceLineNo">676</span>     * We have to read one more WAL before being able to start B.<a name="line.676"></a>
-<span class="sourceLineNo">677</span>     *<a name="line.677"></a>
-<span class="sourceLineNo">678</span>     * How do we know with the only information in B that we are not ready.<a name="line.678"></a>
-<span class="sourceLineNo">679</span>     *  - easy case, the parent is missing from the global map<a name="line.679"></a>
-<span class="sourceLineNo">680</span>     *  - more complex case we look at the Stack IDs.<a name="line.680"></a>
-<span class="sourceLineNo">681</span>     *<a name="line.681"></a>
-<span class="sourceLineNo">682</span>     * The Stack-IDs are added to the procedure order as an incremental index<a name="line.682"></a>
-<span class="sourceLineNo">683</span>     * tracking how many times that procedure was executed, which is equivalent<a name="line.683"></a>
-<span class="sourceLineNo">684</span>     * to the number of times we wrote the procedure to the WAL.<a name="line.684"></a>
-<span class="sourceLineNo">685</span>     * In the example above:<a name="line.685"></a>
-<span class="sourceLineNo">686</span>     *   wal-2: B has stackId = [1, 2]<a name="line.686"></a>
-<span class="sourceLineNo">687</span>     *   wal-1: B has stackId = [1]<a name="line.687"></a>
-<span class="sourceLineNo">688</span>     *   wal-1: A has stackId = [0]<a name="line.688"></a>
-<span class="sourceLineNo">689</span>     *<a name="line.689"></a>
-<span class="sourceLineNo">690</span>     * Since we know that the Stack-IDs are incremental for a Procedure,<a name="line.690"></a>
-<span class="sourceLineNo">691</span>     * we notice that there is a gap in the stackIds of B, so something was<a name="line.691"></a>
-<span class="sourceLineNo">692</span>     * executed before.<a name="line.692"></a>
-<span class="sourceLineNo">693</span>     * To identify when a Procedure is ready we do the sum of the stackIds of<a name="line.693"></a>
-<span class="sourceLineNo">694</span>     * the procedure and the parent. if the stackIdSum is equal to the<a name="line.694"></a>
-<span class="sourceLineNo">695</span>     * sum of {1..maxStackId} then everything we need is available.<a name="line.695"></a>
-<span class="sourceLineNo">696</span>     *<a name="line.696"></a>
-<span class="sourceLineNo">697</span>     * Example-2<a name="line.697"></a>
-<span class="sourceLineNo">698</span>     *    wal-2 | A |              A stackIds = [0, 2]<a name="line.698"></a>
-<span class="sourceLineNo">699</span>     *    wal-1 | A B |            B stackIds = [1]<a name="line.699"></a>
-<span class="sourceLineNo">700</span>     *<a name="line.700"></a>
-<span class="sourceLineNo">701</span>     * There is a gap between A stackIds so something was executed in between.<a name="line.701"></a>
-<span class="sourceLineNo">702</span>     */<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    private boolean checkReadyToRun(Entry rootEntry) {<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      assert !rootEntry.hasParent() : "expected root procedure, got " + rootEntry;<a name="line.704"></a>
-<span class="sourceLineNo">705</span><a name="line.705"></a>
-<span class="sourceLineNo">706</span>      if (rootEntry.isFinished()) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>        // If the root procedure is finished, sub-procedures should be gone<a name="line.707"></a>
-<span class="sourceLineNo">708</span>        if (rootEntry.childHead != null) {<a name="line.708"></a>
-<span class="sourceLineNo">709</span>          LOG.error("unexpected active children for root-procedure: " + rootEntry);<a name="line.709"></a>
-<span class="sourceLineNo">710</span>          for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>            LOG.error("unexpected active children: " + p);<a name="line.711"></a>
-<span class="sourceLineNo">712</span>          }<a name="line.712"></a>
-<span class="sourceLineNo">713</span>        }<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span>        assert rootEntry.childHead == null : "unexpected children on root completion. " + rootEntry;<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        rootEntry.ready = true;<a name="line.716"></a>
-<span class="sourceLineNo">717</span>        return true;<a name="line.717"></a>
-<span class="sourceLineNo">718</span>      }<a name="line.718"></a>
-<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>      int stackIdSum = 0;<a name="line.720"></a>
-<span class="sourceLineNo">721</span>      int maxStackId = 0;<a name="line.721"></a>
-<span class="sourceLineNo">722</span>      for (int i = 0; i &lt; rootEntry.proto.getStackIdCount(); ++i) {<a name="line.722"></a>
-<span class="sourceLineNo">723</span>        int stackId = 1 + rootEntry.proto.getStackId(i);<a name="line.723"></a>
-<span class="sourceLineNo">724</span>        maxStackId  = Math.max(maxStackId, stackId);<a name="line.724"></a>
-<span class="sourceLineNo">725</span>        stackIdSum += stackId;<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        if (LOG.isTraceEnabled()) {<a name="line.726"></a>
-<span class="sourceLineNo">727</span>          LOG.trace("stackId=" + stackId + " stackIdSum=" + stackIdSum +<a name="line.727"></a>
-<span class="sourceLineNo">728</span>          " maxStackid=" + maxStackId + " " + rootEntry);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>        }<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
-<span class="sourceLineNo">731</span><a name="line.731"></a>
-<span class="sourceLineNo">732</span>      for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        for (int i = 0; i &lt; p.proto.getStackIdCount(); ++i) {<a name="line.733"></a>
-<span class="sourceLineNo">734</span>          int stackId = 1 + p.proto.getStackId(i);<a name="line.734"></a>
-<span class="sourceLineNo">735</span>          maxStackId  = Math.max(maxStackId, stackId);<a name="line.735"></a>
-<span class="sourceLineNo">736</span>          stackIdSum += stackId;<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          if (LOG.isTraceEnabled()) {<a name="line.737"></a>
-<span class="sourceLineNo">738</span>            LOG.trace("stackId=" + stackId + " stackIdSum=" + stackIdSum +<a name="line.738"></a>
-<span class="sourceLineNo">739</span>              " maxStackid=" + maxStackId + " " + p);<a name="line.739"></a>
-<span class="sourceLineNo">740</span>          }<a name="line.740"></a>
-<span class="sourceLineNo">741</span>        }<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      }<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      // The cmpStackIdSum is this formula for finding the sum of a series of numbers:<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      // http://www.wikihow.com/Sum-the-Integers-from-1-to-N#/Image:Sum-the-Integers-from-1-to-N-Step-2-Version-3.jpg<a name="line.744"></a>
-<span class="sourceLineNo">745</span>      final int cmpStackIdSum = (maxStackId * (maxStackId + 1) / 2);<a name="line.745"></a>
-<span class="sourceLineNo">746</span>      if (cmpStackIdSum == stackIdSum) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        rootEntry.ready = true;<a name="line.747"></a>
-<span class="sourceLineNo">748</span>        for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.748"></a>
-<span class="sourceLineNo">749</span>          p.ready = true;<a name="line.749"></a>
-<span class="sourceLineNo">750</span>        }<a name="line.750"></a>
-<span class="sourceLineNo">751</span>        return true;<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      }<a name="line.752"></a>
-<span class="sourceLineNo">753</span>      return false;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    }<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span>    private void unlinkFromReplayList(Entry entry) {<a name="line.756"></a>
-<span class="sourceLineNo">757</span>      if (replayOrderHead == entry) {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>        replayOrderHead = entry.replayNext;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>      }<a name="line.759"></a>
-<span class="sourceLineNo">760</span>      if (replayOrderTail == entry) {<a name="line.760"></a>
-<span class="sourceLineNo">761</span>        replayOrderTail = entry.replayPrev;<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      }<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      if (entry.replayPrev != null) {<a name="line.763"></a>
-<span class="sourceLineNo">764</span>        entry.replayPrev.replayNext = entry.replayNext;<a name="line.764"></a>
-<span class="sourceLineNo">765</span>      }<a name="line.765"></a>
-<span class="sourceLineNo">766</span>      if (entry.replayNext != null) {<a name="line.766"></a>
-<span class="sourceLineNo">767</span>        entry.replayNext.replayPrev = entry.replayPrev;<a name="line.767"></a>
-<span class="sourceLineNo">768</span>      }<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    }<a name="line.769"></a>
-<span class="sourceLineNo">770</span><a name="line.770"></a>
-<span class="sourceLineNo">771</span>    private void addToReplayList(final Entry entry) {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      unlinkFromReplayList(entry);<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      entry.replayNext = replayOrderHead;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>      entry.replayPrev = null;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>      if (replayOrderHead != null) {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>        replayOrderHead.replayPrev = entry;<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      } else {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>        replayOrderTail = entry;<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      }<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      replayOrderHead = entry;<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>    private void unlinkFromLinkList(Entry entry) {<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      if (entry == rootHead) {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        rootHead = entry.linkNext;<a name="line.785"></a>
-<span class="sourceLineNo">786</span>      } else if (entry == childUnlinkedHead) {<a name="line.786"></a>
-<span class="sourceLineNo">787</span>        childUnlinkedHead = entry.linkNext;<a name="line.787"></a>
-<span class="sourceLineNo">788</span>      }<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      if (entry.linkPrev != null) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>        entry.linkPrev.linkNext = entry.linkNext;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>      }<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      if (entry.linkNext != null) {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>        entry.linkNext.linkPrev = entry.linkPrev;<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      }<a name="line.794"></a>
-<span class="sourceLineNo">795</span>    }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span>    private Entry addToLinkList(Entry entry, Entry linkHead) {<a name="line.797"></a>
-<span class="sourceLineNo">798</span>      unlinkFromLinkList(entry);<a name="line.798"></a>
-<span class="sourceLineNo">799</span>      entry.linkNext = linkHead;<a name="line.799"></a>
-<span class="sourceLineNo">800</span>      entry.linkPrev = null;<a name="line.800"></a>
-<span class="sourceLineNo">801</span>      if (linkHead != null) {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>        linkHead.linkPrev = entry;<a name="line.802"></a>
-<span class="sourceLineNo">803</span>      }<a name="line.803"></a>
-<span class="sourceLineNo">804</span>      return entry;<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    }<a name="line.805"></a>
-<span class="sourceLineNo">806</span><a name="line.806"></a>
-<span class="sourceLineNo">807</span>    private Entry findLinkListTail(Entry linkHead) {<a name="line.807"></a>
-<span class="sourceLineNo">808</span>      Entry tail = linkHead;<a name="line.808"></a>
-<span class="sourceLineNo">809</span>      while (tail.linkNext != null) {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>        tail = tail.linkNext;<a name="line.810"></a>
-<span class="sourceLineNo">811</span>      }<a name="line.811"></a>
-<span class="sourceLineNo">812</span>      return tail;<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    }<a name="line.813"></a>
-<span class="sourceLineNo">814</span><a name="line.814"></a>
-<span class="sourceLineNo">815</span>    private Entry addToMap(final long procId, final boolean hasParent) {<a name="line.815"></a>
-<span class="sourceLineNo">816</span>      int slotIndex = getMapSlot(procId);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      Entry entry = getProcedure(slotIndex, procId);<a name="line.817"></a>
-<span class="sourceLineNo">818</span>      if (entry != null) return entry;<a name="line.818"></a>
-<span class="sourceLineNo">819</span><a name="line.819"></a>
-<span class="sourceLineNo">820</span>      entry = new Entry(procedureMap[slotIndex]);<a name="line.820"></a>
-<span class="sourceLineNo">821</span>      procedureMap[slotIndex] = entry;<a name="line.821"></a>
-<span class="sourceLineNo">822</span>      return entry;<a name="line.822"></a>
-<span class="sourceLineNo">823</span>    }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>    private Entry removeFromMap(final long procId) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span>      int slotIndex = getMapSlot(procId);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>      Entry prev = null;<a name="line.827"></a>
-<span class="sourceLineNo">828</span>      Entry entry = procedureMap[slotIndex];<a name="line.828"></a>
-<span class="sourceLineNo">829</span>      while (entry != null) {<a name="line.829"></a>
-<span class="sourceLineNo">830</span>        if (procId == entry.getProcId()) {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>          if (prev != null) {<a name="line.831"></a>
-<span class="sourceLineNo">832</span>            prev.hashNext = entry.hashNext;<a name="line.832"></a>
-<span class="sourceLineNo">833</span>          } else {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>            procedureMap[slotIndex] = entry.hashNext;<a name="line.834"></a>
-<span class="sourceLineNo">835</span>          }<a name="line.835"></a>
-<span class="sourceLineNo">836</span>          entry.hashNext = null;<a name="line.836"></a>
-<span class="sourceLineNo">837</span>          return entry;<a name="line.837"></a>
-<span class="sourceLineNo">838</span>        }<a name="line.838"></a>
-<span class="sourceLineNo">839</span>        prev = entry;<a name="line.839"></a>
-<span class="sourceLineNo">840</span>        entry = entry.hashNext;<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      }<a name="line.841"></a>
-<span class="sourceLineNo">842</span>      return null;<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    }<a name="line.843"></a>
-<span class="sourceLineNo">844</span><a name="line.844"></a>
-<span class="sourceLineNo">845</span>    private Entry getProcedure(final long procId) {<a name="line.845"></a>
-<span class="sourceLineNo">846</span>      return getProcedure(getMapSlot(procId), procId);<a name="line.846"></a>
-<span class="sourceLineNo">847</span>    }<a name="line.847"></a>
-<span class="sourceLineNo">848</span><a name="line.848"></a>
-<span class="sourceLineNo">849</span>    private Entry getProcedure(final int slotIndex, final long procId) {<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      Entry entry = procedureMap[slotIndex];<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      while (entry != null) {<a name="line.851"></a>
-<span class="sourceLineNo">852</span>        if (procId == entry.getProcId()) {<a name="line.852"></a>
-<span class="sourceLineNo">853</span>          return entry;<a name="line.853"></a>
-<span class="sourceLineNo">854</span>        }<a name="line.854"></a>
-<span class="sourceLineNo">855</span>        entry = entry.hashNext;<a name="line.855"></a>
-<span class="sourceLineNo">856</span>      }<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      return null;<a name="line.857"></a>
-<span class="sourceLineNo">858</span>    }<a name="line.858"></a>
-<span class="sourceLineNo">859</span><a name="line.859"></a>
-<span class="sourceLineNo">860</span>    private int getMapSlot(final long procId) {<a name="line.860"></a>
-<span class="sourceLineNo">861</span>      return (int)(Procedure.getProcIdHashCode(procId) % procedureMap.length);<a name="line.861"></a>
-<span class="sourceLineNo">862</span>    }<a name="line.862"></a>
-<span class="sourceLineNo">863</span>  }<a name="line.863"></a>
-<span class="sourceLineNo">864</span>}<a name="line.864"></a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
-</html>


[19/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html
index 6253d3f..8af2ed0 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html
@@ -23,853 +23,272 @@
 <span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
 <span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
-<span class="sourceLineNo">018</span><a name="line.18"></a>
-<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.procedure2.store.wal;<a name="line.19"></a>
-<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hbase.thirdparty.com.google.protobuf.InvalidProtocolBufferException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span><a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.slf4j.Logger;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.slf4j.LoggerFactory;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureIterator;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry;<a name="line.35"></a>
-<span class="sourceLineNo">036</span><a name="line.36"></a>
-<span class="sourceLineNo">037</span>/**<a name="line.37"></a>
-<span class="sourceLineNo">038</span> * Helper class that loads the procedures stored in a WAL<a name="line.38"></a>
-<span class="sourceLineNo">039</span> */<a name="line.39"></a>
-<span class="sourceLineNo">040</span>@InterfaceAudience.Private<a name="line.40"></a>
-<span class="sourceLineNo">041</span>@InterfaceStability.Evolving<a name="line.41"></a>
-<span class="sourceLineNo">042</span>public class ProcedureWALFormatReader {<a name="line.42"></a>
-<span class="sourceLineNo">043</span>  private static final Logger LOG = LoggerFactory.getLogger(ProcedureWALFormatReader.class);<a name="line.43"></a>
-<span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>  // ==============================================================================================<a name="line.45"></a>
-<span class="sourceLineNo">046</span>  //  We read the WALs in reverse order from the newest to the oldest.<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  //  We have different entry types:<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  //   - INIT: Procedure submitted by the user (also known as 'root procedure')<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  //   - INSERT: Children added to the procedure &lt;parentId&gt;:[&lt;childId&gt;, ...]<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  //   - UPDATE: The specified procedure was updated<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  //   - DELETE: The procedure was removed (finished/rolledback and result TTL expired)<a name="line.51"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.procedure2.store.wal;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureIterator;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.slf4j.Logger;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.slf4j.LoggerFactory;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hbase.thirdparty.com.google.protobuf.InvalidProtocolBufferException;<a name="line.28"></a>
+<span class="sourceLineNo">029</span><a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry;<a name="line.31"></a>
+<span class="sourceLineNo">032</span><a name="line.32"></a>
+<span class="sourceLineNo">033</span>/**<a name="line.33"></a>
+<span class="sourceLineNo">034</span> * Helper class that loads the procedures stored in a WAL<a name="line.34"></a>
+<span class="sourceLineNo">035</span> */<a name="line.35"></a>
+<span class="sourceLineNo">036</span>@InterfaceAudience.Private<a name="line.36"></a>
+<span class="sourceLineNo">037</span>public class ProcedureWALFormatReader {<a name="line.37"></a>
+<span class="sourceLineNo">038</span>  private static final Logger LOG = LoggerFactory.getLogger(ProcedureWALFormatReader.class);<a name="line.38"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span>  // ==============================================================================================<a name="line.40"></a>
+<span class="sourceLineNo">041</span>  //  We read the WALs in reverse order from the newest to the oldest.<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  //  We have different entry types:<a name="line.42"></a>
+<span class="sourceLineNo">043</span>  //   - INIT: Procedure submitted by the user (also known as 'root procedure')<a name="line.43"></a>
+<span class="sourceLineNo">044</span>  //   - INSERT: Children added to the procedure &lt;parentId&gt;:[&lt;childId&gt;, ...]<a name="line.44"></a>
+<span class="sourceLineNo">045</span>  //   - UPDATE: The specified procedure was updated<a name="line.45"></a>
+<span class="sourceLineNo">046</span>  //   - DELETE: The procedure was removed (finished/rolledback and result TTL expired)<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  //<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  // In the WAL we can find multiple times the same procedure as UPDATE or INSERT.<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  // We read the WAL from top to bottom, so every time we find an entry of the<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  // same procedure, that will be the "latest" update (Caveat: with multiple threads writing<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  // the store, this assumption does not hold).<a name="line.51"></a>
 <span class="sourceLineNo">052</span>  //<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  // In the WAL we can find multiple times the same procedure as UPDATE or INSERT.<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  // We read the WAL from top to bottom, so every time we find an entry of the<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  // same procedure, that will be the "latest" update (Caveat: with multiple threads writing<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  // the store, this assumption does not hold).<a name="line.56"></a>
+<span class="sourceLineNo">053</span>  // We keep two in-memory maps:<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  //  - localProcedureMap: is the map containing the entries in the WAL we are processing<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  //  - procedureMap: is the map containing all the procedures we found up to the WAL in process.<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  // localProcedureMap is merged with the procedureMap once we reach the WAL EOF.<a name="line.56"></a>
 <span class="sourceLineNo">057</span>  //<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  // We keep two in-memory maps:<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  //  - localProcedureMap: is the map containing the entries in the WAL we are processing<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  //  - procedureMap: is the map containing all the procedures we found up to the WAL in process.<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  // localProcedureMap is merged with the procedureMap once we reach the WAL EOF.<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  //<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  // Since we are reading the WALs in reverse order (newest to oldest),<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  // if we find an entry related to a procedure we already have in 'procedureMap' we can discard it.<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  //<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  // The WAL is append-only so the last procedure in the WAL is the one that<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  // was in execution at the time we crashed/closed the server.<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  // Given that, the procedure replay order can be inferred by the WAL order.<a name="line.68"></a>
+<span class="sourceLineNo">058</span>  // Since we are reading the WALs in reverse order (newest to oldest),<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  // if we find an entry related to a procedure we already have in 'procedureMap' we can discard it.<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  //<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  // The WAL is append-only so the last procedure in the WAL is the one that<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  // was in execution at the time we crashed/closed the server.<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  // Given that, the procedure replay order can be inferred by the WAL order.<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  //<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  // Example:<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  //    WAL-2: [A, B, A, C, D]<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  //    WAL-1: [F, G, A, F, B]<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  //    Replay-Order: [D, C, A, B, F, G]<a name="line.68"></a>
 <span class="sourceLineNo">069</span>  //<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  // Example:<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  //    WAL-2: [A, B, A, C, D]<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  //    WAL-1: [F, G, A, F, B]<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  //    Replay-Order: [D, C, A, B, F, G]<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  //<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  // The "localProcedureMap" keeps a "replayOrder" list. Every time we add the<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  // record to the map that record is moved to the head of the "replayOrder" list.<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  // Using the example above:<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  //    WAL-2 localProcedureMap.replayOrder is [D, C, A, B]<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  //    WAL-1 localProcedureMap.replayOrder is [F, G]<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  //<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  // Each time we reach the WAL-EOF, the "replayOrder" list is merged/appended in 'procedureMap'<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  // so using the example above we end up with: [D, C, A, B] + [F, G] as replay order.<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  //<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  //  Fast Start: INIT/INSERT record and StackIDs<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  // ---------------------------------------------<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  // We have two special records, INIT and INSERT, that track the first time<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  // the procedure was added to the WAL. We can use this information to be able<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  // to start procedures before reaching the end of the WAL, or before reading all WALs.<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  // But in some cases, the WAL with that record can be already gone.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  // As an alternative, we can use the stackIds on each procedure,<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  // to identify when a procedure is ready to start.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  // If there are gaps in the sum of the stackIds we need to read more WALs.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  //<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  // Example (all procs child of A):<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  //   WAL-2: [A, B]                   A stackIds = [0, 4], B stackIds = [1, 5]<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  //   WAL-1: [A, B, C, D]<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  //<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  // In the case above we need to read one more WAL to be able to consider<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  // the root procedure A and all children as ready.<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  // ==============================================================================================<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private final WalProcedureMap localProcedureMap = new WalProcedureMap(1024);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  private final WalProcedureMap procedureMap = new WalProcedureMap(1024);<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  private final ProcedureWALFormat.Loader loader;<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>   * Global tracker that will be used by the WALProcedureStore after load.<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   * If the last WAL was closed cleanly we already have a full tracker ready to be used.<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * If the last WAL was truncated (e.g. master killed) the tracker will be empty<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * and the 'partial' flag will be set. In this case, on WAL replay we are going<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * to rebuild the tracker.<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   */<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private final ProcedureStoreTracker tracker;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  // TODO: private final boolean hasFastStartSupport;<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>   * If tracker for a log file is partial (see {@link ProcedureStoreTracker#partial}), we<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * re-build the list of procedures updated in that WAL because we need it for log cleaning<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * purposes. If all procedures updated in a WAL are found to be obsolete, it can be safely deleted.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * (see {@link WALProcedureStore#removeInactiveLogs()}).<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * However, we don't need deleted part of a WAL's tracker for this purpose, so we don't bother<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   * re-building it.<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   */<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  private ProcedureStoreTracker localTracker;<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>  // private long compactionLogId;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  private long maxProcId = 0;<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>  public ProcedureWALFormatReader(final ProcedureStoreTracker tracker,<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      ProcedureWALFormat.Loader loader) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    this.tracker = tracker;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    this.loader = loader;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    // we support fast-start only if we have a clean shutdown.<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    // this.hasFastStartSupport = !tracker.isEmpty();<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>  public void read(final ProcedureWALFile log) throws IOException {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    localTracker = log.getTracker().isPartial() ? log.getTracker() : null;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    if (localTracker != null) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      LOG.info("Rebuilding tracker for " + log);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>    long count = 0;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    FSDataInputStream stream = log.getStream();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    try {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      boolean hasMore = true;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      while (hasMore) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        ProcedureWALEntry entry = ProcedureWALFormat.readEntry(stream);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        if (entry == null) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>          LOG.warn("Nothing left to decode. Exiting with missing EOF, log=" + log);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>          break;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        }<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        count++;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        switch (entry.getType()) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>          case PROCEDURE_WAL_INIT:<a name="line.155"></a>
-<span class="sourceLineNo">156</span>            readInitEntry(entry);<a name="line.156"></a>
+<span class="sourceLineNo">070</span>  // The "localProcedureMap" keeps a "replayOrder" list. Every time we add the<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  // record to the map that record is moved to the head of the "replayOrder" list.<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  // Using the example above:<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  //    WAL-2 localProcedureMap.replayOrder is [D, C, A, B]<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  //    WAL-1 localProcedureMap.replayOrder is [F, G]<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  //<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  // Each time we reach the WAL-EOF, the "replayOrder" list is merged/appended in 'procedureMap'<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  // so using the example above we end up with: [D, C, A, B] + [F, G] as replay order.<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  //<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  //  Fast Start: INIT/INSERT record and StackIDs<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  // ---------------------------------------------<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  // We have two special records, INIT and INSERT, that track the first time<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  // the procedure was added to the WAL. We can use this information to be able<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  // to start procedures before reaching the end of the WAL, or before reading all WALs.<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  // But in some cases, the WAL with that record can be already gone.<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  // As an alternative, we can use the stackIds on each procedure,<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  // to identify when a procedure is ready to start.<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  // If there are gaps in the sum of the stackIds we need to read more WALs.<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  //<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  // Example (all procs child of A):<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  //   WAL-2: [A, B]                   A stackIds = [0, 4], B stackIds = [1, 5]<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  //   WAL-1: [A, B, C, D]<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  //<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  // In the case above we need to read one more WAL to be able to consider<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  // the root procedure A and all children as ready.<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  // ==============================================================================================<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  private final WALProcedureMap localProcedureMap = new WALProcedureMap(1024);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  private final WALProcedureMap procedureMap = new WALProcedureMap(1024);<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  private final ProcedureWALFormat.Loader loader;<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>   * Global tracker that will be used by the WALProcedureStore after load.<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   * If the last WAL was closed cleanly we already have a full tracker ready to be used.<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   * If the last WAL was truncated (e.g. master killed) the tracker will be empty<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * and the 'partial' flag will be set. In this case, on WAL replay we are going<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   * to rebuild the tracker.<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   */<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  private final ProcedureStoreTracker tracker;<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>   * If tracker for a log file is partial (see {@link ProcedureStoreTracker#partial}), we re-build<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   * the list of procedures modified in that WAL because we need it for log cleaning purposes. If<a name="line.112"></a>
+<span class="sourceLineNo">113</span>   * all procedures modified in a WAL are found to be obsolete, it can be safely deleted. (see<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * {@link WALProcedureStore#removeInactiveLogs()}).<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * &lt;p/&gt;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   * Notice that, the deleted part for this tracker will not be global valid as we can only count<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * the deletes in the current file, but it is not big problem as finally, the above tracker will<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * have the global state of deleted, and it will also be used to build the cleanup tracker.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   */<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private ProcedureStoreTracker localTracker;<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>  private long maxProcId = 0;<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>  public ProcedureWALFormatReader(final ProcedureStoreTracker tracker,<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      ProcedureWALFormat.Loader loader) {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    this.tracker = tracker;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    this.loader = loader;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>  public void read(ProcedureWALFile log) throws IOException {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    localTracker = log.getTracker();<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    if (localTracker.isPartial()) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      LOG.info("Rebuilding tracker for {}", log);<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>    long count = 0;<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    FSDataInputStream stream = log.getStream();<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    try {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      boolean hasMore = true;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      while (hasMore) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        ProcedureWALEntry entry = ProcedureWALFormat.readEntry(stream);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>        if (entry == null) {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>          LOG.warn("Nothing left to decode. Exiting with missing EOF, log={}", log);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>          break;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>        }<a name="line.145"></a>
+<span class="sourceLineNo">146</span>        count++;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>        switch (entry.getType()) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>          case PROCEDURE_WAL_INIT:<a name="line.148"></a>
+<span class="sourceLineNo">149</span>            readInitEntry(entry);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>            break;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>          case PROCEDURE_WAL_INSERT:<a name="line.151"></a>
+<span class="sourceLineNo">152</span>            readInsertEntry(entry);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>            break;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>          case PROCEDURE_WAL_UPDATE:<a name="line.154"></a>
+<span class="sourceLineNo">155</span>          case PROCEDURE_WAL_COMPACT:<a name="line.155"></a>
+<span class="sourceLineNo">156</span>            readUpdateEntry(entry);<a name="line.156"></a>
 <span class="sourceLineNo">157</span>            break;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>          case PROCEDURE_WAL_INSERT:<a name="line.158"></a>
-<span class="sourceLineNo">159</span>            readInsertEntry(entry);<a name="line.159"></a>
+<span class="sourceLineNo">158</span>          case PROCEDURE_WAL_DELETE:<a name="line.158"></a>
+<span class="sourceLineNo">159</span>            readDeleteEntry(entry);<a name="line.159"></a>
 <span class="sourceLineNo">160</span>            break;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>          case PROCEDURE_WAL_UPDATE:<a name="line.161"></a>
-<span class="sourceLineNo">162</span>          case PROCEDURE_WAL_COMPACT:<a name="line.162"></a>
-<span class="sourceLineNo">163</span>            readUpdateEntry(entry);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>            break;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>          case PROCEDURE_WAL_DELETE:<a name="line.165"></a>
-<span class="sourceLineNo">166</span>            readDeleteEntry(entry);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>            break;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>          case PROCEDURE_WAL_EOF:<a name="line.168"></a>
-<span class="sourceLineNo">169</span>            hasMore = false;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>            break;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>          default:<a name="line.171"></a>
-<span class="sourceLineNo">172</span>            throw new CorruptedWALProcedureStoreException("Invalid entry: " + entry);<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>      LOG.info("Read {} entries in {}", count, log);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    } catch (InvalidProtocolBufferException e) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      LOG.error("While reading entry #{} in {}", count, log, e);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      loader.markCorruptedWAL(log, e);<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>    if (localTracker != null) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      localTracker.setPartialFlag(false);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    if (!localProcedureMap.isEmpty()) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      log.setProcIds(localProcedureMap.getMinProcId(), localProcedureMap.getMaxProcId());<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      procedureMap.mergeTail(localProcedureMap);<a name="line.186"></a>
+<span class="sourceLineNo">161</span>          case PROCEDURE_WAL_EOF:<a name="line.161"></a>
+<span class="sourceLineNo">162</span>            hasMore = false;<a name="line.162"></a>
+<span class="sourceLineNo">163</span>            break;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>          default:<a name="line.164"></a>
+<span class="sourceLineNo">165</span>            throw new CorruptedWALProcedureStoreException("Invalid entry: " + entry);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      }<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      LOG.info("Read {} entries in {}", count, log);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    } catch (InvalidProtocolBufferException e) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      LOG.error("While reading entry #{} in {}", count, log, e);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      loader.markCorruptedWAL(log, e);<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>    if (!localProcedureMap.isEmpty()) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      log.setProcIds(localProcedureMap.getMinModifiedProcId(),<a name="line.175"></a>
+<span class="sourceLineNo">176</span>        localProcedureMap.getMaxModifiedProcId());<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      if (localTracker.isPartial()) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        localTracker.setMinMaxModifiedProcIds(localProcedureMap.getMinModifiedProcId(),<a name="line.178"></a>
+<span class="sourceLineNo">179</span>          localProcedureMap.getMaxModifiedProcId());<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      }<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      procedureMap.mergeTail(localProcedureMap);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    }<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    if (localTracker.isPartial()) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      localTracker.setPartialFlag(false);<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  }<a name="line.186"></a>
 <span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>      //if (hasFastStartSupport) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      // TODO: Some procedure may be already runnables (see readInitEntry())<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      //       (we can also check the "update map" in the log trackers)<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      // --------------------------------------------------<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      //EntryIterator iter = procedureMap.fetchReady();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      //if (iter != null) loader.load(iter);<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">188</span>  public void finish() throws IOException {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    // notify the loader about the max proc ID<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    loader.setMaxProcId(maxProcId);<a name="line.190"></a>
+<span class="sourceLineNo">191</span><a name="line.191"></a>
+<span class="sourceLineNo">192</span>    // fetch the procedure ready to run.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    ProcedureIterator procIter = procedureMap.fetchReady();<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    if (procIter != null) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      loader.load(procIter);<a name="line.195"></a>
 <span class="sourceLineNo">196</span>    }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  }<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>  public void finish() throws IOException {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    // notify the loader about the max proc ID<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    loader.setMaxProcId(maxProcId);<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>    // fetch the procedure ready to run.<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    ProcedureIterator procIter = procedureMap.fetchReady();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    if (procIter != null) loader.load(procIter);<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>    // remaining procedures have missing link or dependencies<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    // consider them as corrupted, manual fix is probably required.<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    procIter = procedureMap.fetchAll();<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    if (procIter != null) loader.handleCorrupted(procIter);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>  private void loadProcedure(final ProcedureWALEntry entry, final ProcedureProtos.Procedure proc) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    maxProcId = Math.max(maxProcId, proc.getProcId());<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    if (isRequired(proc.getProcId())) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      if (LOG.isTraceEnabled()) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        LOG.trace("Read " + entry.getType() + " entry " + proc.getProcId());<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      localProcedureMap.add(proc);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      if (tracker.isPartial()) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        tracker.insert(proc.getProcId());<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>    if (localTracker != null) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      localTracker.insert(proc.getProcId());<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  }<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>  private void readInitEntry(final ProcedureWALEntry entry)<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  throws IOException {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    assert entry.getProcedureCount() == 1 : "Expected only one procedure";<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    loadProcedure(entry, entry.getProcedure(0));<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  }<a name="line.233"></a>
-<span class="sourceLineNo">234</span><a name="line.234"></a>
-<span class="sourceLineNo">235</span>  private void readInsertEntry(final ProcedureWALEntry entry) throws IOException {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    assert entry.getProcedureCount() &gt;= 1 : "Expected one or more procedures";<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    loadProcedure(entry, entry.getProcedure(0));<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    for (int i = 1; i &lt; entry.getProcedureCount(); ++i) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      loadProcedure(entry, entry.getProcedure(i));<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><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  private void readUpdateEntry(final ProcedureWALEntry entry) throws IOException {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    assert entry.getProcedureCount() == 1 : "Expected only one procedure";<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    loadProcedure(entry, entry.getProcedure(0));<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>  private void readDeleteEntry(final ProcedureWALEntry entry) throws IOException {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    assert entry.hasProcId() : "expected ProcID";<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>    if (entry.getChildIdCount() &gt; 0) {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      assert entry.getProcedureCount() == 1 : "Expected only one procedure";<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>      // update the parent procedure<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      loadProcedure(entry, entry.getProcedure(0));<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>      // remove the child procedures of entry.getProcId()<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      for (int i = 0, count = entry.getChildIdCount(); i &lt; count; ++i) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        deleteEntry(entry.getChildId(i));<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      }<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    } else {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      assert entry.getProcedureCount() == 0 : "Expected no procedures";<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>      // delete the procedure<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      deleteEntry(entry.getProcId());<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  private void deleteEntry(final long procId) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    if (LOG.isTraceEnabled()) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      LOG.trace("delete entry " + procId);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    maxProcId = Math.max(maxProcId, procId);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    localProcedureMap.remove(procId);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    assert !procedureMap.contains(procId);<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    if (tracker.isPartial()) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      tracker.setDeleted(procId, true);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    }<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    if (localTracker != null) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      // In case there is only delete entry for this procedure in current log.<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      localTracker.setDeleted(procId, 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><a name="line.284"></a>
-<span class="sourceLineNo">285</span>  private boolean isDeleted(final long procId) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    return tracker.isDeleted(procId) == ProcedureStoreTracker.DeleteState.YES;<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>  private boolean isRequired(final long procId) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    return !isDeleted(procId) &amp;&amp; !procedureMap.contains(procId);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>  // ==========================================================================<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  //  We keep an in-memory map of the procedures sorted by replay order.<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  //  (see the details in the beginning of the file)<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  //                      _______________________________________________<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  //      procedureMap = | A |   | E |   | C |   |   |   |   | G |   |   |<a name="line.297"></a>
-<span class="sourceLineNo">298</span>  //                       D               B<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  //      replayOrderHead = C &lt;-&gt; B &lt;-&gt; E &lt;-&gt; D &lt;-&gt; A &lt;-&gt; G<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  //<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  //  We also have a lazy grouping by "root procedure", and a list of<a name="line.301"></a>
-<span class="sourceLineNo">302</span>  //  unlinked procedures. If after reading all the WALs we have unlinked<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  //  procedures it means that we had a missing WAL or a corruption.<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  //      rootHead = A &lt;-&gt; D &lt;-&gt; G<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  //                 B     E<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  //                 C<a name="line.306"></a>
-<span class="sourceLineNo">307</span>  //      unlinkFromLinkList = None<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  // ==========================================================================<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  private static class Entry {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    // For bucketed linked lists in hash-table.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    protected Entry hashNext;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    // child head<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    protected Entry childHead;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    // double-link for rootHead or childHead<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    protected Entry linkNext;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    protected Entry linkPrev;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    // replay double-linked-list<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    protected Entry replayNext;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    protected Entry replayPrev;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    // procedure-infos<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    protected Procedure procedure;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    protected ProcedureProtos.Procedure proto;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    protected boolean ready = false;<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    public Entry(Entry hashNext) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.hashNext = hashNext;<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>    public long getProcId() {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      return proto.getProcId();<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 long getParentId() {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      return proto.getParentId();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>    public boolean hasParent() {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      return proto.hasParentId();<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>    public boolean isReady() {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      return ready;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span>    public boolean isFinished() {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      if (!hasParent()) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        // we only consider 'root' procedures. because for the user 'finished'<a name="line.347"></a>
-<span class="sourceLineNo">348</span>        // means when everything up to the 'root' is finished.<a name="line.348"></a>
-<span class="sourceLineNo">349</span>        switch (proto.getState()) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>          case ROLLEDBACK:<a name="line.350"></a>
-<span class="sourceLineNo">351</span>          case SUCCESS:<a name="line.351"></a>
-<span class="sourceLineNo">352</span>            return true;<a name="line.352"></a>
-<span class="sourceLineNo">353</span>          default:<a name="line.353"></a>
-<span class="sourceLineNo">354</span>            break;<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>      return false;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public Procedure convert() throws IOException {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      if (procedure == null) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        procedure = ProcedureUtil.convertToProcedure(proto);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      }<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      return procedure;<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>    @Override<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    public String toString() {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      final StringBuilder sb = new StringBuilder();<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      sb.append("Entry(");<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      sb.append(getProcId());<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      sb.append(", parentId=");<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      sb.append(getParentId());<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      sb.append(", class=");<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      sb.append(proto.getClassName());<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      sb.append(")");<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      return sb.toString();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>  private static class EntryIterator implements ProcedureIterator {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    private final Entry replayHead;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    private Entry current;<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>    public EntryIterator(Entry replayHead) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      this.replayHead = replayHead;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      this.current = replayHead;<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>    @Override<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    public void reset() {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      this.current = replayHead;<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>    @Override<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    public boolean hasNext() {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      return current != null;<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>    @Override<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    public boolean isNextFinished() {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      return current != null &amp;&amp; current.isFinished();<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>    @Override<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    public void skipNext() {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      current = current.replayNext;<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>    @Override<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    public Procedure next() throws IOException {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      try {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        return current.convert();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      } finally {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        current = current.replayNext;<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      }<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  }<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span>  private static class WalProcedureMap {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    // procedure hash table<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    private Entry[] procedureMap;<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>    // replay-order double-linked-list<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    private Entry replayOrderHead;<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    private Entry replayOrderTail;<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>    // root linked-list<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    private Entry rootHead;<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>    // pending unlinked children (root not present yet)<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    private Entry childUnlinkedHead;<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    // Track ProcId range<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    private long minProcId = Long.MAX_VALUE;<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    private long maxProcId = Long.MIN_VALUE;<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    public WalProcedureMap(int size) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      procedureMap = new Entry[size];<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      replayOrderHead = null;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      replayOrderTail = null;<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      rootHead = null;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      childUnlinkedHead = null;<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 void add(ProcedureProtos.Procedure procProto) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      trackProcIds(procProto.getProcId());<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      Entry entry = addToMap(procProto.getProcId(), procProto.hasParentId());<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      boolean newEntry = entry.proto == null;<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      // We have seen procedure WALs where the entries are out of order; see HBASE-18152.<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      // To compensate, only replace the Entry procedure if for sure this new procedure<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      // is indeed an entry that came later. TODO: Fix the writing of procedure info so<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      // it does not violate basic expectation, that WALs contain procedure changes going<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      // from start to finish in sequence.<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      if (newEntry || isIncreasing(entry.proto, procProto)) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        entry.proto = procProto;<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      addToReplayList(entry);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      if(newEntry) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        if (procProto.hasParentId()) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          childUnlinkedHead = addToLinkList(entry, childUnlinkedHead);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        } else {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          rootHead = addToLinkList(entry, rootHead);<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><a name="line.467"></a>
-<span class="sourceLineNo">468</span>    /**<a name="line.468"></a>
-<span class="sourceLineNo">469</span>     * @return True if this new procedure is 'richer' than the current one else<a name="line.469"></a>
-<span class="sourceLineNo">470</span>     * false and we log this incidence where it appears that the WAL has older entries<a name="line.470"></a>
-<span class="sourceLineNo">471</span>     * appended after newer ones. See HBASE-18152.<a name="line.471"></a>
-<span class="sourceLineNo">472</span>     */<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    private static boolean isIncreasing(ProcedureProtos.Procedure current,<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        ProcedureProtos.Procedure candidate) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      // Check that the procedures we see are 'increasing'. We used to compare<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      // procedure id first and then update time but it can legitimately go backwards if the<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      // procedure is failed or rolled back so that was unreliable. Was going to compare<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      // state but lets see if comparing update time enough (unfortunately this issue only<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      // seen under load...)<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      boolean increasing = current.getLastUpdate() &lt;= candidate.getLastUpdate();<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      if (!increasing) {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        LOG.warn("NOT INCREASING! current=" + current + ", candidate=" + candidate);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      }<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      return increasing;<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>    public boolean remove(long procId) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      trackProcIds(procId);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      Entry entry = removeFromMap(procId);<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      if (entry != null) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        unlinkFromReplayList(entry);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        unlinkFromLinkList(entry);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        return true;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      }<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      return false;<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    }<a name="line.496"></a>
-<span class="sourceLineNo">497</span><a name="line.497"></a>
-<span class="sourceLineNo">498</span>    private void trackProcIds(long procId) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      minProcId = Math.min(minProcId, procId);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      maxProcId = Math.max(maxProcId, procId);<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    }<a name="line.501"></a>
-<span class="sourceLineNo">502</span><a name="line.502"></a>
-<span class="sourceLineNo">503</span>    public long getMinProcId() {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      return minProcId;<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>    public long getMaxProcId() {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      return maxProcId;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>    public boolean contains(long procId) {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      return getProcedure(procId) != null;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    }<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>    public boolean isEmpty() {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      return replayOrderHead == null;<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span>    public void clear() {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        procedureMap[i] = null;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      }<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      replayOrderHead = null;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      replayOrderTail = null;<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      rootHead = null;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      childUnlinkedHead = null;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      minProcId = Long.MAX_VALUE;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      maxProcId = Long.MIN_VALUE;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>    /*<a name="line.531"></a>
-<span class="sourceLineNo">532</span>     * Merges two WalProcedureMap,<a name="line.532"></a>
-<span class="sourceLineNo">533</span>     * the target is the "global" map, the source is the "local" map.<a name="line.533"></a>
-<span class="sourceLineNo">534</span>     *  - The entries in the hashtables are guaranteed to be unique.<a name="line.534"></a>
-<span class="sourceLineNo">535</span>     *    On replay we don't load procedures that already exist in the "global"<a name="line.535"></a>
-<span class="sourceLineNo">536</span>     *    map (the one we are merging the "local" in to).<a name="line.536"></a>
-<span class="sourceLineNo">537</span>     *  - The replayOrderList of the "local" nao will be appended to the "global"<a name="line.537"></a>
-<span class="sourceLineNo">538</span>     *    map replay list.<a name="line.538"></a>
-<span class="sourceLineNo">539</span>     *  - The "local" map will be cleared at the end of the operation.<a name="line.539"></a>
-<span class="sourceLineNo">540</span>     */<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    public void mergeTail(WalProcedureMap other) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      for (Entry p = other.replayOrderHead; p != null; p = p.replayNext) {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>        int slotIndex = getMapSlot(p.getProcId());<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        p.hashNext = procedureMap[slotIndex];<a name="line.544"></a>
-<span class="sourceLineNo">545</span>        procedureMap[slotIndex] = p;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>      if (replayOrderHead == null) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>        replayOrderHead = other.replayOrderHead;<a name="line.549"></a>
-<span class="sourceLineNo">550</span>        replayOrderTail = other.replayOrderTail;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>        rootHead = other.rootHead;<a name="line.551"></a>
-<span class="sourceLineNo">552</span>        childUnlinkedHead = other.childUnlinkedHead;<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      } else {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>        // append replay list<a name="line.554"></a>
-<span class="sourceLineNo">555</span>        assert replayOrderTail.replayNext == null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>        assert other.replayOrderHead.replayPrev == null;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>        replayOrderTail.replayNext = other.replayOrderHead;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>        other.replayOrderHead.replayPrev = replayOrderTail;<a name="line.558"></a>
-<span class="sourceLineNo">559</span>        replayOrderTail = other.replayOrderTail;<a name="line.559"></a>
-<span class="sourceLineNo">560</span><a name="line.560"></a>
-<span class="sourceLineNo">561</span>        // merge rootHead<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        if (rootHead == null) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>          rootHead = other.rootHead;<a name="line.563"></a>
-<span class="sourceLineNo">564</span>        } else if (other.rootHead != null) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>          Entry otherTail = findLinkListTail(other.rootHead);<a name="line.565"></a>
-<span class="sourceLineNo">566</span>          otherTail.linkNext = rootHead;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>          rootHead.linkPrev = otherTail;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>          rootHead = other.rootHead;<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>        // merge childUnlinkedHead<a name="line.571"></a>
-<span class="sourceLineNo">572</span>        if (childUnlinkedHead == null) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>          childUnlinkedHead = other.childUnlinkedHead;<a name="line.573"></a>
-<span class="sourceLineNo">574</span>        } else if (other.childUnlinkedHead != null) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>          Entry otherTail = findLinkListTail(other.childUnlinkedHead);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>          otherTail.linkNext = childUnlinkedHead;<a name="line.576"></a>
-<span class="sourceLineNo">577</span>          childUnlinkedHead.linkPrev = otherTail;<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          childUnlinkedHead = other.childUnlinkedHead;<a name="line.578"></a>
-<span class="sourceLineNo">579</span>        }<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      }<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      maxProcId = Math.max(maxProcId, other.maxProcId);<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      minProcId = Math.max(minProcId, other.minProcId);<a name="line.582"></a>
-<span class="sourceLineNo">583</span><a name="line.583"></a>
-<span class="sourceLineNo">584</span>      other.clear();<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    }<a name="line.585"></a>
-<span class="sourceLineNo">586</span><a name="line.586"></a>
-<span class="sourceLineNo">587</span>    /*<a name="line.587"></a>
-<span class="sourceLineNo">588</span>     * Returns an EntryIterator with the list of procedures ready<a name="line.588"></a>
-<span class="sourceLineNo">589</span>     * to be added to the executor.<a name="line.589"></a>
-<span class="sourceLineNo">590</span>     * A Procedure is ready if its children and parent are ready.<a name="line.590"></a>
-<span class="sourceLineNo">591</span>     */<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    public EntryIterator fetchReady() {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      buildGraph();<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>      Entry readyHead = null;<a name="line.595"></a>
-<span class="sourceLineNo">596</span>      Entry readyTail = null;<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      Entry p = replayOrderHead;<a name="line.597"></a>
-<span class="sourceLineNo">598</span>      while (p != null) {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>        Entry next = p.replayNext;<a name="line.599"></a>
-<span class="sourceLineNo">600</span>        if (p.isReady()) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>          unlinkFromReplayList(p);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>          if (readyTail != null) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>            readyTail.replayNext = p;<a name="line.603"></a>
-<span class="sourceLineNo">604</span>            p.replayPrev = readyTail;<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          } else {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>            p.replayPrev = null;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>            readyHead = p;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>          }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>          readyTail = p;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          p.replayNext = null;<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        }<a name="line.611"></a>
-<span class="sourceLineNo">612</span>        p = next;<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      }<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      // we need the hash-table lookups for parents, so this must be done<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      // out of the loop where we check isReadyToRun()<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      for (p = readyHead; p != null; p = p.replayNext) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        removeFromMap(p.getProcId());<a name="line.617"></a>
-<span class="sourceLineNo">618</span>        unlinkFromLinkList(p);<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      }<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return readyHead != null ? new EntryIterator(readyHead) : null;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    }<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>     * Drain this map and return all procedures in it.<a name="line.624"></a>
-<span class="sourceLineNo">625</span>     */<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    public EntryIterator fetchAll() {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      Entry head = replayOrderHead;<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      for (Entry p = head; p != null; p = p.replayNext) {<a name="line.628"></a>
-<span class="sourceLineNo">629</span>        removeFromMap(p.getProcId());<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      }<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>        assert procedureMap[i] == null : "map not empty i=" + i;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      replayOrderHead = null;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      replayOrderTail = null;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      childUnlinkedHead = null;<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      rootHead = null;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      return head != null ? new EntryIterator(head) : null;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    }<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span>    private void buildGraph() {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      Entry p = childUnlinkedHead;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      while (p != null) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>        Entry next = p.linkNext;<a name="line.644"></a>
-<span class="sourceLineNo">645</span>        Entry rootProc = getRootProcedure(p);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        if (rootProc != null) {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>          rootProc.childHead = addToLinkList(p, rootProc.childHead);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        }<a name="line.648"></a>
-<span class="sourceLineNo">649</span>        p = next;<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span>      for (p = rootHead; p != null; p = p.linkNext) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        checkReadyToRun(p);<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      }<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
-<span class="sourceLineNo">656</span><a name="line.656"></a>
-<span class="sourceLineNo">657</span>    private Entry getRootProcedure(Entry entry) {<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      while (entry != null &amp;&amp; entry.hasParent()) {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        entry = getProcedure(entry.getParentId());<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      }<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      return entry;<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    }<a name="line.662"></a>
-<span class="sourceLineNo">663</span><a name="line.663"></a>
-<span class="sourceLineNo">664</span>    /*<a name="line.664"></a>
-<span class="sourceLineNo">665</span>     * (see the comprehensive explanation in the beginning of the file)<a name="line.665"></a>
-<span class="sourceLineNo">666</span>     * A Procedure is ready when parent and children are ready.<a name="line.666"></a>
-<span class="sourceLineNo">667</span>     * "ready" means that we all the information that we need in-memory.<a name="line.667"></a>
-<span class="sourceLineNo">668</span>     *<a name="line.668"></a>
-<span class="sourceLineNo">669</span>     * Example-1:<a name="line.669"></a>
-<span class="sourceLineNo">670</span>     * We have two WALs, we start reading from the newest (wal-2)<a name="line.670"></a>
-<span class="sourceLineNo">671</span>     *    wal-2 | C B |<a name="line.671"></a>
-<span class="sourceLineNo">672</span>     *    wal-1 | A B C |<a name="line.672"></a>
-<span class="sourceLineNo">673</span>     *<a name="line.673"></a>
-<span class="sourceLineNo">674</span>     * If C and B don't depend on A (A is not the parent), we can start them<a name="line.674"></a>
-<span class="sourceLineNo">675</span>     * before reading wal-1. If B is the only one with parent A we can start C.<a name="line.675"></a>
-<span class="sourceLineNo">676</span>     * We have to read one more WAL before being able to start B.<a name="line.676"></a>
-<span class="sourceLineNo">677</span>     *<a name="line.677"></a>
-<span class="sourceLineNo">678</span>     * How do we know with the only information in B that we are not ready.<a name="line.678"></a>
-<span class="sourceLineNo">679</span>     *  - easy case, the parent is missing from the global map<a name="line.679"></a>
-<span class="sourceLineNo">680</span>     *  - more complex case we look at the Stack IDs.<a name="line.680"></a>
-<span class="sourceLineNo">681</span>     *<a name="line.681"></a>
-<span class="sourceLineNo">682</span>     * The Stack-IDs are added to the procedure order as an incremental index<a name="line.682"></a>
-<span class="sourceLineNo">683</span>     * tracking how many times that procedure was executed, which is equivalent<a name="line.683"></a>
-<span class="sourceLineNo">684</span>     * to the number of times we wrote the procedure to the WAL.<a name="line.684"></a>
-<span class="sourceLineNo">685</span>     * In the example above:<a name="line.685"></a>
-<span class="sourceLineNo">686</span>     *   wal-2: B has stackId = [1, 2]<a name="line.686"></a>
-<span class="sourceLineNo">687</span>     *   wal-1: B has stackId = [1]<a name="line.687"></a>
-<span class="sourceLineNo">688</span>     *   wal-1: A has stackId = [0]<a name="line.688"></a>
-<span class="sourceLineNo">689</span>     *<a name="line.689"></a>
-<span class="sourceLineNo">690</span>     * Since we know that the Stack-IDs are incremental for a Procedure,<a name="line.690"></a>
-<span class="sourceLineNo">691</span>     * we notice that there is a gap in the stackIds of B, so something was<a name="line.691"></a>
-<span class="sourceLineNo">692</span>     * executed before.<a name="line.692"></a>
-<span class="sourceLineNo">693</span>     * To identify when a Procedure is ready we do the sum of the stackIds of<a name="line.693"></a>
-<span class="sourceLineNo">694</span>     * the procedure and the parent. if the stackIdSum is equal to the<a name="line.694"></a>
-<span class="sourceLineNo">695</span>     * sum of {1..maxStackId} then everything we need is available.<a name="line.695"></a>
-<span class="sourceLineNo">696</span>     *<a name="line.696"></a>
-<span class="sourceLineNo">697</span>     * Example-2<a name="line.697"></a>
-<span class="sourceLineNo">698</span>     *    wal-2 | A |              A stackIds = [0, 2]<a name="line.698"></a>
-<span class="sourceLineNo">699</span>     *    wal-1 | A B |            B stackIds = [1]<a name="line.699"></a>
-<span class="sourceLineNo">700</span>     *<a name="line.700"></a>
-<span class="sourceLineNo">701</span>     * There is a gap between A stackIds so something was executed in between.<a name="line.701"></a>
-<span class="sourceLineNo">702</span>     */<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    private boolean checkReadyToRun(Entry rootEntry) {<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      assert !rootEntry.hasParent() : "expected root procedure, got " + rootEntry;<a name="line.704"></a>
-<span class="sourceLineNo">705</span><a name="line.705"></a>
-<span class="sourceLineNo">706</span>      if (rootEntry.isFinished()) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>        // If the root procedure is finished, sub-procedures should be gone<a name="line.707"></a>
-<span class="sourceLineNo">708</span>        if (rootEntry.childHead != null) {<a name="line.708"></a>
-<span class="sourceLineNo">709</span>          LOG.error("unexpected active children for root-procedure: " + rootEntry);<a name="line.709"></a>
-<span class="sourceLineNo">710</span>          for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>            LOG.error("unexpected active children: " + p);<a name="line.711"></a>
-<span class="sourceLineNo">712</span>          }<a name="line.712"></a>
-<span class="sourceLineNo">713</span>        }<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span>        assert rootEntry.childHead == null : "unexpected children on root completion. " + rootEntry;<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        rootEntry.ready = true;<a name="line.716"></a>
-<span class="sourceLineNo">717</span>        return true;<a name="line.717"></a>
-<span class="sourceLineNo">718</span>      }<a name="line.718"></a>
-<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>      int stackIdSum = 0;<a name="line.720"></a>
-<span class="sourceLineNo">721</span>      int maxStackId = 0;<a name="line.721"></a>
-<span class="sourceLineNo">722</span>      for (int i = 0; i &lt; rootEntry.proto.getStackIdCount(); ++i) {<a name="line.722"></a>
-<span class="sourceLineNo">723</span>        int stackId = 1 + rootEntry.proto.getStackId(i);<a name="line.723"></a>
-<span class="sourceLineNo">724</span>        maxStackId  = Math.max(maxStackId, stackId);<a name="line.724"></a>
-<span class="sourceLineNo">725</span>        stackIdSum += stackId;<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        if (LOG.isTraceEnabled()) {<a name="line.726"></a>
-<span class="sourceLineNo">727</span>          LOG.trace("stackId=" + stackId + " stackIdSum=" + stackIdSum +<a name="line.727"></a>
-<span class="sourceLineNo">728</span>          " maxStackid=" + maxStackId + " " + rootEntry);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>        }<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
-<span class="sourceLineNo">731</span><a name="line.731"></a>
-<span class="sourceLineNo">732</span>      for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        for (int i = 0; i &lt; p.proto.getStackIdCount(); ++i) {<a name="line.733"></a>
-<span class="sourceLineNo">734</span>          int stackId = 1 + p.proto.getStackId(i);<a name="line.734"></a>
-<span class="sourceLineNo">735</span>          maxStackId  = Math.max(maxStackId, stackId);<a name="line.735"></a>
-<span class="sourceLineNo">736</span>          stackIdSum += stackId;<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          if (LOG.isTraceEnabled()) {<a name="line.737"></a>
-<span class="sourceLineNo">738</span>            LOG.trace("stackId=" + stackId + " stackIdSum=" + stackIdSum +<a name="line.738"></a>
-<span class="sourceLineNo">739</span>              " maxStackid=" + maxStackId + " " + p);<a name="line.739"></a>
-<span class="sourceLineNo">740</span>          }<a name="line.740"></a>
-<span class="sourceLineNo">741</span>        }<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      }<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      // The 

<TRUNCATED>

[36/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html
index 6e925ff..43a1e44 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.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};
+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};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.Loader.html" title="interface in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html" target="_top">Frames</a></li>
@@ -74,7 +74,7 @@ var activeTableTab = "activeTableTab";
 <div>
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
-<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
 <li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>
@@ -110,8 +110,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
- @InterfaceStability.Evolving
-public class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.42">ProcedureWALFormatReader</a>
+public class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.37">ProcedureWALFormatReader</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">Helper class that loads the procedures stored in a WAL</div>
 </li>
@@ -120,33 +119,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="summary">
 <ul class="blockList">
 <li class="blockList">
-<!-- ======== NESTED CLASS SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="nested.class.summary">
-<!--   -->
-</a>
-<h3>Nested Class Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
-<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Class and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static class&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static class&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static class&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></span></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
 <!-- =========== FIELD SUMMARY =========== -->
 <ul class="blockList">
 <li class="blockList"><a name="field.summary">
@@ -164,15 +136,14 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#loader">loader</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></code></td>
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#localProcedureMap">localProcedureMap</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#localTracker">localTracker</a></span></code>
-<div class="block">If tracker for a log file is partial (see <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#partial"><code>ProcedureStoreTracker.partial</code></a>), we
- re-build the list of procedures updated in that WAL because we need it for log cleaning
- purposes.</div>
+<div class="block">If tracker for a log file is partial (see <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#partial"><code>ProcedureStoreTracker.partial</code></a>), we re-build
+ the list of procedures modified in that WAL because we need it for log cleaning purposes.</div>
 </td>
 </tr>
 <tr class="rowColor">
@@ -184,7 +155,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#maxProcId">maxProcId</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></code></td>
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#procedureMap">procedureMap</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
@@ -235,38 +206,48 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#finish--">finish</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i2" class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#insertIfPartial-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure-">insertIfPartial</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker,
+               org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure&nbsp;proc)</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#isDeleted-long-">isDeleted</a></span>(long&nbsp;procId)</code>&nbsp;</td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#isRequired-long-">isRequired</a></span>(long&nbsp;procId)</code>&nbsp;</td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#loadProcedure-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure-">loadProcedure</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry&nbsp;entry,
              org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure&nbsp;proc)</code>&nbsp;</td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#read-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFile-">read</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&nbsp;log)</code>&nbsp;</td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#readDeleteEntry-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry-">readDeleteEntry</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry&nbsp;entry)</code>&nbsp;</td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#readInitEntry-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry-">readInitEntry</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry&nbsp;entry)</code>&nbsp;</td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#readInsertEntry-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry-">readInsertEntry</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry&nbsp;entry)</code>&nbsp;</td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#readUpdateEntry-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry-">readUpdateEntry</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry&nbsp;entry)</code>&nbsp;</td>
 </tr>
+<tr id="i11" class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#setDeletedIfPartial-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker-long-">setDeletedIfPartial</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker,
+                   long&nbsp;procId)</code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -295,7 +276,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.43">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.38">LOG</a></pre>
 </li>
 </ul>
 <a name="localProcedureMap">
@@ -304,7 +285,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>localProcedureMap</h4>
-<pre>private final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.101">localProcedureMap</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.96">localProcedureMap</a></pre>
 </li>
 </ul>
 <a name="procedureMap">
@@ -313,7 +294,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>procedureMap</h4>
-<pre>private final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.102">procedureMap</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.97">procedureMap</a></pre>
 </li>
 </ul>
 <a name="loader">
@@ -322,7 +303,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>loader</h4>
-<pre>private final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.Loader.html" title="interface in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormat.Loader</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.104">loader</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.Loader.html" title="interface in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormat.Loader</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.99">loader</a></pre>
 </li>
 </ul>
 <a name="tracker">
@@ -331,7 +312,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>tracker</h4>
-<pre>private final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.113">tracker</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.108">tracker</a></pre>
 <div class="block">Global tracker that will be used by the WALProcedureStore after load.
  If the last WAL was closed cleanly we already have a full tracker ready to be used.
  If the last WAL was truncated (e.g. master killed) the tracker will be empty
@@ -345,13 +326,15 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>localTracker</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.124">localTracker</a></pre>
-<div class="block">If tracker for a log file is partial (see <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#partial"><code>ProcedureStoreTracker.partial</code></a>), we
- re-build the list of procedures updated in that WAL because we need it for log cleaning
- purposes. If all procedures updated in a WAL are found to be obsolete, it can be safely deleted.
- (see <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#removeInactiveLogs--"><code>WALProcedureStore.removeInactiveLogs()</code></a>).
- However, we don't need deleted part of a WAL's tracker for this purpose, so we don't bother
- re-building it.</div>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.120">localTracker</a></pre>
+<div class="block">If tracker for a log file is partial (see <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#partial"><code>ProcedureStoreTracker.partial</code></a>), we re-build
+ the list of procedures modified in that WAL because we need it for log cleaning purposes. If
+ all procedures modified in a WAL are found to be obsolete, it can be safely deleted. (see
+ <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#removeInactiveLogs--"><code>WALProcedureStore.removeInactiveLogs()</code></a>).
+ <p/>
+ Notice that, the deleted part for this tracker will not be global valid as we can only count
+ the deletes in the current file, but it is not big problem as finally, the above tracker will
+ have the global state of deleted, and it will also be used to build the cleanup tracker.</div>
 </li>
 </ul>
 <a name="maxProcId">
@@ -360,7 +343,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>maxProcId</h4>
-<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.127">maxProcId</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.122">maxProcId</a></pre>
 </li>
 </ul>
 </li>
@@ -377,7 +360,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ProcedureWALFormatReader</h4>
-<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.129">ProcedureWALFormatReader</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker,
+<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.124">ProcedureWALFormatReader</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker,
                                 <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.Loader.html" title="interface in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormat.Loader</a>&nbsp;loader)</pre>
 </li>
 </ul>
@@ -395,7 +378,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>read</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.137">read</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&nbsp;log)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.130">read</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&nbsp;log)
           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>
@@ -409,7 +392,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>finish</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.199">finish</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.188">finish</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>
@@ -417,13 +400,33 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="setDeletedIfPartial-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setDeletedIfPartial</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.206">setDeletedIfPartial</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker,
+                                 long&nbsp;procId)</pre>
+</li>
+</ul>
+<a name="insertIfPartial-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>insertIfPartial</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.212">insertIfPartial</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker,
+                             org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure&nbsp;proc)</pre>
+</li>
+</ul>
 <a name="loadProcedure-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>loadProcedure</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.213">loadProcedure</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry&nbsp;entry,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.218">loadProcedure</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry&nbsp;entry,
                            org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure&nbsp;proc)</pre>
 </li>
 </ul>
@@ -433,12 +436,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>readInitEntry</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.229">readInitEntry</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry&nbsp;entry)
-                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
-</dl>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.228">readInitEntry</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry&nbsp;entry)</pre>
 </li>
 </ul>
 <a name="readInsertEntry-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry-">
@@ -447,12 +445,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>readInsertEntry</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.235">readInsertEntry</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry&nbsp;entry)
-                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
-</dl>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.233">readInsertEntry</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry&nbsp;entry)</pre>
 </li>
 </ul>
 <a name="readUpdateEntry-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry-">
@@ -461,12 +454,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>readUpdateEntry</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.243">readUpdateEntry</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry&nbsp;entry)
-                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
-</dl>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.241">readUpdateEntry</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry&nbsp;entry)</pre>
 </li>
 </ul>
 <a name="readDeleteEntry-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry-">
@@ -475,12 +463,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>readDeleteEntry</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.248">readDeleteEntry</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry&nbsp;entry)
-                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
-</dl>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.246">readDeleteEntry</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry&nbsp;entry)</pre>
 </li>
 </ul>
 <a name="deleteEntry-long-">
@@ -489,7 +472,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteEntry</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.269">deleteEntry</a>(long&nbsp;procId)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.267">deleteEntry</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="isDeleted-long-">
@@ -498,7 +481,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isDeleted</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.285">isDeleted</a>(long&nbsp;procId)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.276">isDeleted</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="isRequired-long-">
@@ -507,7 +490,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isRequired</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.289">isRequired</a>(long&nbsp;procId)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.280">isRequired</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 </li>
@@ -539,7 +522,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.Loader.html" title="interface in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html" target="_top">Frames</a></li>
@@ -563,7 +546,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div>
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
-<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
 <li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.html
index 93e369c..e89211d 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.html
@@ -49,8 +49,8 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.html" target="_top">Frames</a></li>
@@ -426,8 +426,8 @@ implements org.apache.hadoop.util.Tool</pre>
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html
new file mode 100644
index 0000000..50aeacf
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html
@@ -0,0 +1,503 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>WALProcedureMap.Entry (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="WALProcedureMap.Entry (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/WALProcedureMap.Entry.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" target="_top">Frames</a></li>
+<li><a href="WALProcedureMap.Entry.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.procedure2.store.wal</div>
+<h2 title="Class WALProcedureMap.Entry" class="title">Class WALProcedureMap.Entry</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></dd>
+</dl>
+<hr>
+<br>
+<pre>private static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.51">WALProcedureMap.Entry</a>
+extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#childHead">childHead</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#hashNext">hashNext</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#linkNext">linkNext</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#linkPrev">linkPrev</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#procedure">procedure</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#proto">proto</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#ready">ready</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#replayNext">replayNext</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#replayPrev">replayPrev</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#Entry-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">Entry</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;hashNext)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#convert--">convert</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#getParentId--">getParentId</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#getProcId--">getProcId</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#hasParent--">hasParent</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#isFinished--">isFinished</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#isReady--">isReady</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i6" 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/procedure2/store/wal/WALProcedureMap.Entry.html#toString--">toString</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="hashNext">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>hashNext</h4>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#line.53">hashNext</a></pre>
+</li>
+</ul>
+<a name="childHead">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>childHead</h4>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#line.55">childHead</a></pre>
+</li>
+</ul>
+<a name="linkNext">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>linkNext</h4>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#line.57">linkNext</a></pre>
+</li>
+</ul>
+<a name="linkPrev">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>linkPrev</h4>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#line.58">linkPrev</a></pre>
+</li>
+</ul>
+<a name="replayNext">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>replayNext</h4>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#line.60">replayNext</a></pre>
+</li>
+</ul>
+<a name="replayPrev">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>replayPrev</h4>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#line.61">replayPrev</a></pre>
+</li>
+</ul>
+<a name="procedure">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>procedure</h4>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt; <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#line.63">procedure</a></pre>
+</li>
+</ul>
+<a name="proto">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>proto</h4>
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#line.64">proto</a></pre>
+</li>
+</ul>
+<a name="ready">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>ready</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#line.65">ready</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="Entry-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>Entry</h4>
+<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#line.67">Entry</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;hashNext)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="getProcId--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getProcId</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#line.71">getProcId</a>()</pre>
+</li>
+</ul>
+<a name="getParentId--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getParentId</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#line.75">getParentId</a>()</pre>
+</li>
+</ul>
+<a name="hasParent--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>hasParent</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#line.79">hasParent</a>()</pre>
+</li>
+</ul>
+<a name="isReady--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isReady</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#line.83">isReady</a>()</pre>
+</li>
+</ul>
+<a name="isFinished--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isFinished</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#line.87">isFinished</a>()</pre>
+</li>
+</ul>
+<a name="convert--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>convert</h4>
+<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#line.102">convert</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>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="toString--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<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/store/wal/WALProcedureMap.Entry.html#line.110">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/Object.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/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/WALProcedureMap.Entry.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" target="_top">Frames</a></li>
+<li><a href="WALProcedureMap.Entry.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>


[12/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
index d27bef3..e1b183b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
@@ -23,603 +23,603 @@
 <span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
 <span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
-<span class="sourceLineNo">018</span><a name="line.18"></a>
-<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.procedure2.store.wal;<a name="line.19"></a>
-<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.io.FileNotFoundException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.ArrayList;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.Arrays;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.Collections;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Comparator;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.HashSet;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Iterator;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.LinkedList;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.Set;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.LinkedTransferQueue;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.TimeUnit;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.locks.Condition;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.fs.FileAlreadyExistsException;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.fs.FileStatus;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.fs.FileSystem;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.fs.Path;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.fs.PathFilter;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.HConstants;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreBase;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.procedure2.util.ByteSlot;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.procedure2.util.StringUtils;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.slf4j.Logger;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.slf4j.LoggerFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hbase.thirdparty.org.apache.commons.collections4.queue.CircularFifoQueue;<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>/**<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * WAL implementation of the ProcedureStore.<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * @see ProcedureWALPrettyPrinter for printing content of a single WAL.<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * @see #main(String[]) to parse a directory of MasterWALProcs.<a name="line.70"></a>
-<span class="sourceLineNo">071</span> */<a name="line.71"></a>
-<span class="sourceLineNo">072</span>@InterfaceAudience.Private<a name="line.72"></a>
-<span class="sourceLineNo">073</span>@InterfaceStability.Evolving<a name="line.73"></a>
-<span class="sourceLineNo">074</span>public class WALProcedureStore extends ProcedureStoreBase {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private static final Logger LOG = LoggerFactory.getLogger(WALProcedureStore.class);<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  public static final String LOG_PREFIX = "pv2-";<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  /** Used to construct the name of the log directory for master procedures */<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  public static final String MASTER_PROCEDURE_LOGDIR = "MasterProcWALs";<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  public interface LeaseRecovery {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    void recoverFileLease(FileSystem fs, Path path) throws IOException;<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>  public static final String WAL_COUNT_WARN_THRESHOLD_CONF_KEY =<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    "hbase.procedure.store.wal.warn.threshold";<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private static final int DEFAULT_WAL_COUNT_WARN_THRESHOLD = 64;<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  public static final String EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY =<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    "hbase.procedure.store.wal.exec.cleanup.on.load";<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private static final boolean DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY = true;<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  public static final String MAX_RETRIES_BEFORE_ROLL_CONF_KEY =<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    "hbase.procedure.store.wal.max.retries.before.roll";<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private static final int DEFAULT_MAX_RETRIES_BEFORE_ROLL = 3;<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  public static final String WAIT_BEFORE_ROLL_CONF_KEY =<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    "hbase.procedure.store.wal.wait.before.roll";<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private static final int DEFAULT_WAIT_BEFORE_ROLL = 500;<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  public static final String ROLL_RETRIES_CONF_KEY =<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    "hbase.procedure.store.wal.max.roll.retries";<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  private static final int DEFAULT_ROLL_RETRIES = 3;<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  public static final String MAX_SYNC_FAILURE_ROLL_CONF_KEY =<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    "hbase.procedure.store.wal.sync.failure.roll.max";<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  private static final int DEFAULT_MAX_SYNC_FAILURE_ROLL = 3;<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  public static final String PERIODIC_ROLL_CONF_KEY =<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    "hbase.procedure.store.wal.periodic.roll.msec";<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  private static final int DEFAULT_PERIODIC_ROLL = 60 * 60 * 1000; // 1h<a name="line.111"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.procedure2.store.wal;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.FileNotFoundException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.ArrayList;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.Arrays;<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.HashSet;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.Iterator;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.LinkedList;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.Set;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.concurrent.LinkedTransferQueue;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.concurrent.TimeUnit;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.locks.Condition;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.conf.Configuration;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.fs.FileAlreadyExistsException;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.fs.FileStatus;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.fs.FileSystem;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.fs.Path;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.fs.PathFilter;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HConstants;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreBase;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.procedure2.util.ByteSlot;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.procedure2.util.StringUtils;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.slf4j.Logger;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.slf4j.LoggerFactory;<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hbase.thirdparty.org.apache.commons.collections4.queue.CircularFifoQueue;<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader;<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>/**<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * WAL implementation of the ProcedureStore.<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * &lt;p/&gt;<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * When starting, the upper layer will first call {@link #start(int)}, then {@link #recoverLease()},<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * then {@link #load(ProcedureLoader)}.<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * &lt;p/&gt;<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * In {@link #recoverLease()}, we will get the lease by closing all the existing wal files(by<a name="line.70"></a>
+<span class="sourceLineNo">071</span> * calling recoverFileLease), and creating a new wal writer. And we will also get the list of all<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * the old wal files.<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * &lt;p/&gt;<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * FIXME: notice that the current recover lease implementation is problematic, it can not deal with<a name="line.74"></a>
+<span class="sourceLineNo">075</span> * the races if there are two master both wants to acquire the lease...<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * &lt;p/&gt;<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * In {@link #load(ProcedureLoader)} method, we will load all the active procedures. See the<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * comments of this method for more details.<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * &lt;p/&gt;<a name="line.79"></a>
+<span class="sourceLineNo">080</span> * The actual logging way is a bit like our FileSystem based WAL implementation as RS side. There is<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * a {@link #slots}, which is more like the ring buffer, and in the insert, update and delete<a name="line.81"></a>
+<span class="sourceLineNo">082</span> * methods we will put thing into the {@link #slots} and wait. And there is a background sync<a name="line.82"></a>
+<span class="sourceLineNo">083</span> * thread(see the {@link #syncLoop()} method) which get data from the {@link #slots} and write them<a name="line.83"></a>
+<span class="sourceLineNo">084</span> * to the FileSystem, and notify the caller that we have finished.<a name="line.84"></a>
+<span class="sourceLineNo">085</span> * &lt;p/&gt;<a name="line.85"></a>
+<span class="sourceLineNo">086</span> * TODO: try using disruptor to increase performance and simplify the logic?<a name="line.86"></a>
+<span class="sourceLineNo">087</span> * &lt;p/&gt;<a name="line.87"></a>
+<span class="sourceLineNo">088</span> * The {@link #storeTracker} keeps track of the modified procedures in the newest wal file, which is<a name="line.88"></a>
+<span class="sourceLineNo">089</span> * also the one being written currently. And the deleted bits in it are for all the procedures, not<a name="line.89"></a>
+<span class="sourceLineNo">090</span> * only the ones in the newest wal file. And when rolling a log, we will first store it in the<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * trailer of the current wal file, and then reset its modified bits, so that it can start to track<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * the modified procedures for the new wal file.<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * &lt;p/&gt;<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * The {@link #holdingCleanupTracker} is used to test whether we are safe to delete the oldest wal<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * file. When there are log rolling and there are more than 1 wal files, we will make use of it. It<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * will first be initialized to the oldest file's tracker(which is stored in the trailer), using the<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * method {@link ProcedureStoreTracker#resetTo(ProcedureStoreTracker, boolean)}, and then merge it<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * with the tracker of every newer wal files, using the<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * {@link ProcedureStoreTracker#setDeletedIfModifiedInBoth(ProcedureStoreTracker)}. If we find out<a name="line.99"></a>
+<span class="sourceLineNo">100</span> * that all the modified procedures for the oldest wal file are modified or deleted in newer wal<a name="line.100"></a>
+<span class="sourceLineNo">101</span> * files, then we can delete it.<a name="line.101"></a>
+<span class="sourceLineNo">102</span> * @see ProcedureWALPrettyPrinter for printing content of a single WAL.<a name="line.102"></a>
+<span class="sourceLineNo">103</span> * @see #main(String[]) to parse a directory of MasterWALProcs.<a name="line.103"></a>
+<span class="sourceLineNo">104</span> */<a name="line.104"></a>
+<span class="sourceLineNo">105</span>@InterfaceAudience.Private<a name="line.105"></a>
+<span class="sourceLineNo">106</span>public class WALProcedureStore extends ProcedureStoreBase {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  private static final Logger LOG = LoggerFactory.getLogger(WALProcedureStore.class);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  public static final String LOG_PREFIX = "pv2-";<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  /** Used to construct the name of the log directory for master procedures */<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  public static final String MASTER_PROCEDURE_LOGDIR = "MasterProcWALs";<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
 <span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public static final String SYNC_WAIT_MSEC_CONF_KEY = "hbase.procedure.store.wal.sync.wait.msec";<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  private static final int DEFAULT_SYNC_WAIT_MSEC = 100;<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span>  public static final String USE_HSYNC_CONF_KEY = "hbase.procedure.store.wal.use.hsync";<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  private static final boolean DEFAULT_USE_HSYNC = true;<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  public static final String ROLL_THRESHOLD_CONF_KEY = "hbase.procedure.store.wal.roll.threshold";<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  private static final long DEFAULT_ROLL_THRESHOLD = 32 * 1024 * 1024; // 32M<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public static final String STORE_WAL_SYNC_STATS_COUNT =<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      "hbase.procedure.store.wal.sync.stats.count";<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  private static final int DEFAULT_SYNC_STATS_COUNT = 10;<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>  private final LinkedList&lt;ProcedureWALFile&gt; logs = new LinkedList&lt;&gt;();<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  private final ProcedureStoreTracker holdingCleanupTracker = new ProcedureStoreTracker();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  private final ProcedureStoreTracker storeTracker = new ProcedureStoreTracker();<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  private final ReentrantLock lock = new ReentrantLock();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  private final Condition waitCond = lock.newCondition();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  private final Condition slotCond = lock.newCondition();<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  private final Condition syncCond = lock.newCondition();<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>  private final LeaseRecovery leaseRecovery;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  private final Configuration conf;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  private final FileSystem fs;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  private final Path walDir;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  private final Path walArchiveDir;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  private final boolean enforceStreamCapability;<a name="line.139"></a>
+<span class="sourceLineNo">113</span>  public interface LeaseRecovery {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    void recoverFileLease(FileSystem fs, Path path) throws IOException;<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>  public static final String WAL_COUNT_WARN_THRESHOLD_CONF_KEY =<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    "hbase.procedure.store.wal.warn.threshold";<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  private static final int DEFAULT_WAL_COUNT_WARN_THRESHOLD = 64;<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public static final String EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY =<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    "hbase.procedure.store.wal.exec.cleanup.on.load";<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private static final boolean DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY = true;<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span>  public static final String MAX_RETRIES_BEFORE_ROLL_CONF_KEY =<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    "hbase.procedure.store.wal.max.retries.before.roll";<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  private static final int DEFAULT_MAX_RETRIES_BEFORE_ROLL = 3;<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>  public static final String WAIT_BEFORE_ROLL_CONF_KEY =<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    "hbase.procedure.store.wal.wait.before.roll";<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  private static final int DEFAULT_WAIT_BEFORE_ROLL = 500;<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>  public static final String ROLL_RETRIES_CONF_KEY =<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    "hbase.procedure.store.wal.max.roll.retries";<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  private static final int DEFAULT_ROLL_RETRIES = 3;<a name="line.135"></a>
+<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">137</span>  public static final String MAX_SYNC_FAILURE_ROLL_CONF_KEY =<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    "hbase.procedure.store.wal.sync.failure.roll.max";<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  private static final int DEFAULT_MAX_SYNC_FAILURE_ROLL = 3;<a name="line.139"></a>
 <span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  private final AtomicReference&lt;Throwable&gt; syncException = new AtomicReference&lt;&gt;();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private final AtomicBoolean loading = new AtomicBoolean(true);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  private final AtomicBoolean inSync = new AtomicBoolean(false);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private final AtomicLong totalSynced = new AtomicLong(0);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  private final AtomicLong lastRollTs = new AtomicLong(0);<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  private final AtomicLong syncId = new AtomicLong(0);<a name="line.146"></a>
+<span class="sourceLineNo">141</span>  public static final String PERIODIC_ROLL_CONF_KEY =<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    "hbase.procedure.store.wal.periodic.roll.msec";<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  private static final int DEFAULT_PERIODIC_ROLL = 60 * 60 * 1000; // 1h<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>  public static final String SYNC_WAIT_MSEC_CONF_KEY = "hbase.procedure.store.wal.sync.wait.msec";<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  private static final int DEFAULT_SYNC_WAIT_MSEC = 100;<a name="line.146"></a>
 <span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private LinkedTransferQueue&lt;ByteSlot&gt; slotsCache = null;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  private Set&lt;ProcedureWALFile&gt; corruptedLogs = null;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  private FSDataOutputStream stream = null;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  private int runningProcCount = 1;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  private long flushLogId = 0;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  private int syncMaxSlot = 1;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  private int slotIndex = 0;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  private Thread syncThread;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  private ByteSlot[] slots;<a name="line.156"></a>
+<span class="sourceLineNo">148</span>  public static final String USE_HSYNC_CONF_KEY = "hbase.procedure.store.wal.use.hsync";<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private static final boolean DEFAULT_USE_HSYNC = true;<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public static final String ROLL_THRESHOLD_CONF_KEY = "hbase.procedure.store.wal.roll.threshold";<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  private static final long DEFAULT_ROLL_THRESHOLD = 32 * 1024 * 1024; // 32M<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>  public static final String STORE_WAL_SYNC_STATS_COUNT =<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      "hbase.procedure.store.wal.sync.stats.count";<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  private static final int DEFAULT_SYNC_STATS_COUNT = 10;<a name="line.156"></a>
 <span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>  private int walCountWarnThreshold;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  private int maxRetriesBeforeRoll;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  private int maxSyncFailureRoll;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  private int waitBeforeRoll;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  private int rollRetries;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  private int periodicRollMsec;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  private long rollThreshold;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>  private boolean useHsync;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  private int syncWaitMsec;<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>  // Variables used for UI display<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  private CircularFifoQueue syncMetricsQueue;<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>  public static class SyncMetrics {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private long timestamp;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    private long syncWaitMs;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    private long totalSyncedBytes;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    private int syncedEntries;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    private float syncedPerSec;<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>    public long getTimestamp() {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      return timestamp;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>    public long getSyncWaitMs() {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      return syncWaitMs;<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>    public long getTotalSyncedBytes() {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      return totalSyncedBytes;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
+<span class="sourceLineNo">158</span>  private final LinkedList&lt;ProcedureWALFile&gt; logs = new LinkedList&lt;&gt;();<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  private final ProcedureStoreTracker holdingCleanupTracker = new ProcedureStoreTracker();<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  private final ProcedureStoreTracker storeTracker = new ProcedureStoreTracker();<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  private final ReentrantLock lock = new ReentrantLock();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  private final Condition waitCond = lock.newCondition();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  private final Condition slotCond = lock.newCondition();<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  private final Condition syncCond = lock.newCondition();<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>  private final LeaseRecovery leaseRecovery;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  private final Configuration conf;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  private final FileSystem fs;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  private final Path walDir;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  private final Path walArchiveDir;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  private final boolean enforceStreamCapability;<a name="line.171"></a>
+<span class="sourceLineNo">172</span><a name="line.172"></a>
+<span class="sourceLineNo">173</span>  private final AtomicReference&lt;Throwable&gt; syncException = new AtomicReference&lt;&gt;();<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  private final AtomicBoolean loading = new AtomicBoolean(true);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  private final AtomicBoolean inSync = new AtomicBoolean(false);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  private final AtomicLong totalSynced = new AtomicLong(0);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  private final AtomicLong lastRollTs = new AtomicLong(0);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  private final AtomicLong syncId = new AtomicLong(0);<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span>  private LinkedTransferQueue&lt;ByteSlot&gt; slotsCache = null;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>  private Set&lt;ProcedureWALFile&gt; corruptedLogs = null;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  private FSDataOutputStream stream = null;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  private int runningProcCount = 1;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  private long flushLogId = 0;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  private int syncMaxSlot = 1;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  private int slotIndex = 0;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  private Thread syncThread;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  private ByteSlot[] slots;<a name="line.188"></a>
 <span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>    public long getSyncedEntries() {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      return syncedEntries;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    }<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>    public float getSyncedPerSec() {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      return syncedPerSec;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  }<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>  public WALProcedureStore(final Configuration conf, final LeaseRecovery leaseRecovery)<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      throws IOException {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    this(conf,<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        new Path(CommonFSUtils.getWALRootDir(conf), MASTER_PROCEDURE_LOGDIR),<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        new Path(CommonFSUtils.getWALRootDir(conf), HConstants.HREGION_OLDLOGDIR_NAME),<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        leaseRecovery);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  @VisibleForTesting<a name="line.207"></a>
-<span class="sourceLineNo">208</span>  public WALProcedureStore(final Configuration conf, final Path walDir, final Path walArchiveDir,<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      final LeaseRecovery leaseRecovery) throws IOException {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    this.conf = conf;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    this.leaseRecovery = leaseRecovery;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    this.walDir = walDir;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    this.walArchiveDir = walArchiveDir;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    this.fs = walDir.getFileSystem(conf);<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    this.enforceStreamCapability = conf.getBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE, true);<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>    // Create the log directory for the procedure store<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    if (!fs.exists(walDir)) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      if (!fs.mkdirs(walDir)) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        throw new IOException("Unable to mkdir " + walDir);<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>    // Now that it exists, set the log policy<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    String storagePolicy =<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        conf.get(HConstants.WAL_STORAGE_POLICY, HConstants.DEFAULT_WAL_STORAGE_POLICY);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    CommonFSUtils.setStoragePolicy(fs, walDir, storagePolicy);<a name="line.226"></a>
-<span class="sourceLineNo">227</span><a name="line.227"></a>
-<span class="sourceLineNo">228</span>    // Create archive dir up front. Rename won't work w/o it up on HDFS.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    if (this.walArchiveDir != null &amp;&amp; !this.fs.exists(this.walArchiveDir)) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      if (this.fs.mkdirs(this.walArchiveDir)) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        if (LOG.isDebugEnabled()) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          LOG.debug("Created Procedure Store WAL archive dir " + this.walArchiveDir);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        }<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      } else {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        LOG.warn("Failed create of " + this.walArchiveDir);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    }<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  }<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>  @Override<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  public void start(int numSlots) throws IOException {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    if (!setRunning(true)) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      return;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
-<span class="sourceLineNo">245</span><a name="line.245"></a>
-<span class="sourceLineNo">246</span>    // Init buffer slots<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    loading.set(true);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    runningProcCount = numSlots;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    syncMaxSlot = numSlots;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    slots = new ByteSlot[numSlots];<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    slotsCache = new LinkedTransferQueue();<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    while (slotsCache.size() &lt; numSlots) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      slotsCache.offer(new ByteSlot());<a name="line.253"></a>
+<span class="sourceLineNo">190</span>  private int walCountWarnThreshold;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  private int maxRetriesBeforeRoll;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  private int maxSyncFailureRoll;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  private int waitBeforeRoll;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  private int rollRetries;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  private int periodicRollMsec;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>  private long rollThreshold;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  private boolean useHsync;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>  private int syncWaitMsec;<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>  // Variables used for UI display<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  private CircularFifoQueue&lt;SyncMetrics&gt; syncMetricsQueue;<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>  public static class SyncMetrics {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    private long timestamp;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    private long syncWaitMs;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    private long totalSyncedBytes;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    private int syncedEntries;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    private float syncedPerSec;<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public long getTimestamp() {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return timestamp;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>    public long getSyncWaitMs() {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      return syncWaitMs;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span>    public long getTotalSyncedBytes() {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      return totalSyncedBytes;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>    public long getSyncedEntries() {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      return syncedEntries;<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>    public float getSyncedPerSec() {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      return syncedPerSec;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>  public WALProcedureStore(final Configuration conf, final LeaseRecovery leaseRecovery)<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      throws IOException {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    this(conf,<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        new Path(CommonFSUtils.getWALRootDir(conf), MASTER_PROCEDURE_LOGDIR),<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        new Path(CommonFSUtils.getWALRootDir(conf), HConstants.HREGION_OLDLOGDIR_NAME),<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        leaseRecovery);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  }<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>  @VisibleForTesting<a name="line.239"></a>
+<span class="sourceLineNo">240</span>  public WALProcedureStore(final Configuration conf, final Path walDir, final Path walArchiveDir,<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      final LeaseRecovery leaseRecovery) throws IOException {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    this.conf = conf;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    this.leaseRecovery = leaseRecovery;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    this.walDir = walDir;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    this.walArchiveDir = walArchiveDir;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    this.fs = walDir.getFileSystem(conf);<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    this.enforceStreamCapability = conf.getBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE, true);<a name="line.247"></a>
+<span class="sourceLineNo">248</span><a name="line.248"></a>
+<span class="sourceLineNo">249</span>    // Create the log directory for the procedure store<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    if (!fs.exists(walDir)) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      if (!fs.mkdirs(walDir)) {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        throw new IOException("Unable to mkdir " + walDir);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      }<a name="line.253"></a>
 <span class="sourceLineNo">254</span>    }<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span>    // Tunings<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    walCountWarnThreshold =<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      conf.getInt(WAL_COUNT_WARN_THRESHOLD_CONF_KEY, DEFAULT_WAL_COUNT_WARN_THRESHOLD);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    maxRetriesBeforeRoll =<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      conf.getInt(MAX_RETRIES_BEFORE_ROLL_CONF_KEY, DEFAULT_MAX_RETRIES_BEFORE_ROLL);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    maxSyncFailureRoll = conf.getInt(MAX_SYNC_FAILURE_ROLL_CONF_KEY, DEFAULT_MAX_SYNC_FAILURE_ROLL);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    waitBeforeRoll = conf.getInt(WAIT_BEFORE_ROLL_CONF_KEY, DEFAULT_WAIT_BEFORE_ROLL);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    rollRetries = conf.getInt(ROLL_RETRIES_CONF_KEY, DEFAULT_ROLL_RETRIES);<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    rollThreshold = conf.getLong(ROLL_THRESHOLD_CONF_KEY, DEFAULT_ROLL_THRESHOLD);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    periodicRollMsec = conf.getInt(PERIODIC_ROLL_CONF_KEY, DEFAULT_PERIODIC_ROLL);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    syncWaitMsec = conf.getInt(SYNC_WAIT_MSEC_CONF_KEY, DEFAULT_SYNC_WAIT_MSEC);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    useHsync = conf.getBoolean(USE_HSYNC_CONF_KEY, DEFAULT_USE_HSYNC);<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>    // WebUI<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    syncMetricsQueue = new CircularFifoQueue(<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      conf.getInt(STORE_WAL_SYNC_STATS_COUNT, DEFAULT_SYNC_STATS_COUNT));<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>    // Init sync thread<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    syncThread = new Thread("WALProcedureStoreSyncThread") {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      @Override<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      public void run() {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        try {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>          syncLoop();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        } catch (Throwable e) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>          LOG.error("Got an exception from the sync-loop", e);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>          if (!isSyncAborted()) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>            sendAbortProcessSignal();<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>    };<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    syncThread.start();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  }<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span>  @Override<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  public void stop(final boolean abort) {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    if (!setRunning(false)) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      return;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    }<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>    LOG.info("Stopping the WAL Procedure Store, isAbort=" + abort +<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      (isSyncAborted() ? " (self aborting)" : ""));<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    sendStopSignal();<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    if (!isSyncAborted()) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      try {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        while (syncThread.isAlive()) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>          sendStopSignal();<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          syncThread.join(250);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        }<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      } catch (InterruptedException e) {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        LOG.warn("join interrupted", e);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        Thread.currentThread().interrupt();<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><a name="line.310"></a>
-<span class="sourceLineNo">311</span>    // Close the writer<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    closeCurrentLogStream();<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>    // Close the old logs<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    // they should be already closed, this is just in case the load fails<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    // and we call start() and then stop()<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    for (ProcedureWALFile log: logs) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      log.close();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    logs.clear();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    loading.set(true);<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>  private void sendStopSignal() {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    if (lock.tryLock()) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      try {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>        waitCond.signalAll();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        syncCond.signalAll();<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      } finally {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        lock.unlock();<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><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  @Override<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  public int getNumThreads() {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    return slots == null ? 0 : slots.length;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>  @Override<a name="line.340"></a>
-<span class="sourceLineNo">341</span>  public int setRunningProcedureCount(final int count) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    this.runningProcCount = count &gt; 0 ? Math.min(count, slots.length) : slots.length;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    return this.runningProcCount;<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>  public ProcedureStoreTracker getStoreTracker() {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    return storeTracker;<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  }<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span>  public ArrayList&lt;ProcedureWALFile&gt; getActiveLogs() {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    lock.lock();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    try {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      return new ArrayList&lt;&gt;(logs);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    } finally {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      lock.unlock();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  public Set&lt;ProcedureWALFile&gt; getCorruptedLogs() {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return corruptedLogs;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  @Override<a name="line.363"></a>
-<span class="sourceLineNo">364</span>  public void recoverLease() throws IOException {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    lock.lock();<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    try {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      LOG.trace("Starting WAL Procedure Store lease recovery");<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      boolean afterFirstAttempt = false;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      while (isRunning()) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        // Don't sleep before first attempt<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        if (afterFirstAttempt) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          LOG.trace("Sleep {} ms after first lease recovery attempt.",<a name="line.372"></a>
-<span class="sourceLineNo">373</span>              waitBeforeRoll);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          Threads.sleepWithoutInterrupt(waitBeforeRoll);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        } else {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          afterFirstAttempt = true;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>        FileStatus[] oldLogs = getLogFiles();<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        // Get Log-MaxID and recover lease on old logs<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        try {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>          flushLogId = initOldLogs(oldLogs);<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        } catch (FileNotFoundException e) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>          LOG.warn("Someone else is active and deleted logs. retrying.", e);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>          continue;<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>        // Create new state-log<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        if (!rollWriter(flushLogId + 1)) {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>          // someone else has already created this log<a name="line.389"></a>
-<span class="sourceLineNo">390</span>          LOG.debug("Someone else has already created log {}. Retrying.", flushLogId);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>          continue;<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>        // We have the lease on the log<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        oldLogs = getLogFiles();<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        if (getMaxLogId(oldLogs) &gt; flushLogId) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          if (LOG.isDebugEnabled()) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>            LOG.debug("Someone else created new logs. Expected maxLogId &lt; " + flushLogId);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>          logs.getLast().removeFile(this.walArchiveDir);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>          continue;<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>        LOG.trace("Lease acquired for flushLogId={}", flushLogId);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        break;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    } finally {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      lock.unlock();<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span>  public void load(final ProcedureLoader loader) throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    lock.lock();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    try {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      if (logs.isEmpty()) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        throw new RuntimeException("recoverLease() must be called before loading data");<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>      // Nothing to do, If we have only the current log.<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      if (logs.size() == 1) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        LOG.trace("No state logs to replay.");<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        loader.setMaxProcId(0);<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        return;<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      }<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span>      // Load the old logs<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      final Iterator&lt;ProcedureWALFile&gt; it = logs.descendingIterator();<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      it.next(); // Skip the current log<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>      ProcedureWALFormat.load(it, storeTracker, new ProcedureWALFormat.Loader() {<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span>        @Override<a name="line.433"></a>
-<span class="sourceLineNo">434</span>        public void setMaxProcId(long maxProcId) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          loader.setMaxProcId(maxProcId);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>        @Override<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        public void load(ProcedureIterator procIter) throws IOException {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>          loader.load(procIter);<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>        @Override<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>          loader.handleCorrupted(procIter);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        }<a name="line.446"></a>
+<span class="sourceLineNo">255</span>    // Now that it exists, set the log policy<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    String storagePolicy =<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        conf.get(HConstants.WAL_STORAGE_POLICY, HConstants.DEFAULT_WAL_STORAGE_POLICY);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    CommonFSUtils.setStoragePolicy(fs, walDir, storagePolicy);<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>    // Create archive dir up front. Rename won't work w/o it up on HDFS.<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    if (this.walArchiveDir != null &amp;&amp; !this.fs.exists(this.walArchiveDir)) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      if (this.fs.mkdirs(this.walArchiveDir)) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>        LOG.debug("Created Procedure Store WAL archive dir {}", this.walArchiveDir);<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      } else {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>        LOG.warn("Failed create of {}", this.walArchiveDir);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  @Override<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  public void start(int numSlots) throws IOException {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    if (!setRunning(true)) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      return;<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>    // Init buffer slots<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    loading.set(true);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    runningProcCount = numSlots;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    syncMaxSlot = numSlots;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    slots = new ByteSlot[numSlots];<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    slotsCache = new LinkedTransferQueue&lt;&gt;();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    while (slotsCache.size() &lt; numSlots) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      slotsCache.offer(new ByteSlot());<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>    // Tunings<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    walCountWarnThreshold =<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      conf.getInt(WAL_COUNT_WARN_THRESHOLD_CONF_KEY, DEFAULT_WAL_COUNT_WARN_THRESHOLD);<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    maxRetriesBeforeRoll =<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      conf.getInt(MAX_RETRIES_BEFORE_ROLL_CONF_KEY, DEFAULT_MAX_RETRIES_BEFORE_ROLL);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    maxSyncFailureRoll = conf.getInt(MAX_SYNC_FAILURE_ROLL_CONF_KEY, DEFAULT_MAX_SYNC_FAILURE_ROLL);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    waitBeforeRoll = conf.getInt(WAIT_BEFORE_ROLL_CONF_KEY, DEFAULT_WAIT_BEFORE_ROLL);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    rollRetries = conf.getInt(ROLL_RETRIES_CONF_KEY, DEFAULT_ROLL_RETRIES);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    rollThreshold = conf.getLong(ROLL_THRESHOLD_CONF_KEY, DEFAULT_ROLL_THRESHOLD);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    periodicRollMsec = conf.getInt(PERIODIC_ROLL_CONF_KEY, DEFAULT_PERIODIC_ROLL);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    syncWaitMsec = conf.getInt(SYNC_WAIT_MSEC_CONF_KEY, DEFAULT_SYNC_WAIT_MSEC);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    useHsync = conf.getBoolean(USE_HSYNC_CONF_KEY, DEFAULT_USE_HSYNC);<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>    // WebUI<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    syncMetricsQueue = new CircularFifoQueue&lt;&gt;(<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      conf.getInt(STORE_WAL_SYNC_STATS_COUNT, DEFAULT_SYNC_STATS_COUNT));<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>    // Init sync thread<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    syncThread = new Thread("WALProcedureStoreSyncThread") {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      @Override<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      public void run() {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        try {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>          syncLoop();<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        } catch (Throwable e) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>          LOG.error("Got an exception from the sync-loop", e);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>          if (!isSyncAborted()) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>            sendAbortProcessSignal();<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>    };<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    syncThread.start();<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>  @Override<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  public void stop(final boolean abort) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    if (!setRunning(false)) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      return;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span>    LOG.info("Stopping the WAL Procedure Store, isAbort=" + abort +<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      (isSyncAborted() ? " (self aborting)" : ""));<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    sendStopSignal();<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    if (!isSyncAborted()) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      try {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        while (syncThread.isAlive()) {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>          sendStopSignal();<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          syncThread.join(250);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        }<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      } catch (InterruptedException e) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        LOG.warn("join interrupted", e);<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        Thread.currentThread().interrupt();<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><a name="line.340"></a>
+<span class="sourceLineNo">341</span>    // Close the writer<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    closeCurrentLogStream();<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>    // Close the old logs<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    // they should be already closed, this is just in case the load fails<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    // and we call start() and then stop()<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    for (ProcedureWALFile log: logs) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      log.close();<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    }<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    logs.clear();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    loading.set(true);<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>  private void sendStopSignal() {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    if (lock.tryLock()) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      try {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        waitCond.signalAll();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        syncCond.signalAll();<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      } finally {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        lock.unlock();<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>  @Override<a name="line.365"></a>
+<span class="sourceLineNo">366</span>  public int getNumThreads() {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    return slots == null ? 0 : slots.length;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>  }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span>  @Override<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  public int setRunningProcedureCount(final int count) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    this.runningProcCount = count &gt; 0 ? Math.min(count, slots.length) : slots.length;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    return this.runningProcCount;<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>  public ProcedureStoreTracker getStoreTracker() {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    return storeTracker;<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>  public ArrayList&lt;ProcedureWALFile&gt; getActiveLogs() {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    lock.lock();<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    try {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      return new ArrayList&lt;&gt;(logs);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    } finally {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      lock.unlock();<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    }<a name="line.386"></a>
+<span class="sourceLineNo">387</span>  }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span>  public Set&lt;ProcedureWALFile&gt; getCorruptedLogs() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    return corruptedLogs;<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span>  @Override<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  public void recoverLease() throws IOException {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    lock.lock();<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    try {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      LOG.trace("Starting WAL Procedure Store lease recovery");<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      boolean afterFirstAttempt = false;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      while (isRunning()) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>        // Don't sleep before first attempt<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        if (afterFirstAttempt) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          LOG.trace("Sleep {} ms after first lease recovery attempt.",<a name="line.402"></a>
+<span class="sourceLineNo">403</span>              waitBeforeRoll);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          Threads.sleepWithoutInterrupt(waitBeforeRoll);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        } else {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          afterFirstAttempt = true;<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        }<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        FileStatus[] oldLogs = getLogFiles();<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        // Get Log-MaxID and recover lease on old logs<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        try {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>          flushLogId = initOldLogs(oldLogs);<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        } catch (FileNotFoundException e) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>          LOG.warn("Someone else is active and deleted logs. retrying.", e);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>          continue;<a name="line.414"></a>
+<span class="sourceLineNo">415</span>        }<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span>        // Create new state-log<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        if (!rollWriter(flushLogId + 1)) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>          // someone else has already created this log<a name="line.419"></a>
+<span class="sourceLineNo">420</span>          LOG.debug("Someone else has already created log {}. Retrying.", flushLogId);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>          continue;<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        }<a name="line.422"></a>
+<span class="sourceLineNo">423</span><a name="line.423"></a>
+<span class="sourceLineNo">424</span>        // We have the lease on the log<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        oldLogs = getLogFiles();<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        if (getMaxLogId(oldLogs) &gt; flushLogId) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          LOG.debug("Someone else created new logs. Expected maxLogId &lt; {}", flushLogId);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          logs.getLast().removeFile(this.walArchiveDir);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>          continue;<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>        LOG.trace("Lease acquired for flushLogId={}", flushLogId);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        break;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      }<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    } finally {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      lock.unlock();<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    }<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  }<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span>  @Override<a name="line.440"></a>
+<span class="sourceLineNo">441</span>  public void load(ProcedureLoader loader) throws IOException {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    lock.lock();<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    try {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      if (logs.isEmpty()) {<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        throw new RuntimeException("recoverLease() must be called before loading data");<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      }<a name="line.446"></a>
 <span class="sourceLineNo">447</span><a name="line.447"></a>
-<span class="sourceLineNo">448</span>        @Override<a name="line.448"></a>
-<span class="sourceLineNo">449</span>        public void markCorruptedWAL(ProcedureWALFile log, IOException e) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>          if (corruptedLogs == null) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>            corruptedLogs = new HashSet&lt;&gt;();<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          }<a name="line.452"></a>
-<span class="sourceLineNo">453</span>          corruptedLogs.add(log);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          // TODO: sideline corrupted log<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>    } finally {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      try {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        // try to cleanup inactive wals and complete the operation<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        buildHoldingCleanupTracker();<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        tryCleanupLogsOnLoad();<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        loading.set(false);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      } finally {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>        lock.unlock();<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    }<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  }<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>  private void tryCleanupLogsOnLoad() {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    // nothing to cleanup.<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    if (logs.size() &lt;= 1) return;<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>    // the config says to not cleanup wals on load.<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    if (!conf.getBoolean(EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY,<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY)) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      LOG.debug("WALs cleanup on load is not enabled: " + getActiveLogs());<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      return;<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>    try {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      periodicRoll();<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    } catch (IOException e) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      LOG.warn("Unable to cleanup logs on load: " + e.getMessage(), e);<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>  @Override<a name="line.487"></a>
-<span class="sourceLineNo">488</span>  public void insert(final Procedure proc, final Procedure[] subprocs) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    if (LOG.isTraceEnabled()) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      LOG.trace("Insert " + proc + ", subproc=" + Arrays.toString(subprocs));<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>    ByteSlot slot = acquireSlot();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    try {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      // Serialize the insert<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      long[] subProcIds = null;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      if (subprocs != null) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        ProcedureWALFormat.writeInsert(slot, proc, subprocs);<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        subProcIds = new long[subprocs.length];<a name="line.499"></a>
-<span class="sourceLineNo">500</span>        for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>          subProcIds[i] = subprocs[i].getProcId();<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      } else {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>        assert !proc.hasParent();<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        ProcedureWALFormat.writeInsert(slot, proc);<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      }<a name="line.506"></a>
+<span class="sourceLineNo">448</span>      // Nothing to do, If we have only the current log.<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      if (logs.size() == 1) {<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        LOG.trace("No state logs to replay.");<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        loader.setMaxProcId(0);<a name="line.451"></a>
+<s

<TRUNCATED>

[15/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html
index d27bef3..e1b183b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html
@@ -23,603 +23,603 @@
 <span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
 <span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
-<span class="sourceLineNo">018</span><a name="line.18"></a>
-<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.procedure2.store.wal;<a name="line.19"></a>
-<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.io.FileNotFoundException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.ArrayList;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.Arrays;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.Collections;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Comparator;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.HashSet;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Iterator;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.LinkedList;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.Set;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.LinkedTransferQueue;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.TimeUnit;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.locks.Condition;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.fs.FileAlreadyExistsException;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.fs.FileStatus;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.fs.FileSystem;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.fs.Path;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.fs.PathFilter;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.HConstants;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreBase;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.procedure2.util.ByteSlot;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.procedure2.util.StringUtils;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.slf4j.Logger;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.slf4j.LoggerFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hbase.thirdparty.org.apache.commons.collections4.queue.CircularFifoQueue;<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>/**<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * WAL implementation of the ProcedureStore.<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * @see ProcedureWALPrettyPrinter for printing content of a single WAL.<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * @see #main(String[]) to parse a directory of MasterWALProcs.<a name="line.70"></a>
-<span class="sourceLineNo">071</span> */<a name="line.71"></a>
-<span class="sourceLineNo">072</span>@InterfaceAudience.Private<a name="line.72"></a>
-<span class="sourceLineNo">073</span>@InterfaceStability.Evolving<a name="line.73"></a>
-<span class="sourceLineNo">074</span>public class WALProcedureStore extends ProcedureStoreBase {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private static final Logger LOG = LoggerFactory.getLogger(WALProcedureStore.class);<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  public static final String LOG_PREFIX = "pv2-";<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  /** Used to construct the name of the log directory for master procedures */<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  public static final String MASTER_PROCEDURE_LOGDIR = "MasterProcWALs";<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  public interface LeaseRecovery {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    void recoverFileLease(FileSystem fs, Path path) throws IOException;<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>  public static final String WAL_COUNT_WARN_THRESHOLD_CONF_KEY =<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    "hbase.procedure.store.wal.warn.threshold";<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private static final int DEFAULT_WAL_COUNT_WARN_THRESHOLD = 64;<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  public static final String EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY =<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    "hbase.procedure.store.wal.exec.cleanup.on.load";<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private static final boolean DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY = true;<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  public static final String MAX_RETRIES_BEFORE_ROLL_CONF_KEY =<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    "hbase.procedure.store.wal.max.retries.before.roll";<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private static final int DEFAULT_MAX_RETRIES_BEFORE_ROLL = 3;<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  public static final String WAIT_BEFORE_ROLL_CONF_KEY =<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    "hbase.procedure.store.wal.wait.before.roll";<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private static final int DEFAULT_WAIT_BEFORE_ROLL = 500;<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  public static final String ROLL_RETRIES_CONF_KEY =<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    "hbase.procedure.store.wal.max.roll.retries";<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  private static final int DEFAULT_ROLL_RETRIES = 3;<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  public static final String MAX_SYNC_FAILURE_ROLL_CONF_KEY =<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    "hbase.procedure.store.wal.sync.failure.roll.max";<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  private static final int DEFAULT_MAX_SYNC_FAILURE_ROLL = 3;<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  public static final String PERIODIC_ROLL_CONF_KEY =<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    "hbase.procedure.store.wal.periodic.roll.msec";<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  private static final int DEFAULT_PERIODIC_ROLL = 60 * 60 * 1000; // 1h<a name="line.111"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.procedure2.store.wal;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.FileNotFoundException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.ArrayList;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.Arrays;<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.HashSet;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.Iterator;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.LinkedList;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.Set;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.concurrent.LinkedTransferQueue;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.concurrent.TimeUnit;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.locks.Condition;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.conf.Configuration;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.fs.FileAlreadyExistsException;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.fs.FileStatus;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.fs.FileSystem;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.fs.Path;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.fs.PathFilter;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HConstants;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreBase;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.procedure2.util.ByteSlot;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.procedure2.util.StringUtils;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.slf4j.Logger;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.slf4j.LoggerFactory;<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hbase.thirdparty.org.apache.commons.collections4.queue.CircularFifoQueue;<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader;<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>/**<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * WAL implementation of the ProcedureStore.<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * &lt;p/&gt;<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * When starting, the upper layer will first call {@link #start(int)}, then {@link #recoverLease()},<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * then {@link #load(ProcedureLoader)}.<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * &lt;p/&gt;<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * In {@link #recoverLease()}, we will get the lease by closing all the existing wal files(by<a name="line.70"></a>
+<span class="sourceLineNo">071</span> * calling recoverFileLease), and creating a new wal writer. And we will also get the list of all<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * the old wal files.<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * &lt;p/&gt;<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * FIXME: notice that the current recover lease implementation is problematic, it can not deal with<a name="line.74"></a>
+<span class="sourceLineNo">075</span> * the races if there are two master both wants to acquire the lease...<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * &lt;p/&gt;<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * In {@link #load(ProcedureLoader)} method, we will load all the active procedures. See the<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * comments of this method for more details.<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * &lt;p/&gt;<a name="line.79"></a>
+<span class="sourceLineNo">080</span> * The actual logging way is a bit like our FileSystem based WAL implementation as RS side. There is<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * a {@link #slots}, which is more like the ring buffer, and in the insert, update and delete<a name="line.81"></a>
+<span class="sourceLineNo">082</span> * methods we will put thing into the {@link #slots} and wait. And there is a background sync<a name="line.82"></a>
+<span class="sourceLineNo">083</span> * thread(see the {@link #syncLoop()} method) which get data from the {@link #slots} and write them<a name="line.83"></a>
+<span class="sourceLineNo">084</span> * to the FileSystem, and notify the caller that we have finished.<a name="line.84"></a>
+<span class="sourceLineNo">085</span> * &lt;p/&gt;<a name="line.85"></a>
+<span class="sourceLineNo">086</span> * TODO: try using disruptor to increase performance and simplify the logic?<a name="line.86"></a>
+<span class="sourceLineNo">087</span> * &lt;p/&gt;<a name="line.87"></a>
+<span class="sourceLineNo">088</span> * The {@link #storeTracker} keeps track of the modified procedures in the newest wal file, which is<a name="line.88"></a>
+<span class="sourceLineNo">089</span> * also the one being written currently. And the deleted bits in it are for all the procedures, not<a name="line.89"></a>
+<span class="sourceLineNo">090</span> * only the ones in the newest wal file. And when rolling a log, we will first store it in the<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * trailer of the current wal file, and then reset its modified bits, so that it can start to track<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * the modified procedures for the new wal file.<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * &lt;p/&gt;<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * The {@link #holdingCleanupTracker} is used to test whether we are safe to delete the oldest wal<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * file. When there are log rolling and there are more than 1 wal files, we will make use of it. It<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * will first be initialized to the oldest file's tracker(which is stored in the trailer), using the<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * method {@link ProcedureStoreTracker#resetTo(ProcedureStoreTracker, boolean)}, and then merge it<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * with the tracker of every newer wal files, using the<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * {@link ProcedureStoreTracker#setDeletedIfModifiedInBoth(ProcedureStoreTracker)}. If we find out<a name="line.99"></a>
+<span class="sourceLineNo">100</span> * that all the modified procedures for the oldest wal file are modified or deleted in newer wal<a name="line.100"></a>
+<span class="sourceLineNo">101</span> * files, then we can delete it.<a name="line.101"></a>
+<span class="sourceLineNo">102</span> * @see ProcedureWALPrettyPrinter for printing content of a single WAL.<a name="line.102"></a>
+<span class="sourceLineNo">103</span> * @see #main(String[]) to parse a directory of MasterWALProcs.<a name="line.103"></a>
+<span class="sourceLineNo">104</span> */<a name="line.104"></a>
+<span class="sourceLineNo">105</span>@InterfaceAudience.Private<a name="line.105"></a>
+<span class="sourceLineNo">106</span>public class WALProcedureStore extends ProcedureStoreBase {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  private static final Logger LOG = LoggerFactory.getLogger(WALProcedureStore.class);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  public static final String LOG_PREFIX = "pv2-";<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  /** Used to construct the name of the log directory for master procedures */<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  public static final String MASTER_PROCEDURE_LOGDIR = "MasterProcWALs";<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
 <span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public static final String SYNC_WAIT_MSEC_CONF_KEY = "hbase.procedure.store.wal.sync.wait.msec";<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  private static final int DEFAULT_SYNC_WAIT_MSEC = 100;<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span>  public static final String USE_HSYNC_CONF_KEY = "hbase.procedure.store.wal.use.hsync";<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  private static final boolean DEFAULT_USE_HSYNC = true;<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  public static final String ROLL_THRESHOLD_CONF_KEY = "hbase.procedure.store.wal.roll.threshold";<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  private static final long DEFAULT_ROLL_THRESHOLD = 32 * 1024 * 1024; // 32M<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public static final String STORE_WAL_SYNC_STATS_COUNT =<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      "hbase.procedure.store.wal.sync.stats.count";<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  private static final int DEFAULT_SYNC_STATS_COUNT = 10;<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>  private final LinkedList&lt;ProcedureWALFile&gt; logs = new LinkedList&lt;&gt;();<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  private final ProcedureStoreTracker holdingCleanupTracker = new ProcedureStoreTracker();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  private final ProcedureStoreTracker storeTracker = new ProcedureStoreTracker();<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  private final ReentrantLock lock = new ReentrantLock();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  private final Condition waitCond = lock.newCondition();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  private final Condition slotCond = lock.newCondition();<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  private final Condition syncCond = lock.newCondition();<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>  private final LeaseRecovery leaseRecovery;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  private final Configuration conf;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  private final FileSystem fs;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  private final Path walDir;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  private final Path walArchiveDir;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  private final boolean enforceStreamCapability;<a name="line.139"></a>
+<span class="sourceLineNo">113</span>  public interface LeaseRecovery {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    void recoverFileLease(FileSystem fs, Path path) throws IOException;<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>  public static final String WAL_COUNT_WARN_THRESHOLD_CONF_KEY =<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    "hbase.procedure.store.wal.warn.threshold";<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  private static final int DEFAULT_WAL_COUNT_WARN_THRESHOLD = 64;<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public static final String EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY =<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    "hbase.procedure.store.wal.exec.cleanup.on.load";<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private static final boolean DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY = true;<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span>  public static final String MAX_RETRIES_BEFORE_ROLL_CONF_KEY =<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    "hbase.procedure.store.wal.max.retries.before.roll";<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  private static final int DEFAULT_MAX_RETRIES_BEFORE_ROLL = 3;<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>  public static final String WAIT_BEFORE_ROLL_CONF_KEY =<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    "hbase.procedure.store.wal.wait.before.roll";<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  private static final int DEFAULT_WAIT_BEFORE_ROLL = 500;<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>  public static final String ROLL_RETRIES_CONF_KEY =<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    "hbase.procedure.store.wal.max.roll.retries";<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  private static final int DEFAULT_ROLL_RETRIES = 3;<a name="line.135"></a>
+<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">137</span>  public static final String MAX_SYNC_FAILURE_ROLL_CONF_KEY =<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    "hbase.procedure.store.wal.sync.failure.roll.max";<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  private static final int DEFAULT_MAX_SYNC_FAILURE_ROLL = 3;<a name="line.139"></a>
 <span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  private final AtomicReference&lt;Throwable&gt; syncException = new AtomicReference&lt;&gt;();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private final AtomicBoolean loading = new AtomicBoolean(true);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  private final AtomicBoolean inSync = new AtomicBoolean(false);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private final AtomicLong totalSynced = new AtomicLong(0);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  private final AtomicLong lastRollTs = new AtomicLong(0);<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  private final AtomicLong syncId = new AtomicLong(0);<a name="line.146"></a>
+<span class="sourceLineNo">141</span>  public static final String PERIODIC_ROLL_CONF_KEY =<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    "hbase.procedure.store.wal.periodic.roll.msec";<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  private static final int DEFAULT_PERIODIC_ROLL = 60 * 60 * 1000; // 1h<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>  public static final String SYNC_WAIT_MSEC_CONF_KEY = "hbase.procedure.store.wal.sync.wait.msec";<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  private static final int DEFAULT_SYNC_WAIT_MSEC = 100;<a name="line.146"></a>
 <span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private LinkedTransferQueue&lt;ByteSlot&gt; slotsCache = null;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  private Set&lt;ProcedureWALFile&gt; corruptedLogs = null;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  private FSDataOutputStream stream = null;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  private int runningProcCount = 1;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  private long flushLogId = 0;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  private int syncMaxSlot = 1;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  private int slotIndex = 0;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  private Thread syncThread;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  private ByteSlot[] slots;<a name="line.156"></a>
+<span class="sourceLineNo">148</span>  public static final String USE_HSYNC_CONF_KEY = "hbase.procedure.store.wal.use.hsync";<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private static final boolean DEFAULT_USE_HSYNC = true;<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public static final String ROLL_THRESHOLD_CONF_KEY = "hbase.procedure.store.wal.roll.threshold";<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  private static final long DEFAULT_ROLL_THRESHOLD = 32 * 1024 * 1024; // 32M<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>  public static final String STORE_WAL_SYNC_STATS_COUNT =<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      "hbase.procedure.store.wal.sync.stats.count";<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  private static final int DEFAULT_SYNC_STATS_COUNT = 10;<a name="line.156"></a>
 <span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>  private int walCountWarnThreshold;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  private int maxRetriesBeforeRoll;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  private int maxSyncFailureRoll;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  private int waitBeforeRoll;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  private int rollRetries;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  private int periodicRollMsec;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  private long rollThreshold;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>  private boolean useHsync;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  private int syncWaitMsec;<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>  // Variables used for UI display<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  private CircularFifoQueue syncMetricsQueue;<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>  public static class SyncMetrics {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private long timestamp;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    private long syncWaitMs;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    private long totalSyncedBytes;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    private int syncedEntries;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    private float syncedPerSec;<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>    public long getTimestamp() {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      return timestamp;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>    public long getSyncWaitMs() {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      return syncWaitMs;<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>    public long getTotalSyncedBytes() {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      return totalSyncedBytes;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
+<span class="sourceLineNo">158</span>  private final LinkedList&lt;ProcedureWALFile&gt; logs = new LinkedList&lt;&gt;();<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  private final ProcedureStoreTracker holdingCleanupTracker = new ProcedureStoreTracker();<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  private final ProcedureStoreTracker storeTracker = new ProcedureStoreTracker();<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  private final ReentrantLock lock = new ReentrantLock();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  private final Condition waitCond = lock.newCondition();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  private final Condition slotCond = lock.newCondition();<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  private final Condition syncCond = lock.newCondition();<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>  private final LeaseRecovery leaseRecovery;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  private final Configuration conf;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  private final FileSystem fs;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  private final Path walDir;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  private final Path walArchiveDir;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  private final boolean enforceStreamCapability;<a name="line.171"></a>
+<span class="sourceLineNo">172</span><a name="line.172"></a>
+<span class="sourceLineNo">173</span>  private final AtomicReference&lt;Throwable&gt; syncException = new AtomicReference&lt;&gt;();<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  private final AtomicBoolean loading = new AtomicBoolean(true);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  private final AtomicBoolean inSync = new AtomicBoolean(false);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  private final AtomicLong totalSynced = new AtomicLong(0);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  private final AtomicLong lastRollTs = new AtomicLong(0);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  private final AtomicLong syncId = new AtomicLong(0);<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span>  private LinkedTransferQueue&lt;ByteSlot&gt; slotsCache = null;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>  private Set&lt;ProcedureWALFile&gt; corruptedLogs = null;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  private FSDataOutputStream stream = null;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  private int runningProcCount = 1;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  private long flushLogId = 0;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  private int syncMaxSlot = 1;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  private int slotIndex = 0;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  private Thread syncThread;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  private ByteSlot[] slots;<a name="line.188"></a>
 <span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>    public long getSyncedEntries() {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      return syncedEntries;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    }<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>    public float getSyncedPerSec() {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      return syncedPerSec;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  }<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>  public WALProcedureStore(final Configuration conf, final LeaseRecovery leaseRecovery)<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      throws IOException {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    this(conf,<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        new Path(CommonFSUtils.getWALRootDir(conf), MASTER_PROCEDURE_LOGDIR),<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        new Path(CommonFSUtils.getWALRootDir(conf), HConstants.HREGION_OLDLOGDIR_NAME),<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        leaseRecovery);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  @VisibleForTesting<a name="line.207"></a>
-<span class="sourceLineNo">208</span>  public WALProcedureStore(final Configuration conf, final Path walDir, final Path walArchiveDir,<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      final LeaseRecovery leaseRecovery) throws IOException {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    this.conf = conf;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    this.leaseRecovery = leaseRecovery;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    this.walDir = walDir;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    this.walArchiveDir = walArchiveDir;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    this.fs = walDir.getFileSystem(conf);<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    this.enforceStreamCapability = conf.getBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE, true);<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>    // Create the log directory for the procedure store<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    if (!fs.exists(walDir)) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      if (!fs.mkdirs(walDir)) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        throw new IOException("Unable to mkdir " + walDir);<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>    // Now that it exists, set the log policy<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    String storagePolicy =<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        conf.get(HConstants.WAL_STORAGE_POLICY, HConstants.DEFAULT_WAL_STORAGE_POLICY);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    CommonFSUtils.setStoragePolicy(fs, walDir, storagePolicy);<a name="line.226"></a>
-<span class="sourceLineNo">227</span><a name="line.227"></a>
-<span class="sourceLineNo">228</span>    // Create archive dir up front. Rename won't work w/o it up on HDFS.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    if (this.walArchiveDir != null &amp;&amp; !this.fs.exists(this.walArchiveDir)) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      if (this.fs.mkdirs(this.walArchiveDir)) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        if (LOG.isDebugEnabled()) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          LOG.debug("Created Procedure Store WAL archive dir " + this.walArchiveDir);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        }<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      } else {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        LOG.warn("Failed create of " + this.walArchiveDir);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    }<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  }<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>  @Override<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  public void start(int numSlots) throws IOException {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    if (!setRunning(true)) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      return;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
-<span class="sourceLineNo">245</span><a name="line.245"></a>
-<span class="sourceLineNo">246</span>    // Init buffer slots<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    loading.set(true);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    runningProcCount = numSlots;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    syncMaxSlot = numSlots;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    slots = new ByteSlot[numSlots];<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    slotsCache = new LinkedTransferQueue();<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    while (slotsCache.size() &lt; numSlots) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      slotsCache.offer(new ByteSlot());<a name="line.253"></a>
+<span class="sourceLineNo">190</span>  private int walCountWarnThreshold;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  private int maxRetriesBeforeRoll;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  private int maxSyncFailureRoll;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  private int waitBeforeRoll;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  private int rollRetries;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  private int periodicRollMsec;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>  private long rollThreshold;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  private boolean useHsync;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>  private int syncWaitMsec;<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>  // Variables used for UI display<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  private CircularFifoQueue&lt;SyncMetrics&gt; syncMetricsQueue;<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>  public static class SyncMetrics {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    private long timestamp;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    private long syncWaitMs;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    private long totalSyncedBytes;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    private int syncedEntries;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    private float syncedPerSec;<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public long getTimestamp() {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return timestamp;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>    public long getSyncWaitMs() {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      return syncWaitMs;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span>    public long getTotalSyncedBytes() {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      return totalSyncedBytes;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>    public long getSyncedEntries() {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      return syncedEntries;<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>    public float getSyncedPerSec() {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      return syncedPerSec;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>  public WALProcedureStore(final Configuration conf, final LeaseRecovery leaseRecovery)<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      throws IOException {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    this(conf,<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        new Path(CommonFSUtils.getWALRootDir(conf), MASTER_PROCEDURE_LOGDIR),<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        new Path(CommonFSUtils.getWALRootDir(conf), HConstants.HREGION_OLDLOGDIR_NAME),<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        leaseRecovery);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  }<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>  @VisibleForTesting<a name="line.239"></a>
+<span class="sourceLineNo">240</span>  public WALProcedureStore(final Configuration conf, final Path walDir, final Path walArchiveDir,<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      final LeaseRecovery leaseRecovery) throws IOException {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    this.conf = conf;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    this.leaseRecovery = leaseRecovery;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    this.walDir = walDir;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    this.walArchiveDir = walArchiveDir;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    this.fs = walDir.getFileSystem(conf);<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    this.enforceStreamCapability = conf.getBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE, true);<a name="line.247"></a>
+<span class="sourceLineNo">248</span><a name="line.248"></a>
+<span class="sourceLineNo">249</span>    // Create the log directory for the procedure store<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    if (!fs.exists(walDir)) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      if (!fs.mkdirs(walDir)) {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        throw new IOException("Unable to mkdir " + walDir);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      }<a name="line.253"></a>
 <span class="sourceLineNo">254</span>    }<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span>    // Tunings<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    walCountWarnThreshold =<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      conf.getInt(WAL_COUNT_WARN_THRESHOLD_CONF_KEY, DEFAULT_WAL_COUNT_WARN_THRESHOLD);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    maxRetriesBeforeRoll =<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      conf.getInt(MAX_RETRIES_BEFORE_ROLL_CONF_KEY, DEFAULT_MAX_RETRIES_BEFORE_ROLL);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    maxSyncFailureRoll = conf.getInt(MAX_SYNC_FAILURE_ROLL_CONF_KEY, DEFAULT_MAX_SYNC_FAILURE_ROLL);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    waitBeforeRoll = conf.getInt(WAIT_BEFORE_ROLL_CONF_KEY, DEFAULT_WAIT_BEFORE_ROLL);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    rollRetries = conf.getInt(ROLL_RETRIES_CONF_KEY, DEFAULT_ROLL_RETRIES);<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    rollThreshold = conf.getLong(ROLL_THRESHOLD_CONF_KEY, DEFAULT_ROLL_THRESHOLD);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    periodicRollMsec = conf.getInt(PERIODIC_ROLL_CONF_KEY, DEFAULT_PERIODIC_ROLL);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    syncWaitMsec = conf.getInt(SYNC_WAIT_MSEC_CONF_KEY, DEFAULT_SYNC_WAIT_MSEC);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    useHsync = conf.getBoolean(USE_HSYNC_CONF_KEY, DEFAULT_USE_HSYNC);<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>    // WebUI<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    syncMetricsQueue = new CircularFifoQueue(<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      conf.getInt(STORE_WAL_SYNC_STATS_COUNT, DEFAULT_SYNC_STATS_COUNT));<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>    // Init sync thread<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    syncThread = new Thread("WALProcedureStoreSyncThread") {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      @Override<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      public void run() {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        try {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>          syncLoop();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        } catch (Throwable e) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>          LOG.error("Got an exception from the sync-loop", e);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>          if (!isSyncAborted()) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>            sendAbortProcessSignal();<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>    };<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    syncThread.start();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  }<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span>  @Override<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  public void stop(final boolean abort) {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    if (!setRunning(false)) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      return;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    }<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>    LOG.info("Stopping the WAL Procedure Store, isAbort=" + abort +<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      (isSyncAborted() ? " (self aborting)" : ""));<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    sendStopSignal();<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    if (!isSyncAborted()) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      try {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        while (syncThread.isAlive()) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>          sendStopSignal();<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          syncThread.join(250);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        }<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      } catch (InterruptedException e) {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        LOG.warn("join interrupted", e);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        Thread.currentThread().interrupt();<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><a name="line.310"></a>
-<span class="sourceLineNo">311</span>    // Close the writer<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    closeCurrentLogStream();<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>    // Close the old logs<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    // they should be already closed, this is just in case the load fails<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    // and we call start() and then stop()<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    for (ProcedureWALFile log: logs) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      log.close();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    logs.clear();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    loading.set(true);<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>  private void sendStopSignal() {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    if (lock.tryLock()) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      try {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>        waitCond.signalAll();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        syncCond.signalAll();<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      } finally {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        lock.unlock();<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><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  @Override<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  public int getNumThreads() {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    return slots == null ? 0 : slots.length;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>  @Override<a name="line.340"></a>
-<span class="sourceLineNo">341</span>  public int setRunningProcedureCount(final int count) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    this.runningProcCount = count &gt; 0 ? Math.min(count, slots.length) : slots.length;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    return this.runningProcCount;<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>  public ProcedureStoreTracker getStoreTracker() {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    return storeTracker;<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  }<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span>  public ArrayList&lt;ProcedureWALFile&gt; getActiveLogs() {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    lock.lock();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    try {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      return new ArrayList&lt;&gt;(logs);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    } finally {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      lock.unlock();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  public Set&lt;ProcedureWALFile&gt; getCorruptedLogs() {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return corruptedLogs;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  @Override<a name="line.363"></a>
-<span class="sourceLineNo">364</span>  public void recoverLease() throws IOException {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    lock.lock();<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    try {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      LOG.trace("Starting WAL Procedure Store lease recovery");<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      boolean afterFirstAttempt = false;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      while (isRunning()) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        // Don't sleep before first attempt<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        if (afterFirstAttempt) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          LOG.trace("Sleep {} ms after first lease recovery attempt.",<a name="line.372"></a>
-<span class="sourceLineNo">373</span>              waitBeforeRoll);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          Threads.sleepWithoutInterrupt(waitBeforeRoll);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        } else {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          afterFirstAttempt = true;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>        FileStatus[] oldLogs = getLogFiles();<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        // Get Log-MaxID and recover lease on old logs<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        try {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>          flushLogId = initOldLogs(oldLogs);<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        } catch (FileNotFoundException e) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>          LOG.warn("Someone else is active and deleted logs. retrying.", e);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>          continue;<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>        // Create new state-log<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        if (!rollWriter(flushLogId + 1)) {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>          // someone else has already created this log<a name="line.389"></a>
-<span class="sourceLineNo">390</span>          LOG.debug("Someone else has already created log {}. Retrying.", flushLogId);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>          continue;<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>        // We have the lease on the log<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        oldLogs = getLogFiles();<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        if (getMaxLogId(oldLogs) &gt; flushLogId) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          if (LOG.isDebugEnabled()) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>            LOG.debug("Someone else created new logs. Expected maxLogId &lt; " + flushLogId);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>          logs.getLast().removeFile(this.walArchiveDir);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>          continue;<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>        LOG.trace("Lease acquired for flushLogId={}", flushLogId);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        break;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    } finally {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      lock.unlock();<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span>  public void load(final ProcedureLoader loader) throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    lock.lock();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    try {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      if (logs.isEmpty()) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        throw new RuntimeException("recoverLease() must be called before loading data");<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>      // Nothing to do, If we have only the current log.<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      if (logs.size() == 1) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        LOG.trace("No state logs to replay.");<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        loader.setMaxProcId(0);<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        return;<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      }<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span>      // Load the old logs<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      final Iterator&lt;ProcedureWALFile&gt; it = logs.descendingIterator();<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      it.next(); // Skip the current log<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>      ProcedureWALFormat.load(it, storeTracker, new ProcedureWALFormat.Loader() {<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span>        @Override<a name="line.433"></a>
-<span class="sourceLineNo">434</span>        public void setMaxProcId(long maxProcId) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          loader.setMaxProcId(maxProcId);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>        @Override<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        public void load(ProcedureIterator procIter) throws IOException {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>          loader.load(procIter);<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>        @Override<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>          loader.handleCorrupted(procIter);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        }<a name="line.446"></a>
+<span class="sourceLineNo">255</span>    // Now that it exists, set the log policy<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    String storagePolicy =<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        conf.get(HConstants.WAL_STORAGE_POLICY, HConstants.DEFAULT_WAL_STORAGE_POLICY);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    CommonFSUtils.setStoragePolicy(fs, walDir, storagePolicy);<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>    // Create archive dir up front. Rename won't work w/o it up on HDFS.<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    if (this.walArchiveDir != null &amp;&amp; !this.fs.exists(this.walArchiveDir)) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      if (this.fs.mkdirs(this.walArchiveDir)) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>        LOG.debug("Created Procedure Store WAL archive dir {}", this.walArchiveDir);<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      } else {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>        LOG.warn("Failed create of {}", this.walArchiveDir);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  @Override<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  public void start(int numSlots) throws IOException {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    if (!setRunning(true)) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      return;<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>    // Init buffer slots<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    loading.set(true);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    runningProcCount = numSlots;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    syncMaxSlot = numSlots;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    slots = new ByteSlot[numSlots];<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    slotsCache = new LinkedTransferQueue&lt;&gt;();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    while (slotsCache.size() &lt; numSlots) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      slotsCache.offer(new ByteSlot());<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>    // Tunings<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    walCountWarnThreshold =<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      conf.getInt(WAL_COUNT_WARN_THRESHOLD_CONF_KEY, DEFAULT_WAL_COUNT_WARN_THRESHOLD);<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    maxRetriesBeforeRoll =<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      conf.getInt(MAX_RETRIES_BEFORE_ROLL_CONF_KEY, DEFAULT_MAX_RETRIES_BEFORE_ROLL);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    maxSyncFailureRoll = conf.getInt(MAX_SYNC_FAILURE_ROLL_CONF_KEY, DEFAULT_MAX_SYNC_FAILURE_ROLL);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    waitBeforeRoll = conf.getInt(WAIT_BEFORE_ROLL_CONF_KEY, DEFAULT_WAIT_BEFORE_ROLL);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    rollRetries = conf.getInt(ROLL_RETRIES_CONF_KEY, DEFAULT_ROLL_RETRIES);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    rollThreshold = conf.getLong(ROLL_THRESHOLD_CONF_KEY, DEFAULT_ROLL_THRESHOLD);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    periodicRollMsec = conf.getInt(PERIODIC_ROLL_CONF_KEY, DEFAULT_PERIODIC_ROLL);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    syncWaitMsec = conf.getInt(SYNC_WAIT_MSEC_CONF_KEY, DEFAULT_SYNC_WAIT_MSEC);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    useHsync = conf.getBoolean(USE_HSYNC_CONF_KEY, DEFAULT_USE_HSYNC);<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>    // WebUI<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    syncMetricsQueue = new CircularFifoQueue&lt;&gt;(<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      conf.getInt(STORE_WAL_SYNC_STATS_COUNT, DEFAULT_SYNC_STATS_COUNT));<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>    // Init sync thread<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    syncThread = new Thread("WALProcedureStoreSyncThread") {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      @Override<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      public void run() {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        try {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>          syncLoop();<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        } catch (Throwable e) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>          LOG.error("Got an exception from the sync-loop", e);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>          if (!isSyncAborted()) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>            sendAbortProcessSignal();<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>    };<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    syncThread.start();<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>  @Override<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  public void stop(final boolean abort) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    if (!setRunning(false)) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      return;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span>    LOG.info("Stopping the WAL Procedure Store, isAbort=" + abort +<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      (isSyncAborted() ? " (self aborting)" : ""));<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    sendStopSignal();<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    if (!isSyncAborted()) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      try {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        while (syncThread.isAlive()) {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>          sendStopSignal();<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          syncThread.join(250);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        }<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      } catch (InterruptedException e) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        LOG.warn("join interrupted", e);<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        Thread.currentThread().interrupt();<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><a name="line.340"></a>
+<span class="sourceLineNo">341</span>    // Close the writer<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    closeCurrentLogStream();<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>    // Close the old logs<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    // they should be already closed, this is just in case the load fails<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    // and we call start() and then stop()<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    for (ProcedureWALFile log: logs) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      log.close();<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    }<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    logs.clear();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    loading.set(true);<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>  private void sendStopSignal() {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    if (lock.tryLock()) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      try {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        waitCond.signalAll();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        syncCond.signalAll();<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      } finally {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        lock.unlock();<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>  @Override<a name="line.365"></a>
+<span class="sourceLineNo">366</span>  public int getNumThreads() {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    return slots == null ? 0 : slots.length;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>  }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span>  @Override<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  public int setRunningProcedureCount(final int count) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    this.runningProcCount = count &gt; 0 ? Math.min(count, slots.length) : slots.length;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    return this.runningProcCount;<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>  public ProcedureStoreTracker getStoreTracker() {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    return storeTracker;<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>  public ArrayList&lt;ProcedureWALFile&gt; getActiveLogs() {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    lock.lock();<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    try {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      return new ArrayList&lt;&gt;(logs);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    } finally {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      lock.unlock();<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    }<a name="line.386"></a>
+<span class="sourceLineNo">387</span>  }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span>  public Set&lt;ProcedureWALFile&gt; getCorruptedLogs() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    return corruptedLogs;<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span>  @Override<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  public void recoverLease() throws IOException {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    lock.lock();<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    try {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      LOG.trace("Starting WAL Procedure Store lease recovery");<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      boolean afterFirstAttempt = false;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      while (isRunning()) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>        // Don't sleep before first attempt<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        if (afterFirstAttempt) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          LOG.trace("Sleep {} ms after first lease recovery attempt.",<a name="line.402"></a>
+<span class="sourceLineNo">403</span>              waitBeforeRoll);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          Threads.sleepWithoutInterrupt(waitBeforeRoll);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        } else {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          afterFirstAttempt = true;<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        }<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        FileStatus[] oldLogs = getLogFiles();<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        // Get Log-MaxID and recover lease on old logs<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        try {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>          flushLogId = initOldLogs(oldLogs);<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        } catch (FileNotFoundException e) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>          LOG.warn("Someone else is active and deleted logs. retrying.", e);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>          continue;<a name="line.414"></a>
+<span class="sourceLineNo">415</span>        }<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span>        // Create new state-log<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        if (!rollWriter(flushLogId + 1)) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>          // someone else has already created this log<a name="line.419"></a>
+<span class="sourceLineNo">420</span>          LOG.debug("Someone else has already created log {}. Retrying.", flushLogId);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>          continue;<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        }<a name="line.422"></a>
+<span class="sourceLineNo">423</span><a name="line.423"></a>
+<span class="sourceLineNo">424</span>        // We have the lease on the log<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        oldLogs = getLogFiles();<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        if (getMaxLogId(oldLogs) &gt; flushLogId) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          LOG.debug("Someone else created new logs. Expected maxLogId &lt; {}", flushLogId);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          logs.getLast().removeFile(this.walArchiveDir);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>          continue;<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>        LOG.trace("Lease acquired for flushLogId={}", flushLogId);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        break;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      }<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    } finally {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      lock.unlock();<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    }<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  }<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span>  @Override<a name="line.440"></a>
+<span class="sourceLineNo">441</span>  public void load(ProcedureLoader loader) throws IOException {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    lock.lock();<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    try {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      if (logs.isEmpty()) {<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        throw new RuntimeException("recoverLease() must be called before loading data");<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      }<a name="line.446"></a>
 <span class="sourceLineNo">447</span><a name="line.447"></a>
-<span class="sourceLineNo">448</span>        @Override<a name="line.448"></a>
-<span class="sourceLineNo">449</span>        public void markCorruptedWAL(ProcedureWALFile log, IOException e) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>          if (corruptedLogs == null) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>            corruptedLogs = new HashSet&lt;&gt;();<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          }<a name="line.452"></a>
-<span class="sourceLineNo">453</span>          corruptedLogs.add(log);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          // TODO: sideline corrupted log<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>    } finally {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      try {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        // try to cleanup inactive wals and complete the operation<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        buildHoldingCleanupTracker();<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        tryCleanupLogsOnLoad();<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        loading.set(false);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      } finally {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>        lock.unlock();<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    }<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  }<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>  private void tryCleanupLogsOnLoad() {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    // nothing to cleanup.<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    if (logs.size() &lt;= 1) return;<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>    // the config says to not cleanup wals on load.<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    if (!conf.getBoolean(EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY,<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY)) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      LOG.debug("WALs cleanup on load is not enabled: " + getActiveLogs());<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      return;<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>    try {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      periodicRoll();<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    } catch (IOException e) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      LOG.warn("Unable to cleanup logs on load: " + e.getMessage(), e);<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>  @Override<a name="line.487"></a>
-<span class="sourceLineNo">488</span>  public void insert(final Procedure proc, final Procedure[] subprocs) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    if (LOG.isTraceEnabled()) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      LOG.trace("Insert " + proc + ", subproc=" + Arrays.toString(subprocs));<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>    ByteSlot slot = acquireSlot();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    try {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      // Serialize the insert<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      long[] subProcIds = null;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      if (subprocs != null) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        ProcedureWALFormat.writeInsert(slot, proc, subprocs);<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        subProcIds = new long[subprocs.length];<a name="line.499"></a>
-<span class="sourceLineNo">500</span>        for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>          subProcIds[i] = subprocs[i].getProcId();<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      } else {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>        assert !proc.hasParent();<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        ProcedureWALFormat.writeInsert(slot, proc);<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      }<a name="line.506"></a>
+<span class="sourceLineNo">448</span>      // Nothing to do, If we have only the current log.<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      if (logs.size() == 1) {<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        LOG.trace("No state logs to replay.");<a name="line.450"></a>
+<span class="sourceLineNo

<TRUNCATED>

[18/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.html
index 11f570d..6cdebcf 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.html
@@ -29,31 +29,31 @@
 <span class="sourceLineNo">021</span>import java.io.PrintStream;<a name="line.21"></a>
 <span class="sourceLineNo">022</span>import java.util.ArrayList;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.util.List;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.conf.Configuration;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.conf.Configured;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.fs.FileStatus;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.fs.FileSystem;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.fs.Path;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.slf4j.Logger;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.slf4j.LoggerFactory;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.util.Tool;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.util.ToolRunner;<a name="line.42"></a>
-<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.ParseException;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.PosixParser;<a name="line.48"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.conf.Configuration;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.conf.Configured;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.fs.FileStatus;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.fs.FileSystem;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.fs.Path;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.util.Tool;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.util.ToolRunner;<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.apache.yetus.audience.InterfaceStability;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.slf4j.Logger;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.slf4j.LoggerFactory;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.DefaultParser;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.Options;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hbase.thirdparty.org.apache.commons.cli.ParseException;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader;<a name="line.48"></a>
 <span class="sourceLineNo">049</span><a name="line.49"></a>
 <span class="sourceLineNo">050</span>/**<a name="line.50"></a>
 <span class="sourceLineNo">051</span> * ProcedureWALPrettyPrinter prints the contents of a given ProcedureWAL file<a name="line.51"></a>
@@ -172,7 +172,7 @@
 <span class="sourceLineNo">164</span><a name="line.164"></a>
 <span class="sourceLineNo">165</span>    final List&lt;Path&gt; files = new ArrayList&lt;&gt;();<a name="line.165"></a>
 <span class="sourceLineNo">166</span>    try {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      CommandLine cmd = new PosixParser().parse(options, args);<a name="line.167"></a>
+<span class="sourceLineNo">167</span>      CommandLine cmd = new DefaultParser().parse(options, args);<a name="line.167"></a>
 <span class="sourceLineNo">168</span><a name="line.168"></a>
 <span class="sourceLineNo">169</span>      if (cmd.hasOption("f")) {<a name="line.169"></a>
 <span class="sourceLineNo">170</span>        files.add(new Path(cmd.getOptionValue("f")));<a name="line.170"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html
new file mode 100644
index 0000000..a281f12
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html
@@ -0,0 +1,679 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.procedure2.store.wal;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureIterator;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.slf4j.Logger;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.slf4j.LoggerFactory;<a name="line.25"></a>
+<span class="sourceLineNo">026</span><a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.27"></a>
+<span class="sourceLineNo">028</span><a name="line.28"></a>
+<span class="sourceLineNo">029</span>/**<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * We keep an in-memory map of the procedures sorted by replay order. (see the details in the<a name="line.30"></a>
+<span class="sourceLineNo">031</span> * beginning of {@link ProcedureWALFormatReader}).<a name="line.31"></a>
+<span class="sourceLineNo">032</span> *<a name="line.32"></a>
+<span class="sourceLineNo">033</span> * &lt;pre&gt;<a name="line.33"></a>
+<span class="sourceLineNo">034</span> *      procedureMap = | A |   | E |   | C |   |   |   |   | G |   |   |<a name="line.34"></a>
+<span class="sourceLineNo">035</span> *                       D               B<a name="line.35"></a>
+<span class="sourceLineNo">036</span> *      replayOrderHead = C &lt;-&gt; B &lt;-&gt; E &lt;-&gt; D &lt;-&gt; A &lt;-&gt; G<a name="line.36"></a>
+<span class="sourceLineNo">037</span> *<a name="line.37"></a>
+<span class="sourceLineNo">038</span> *  We also have a lazy grouping by "root procedure", and a list of<a name="line.38"></a>
+<span class="sourceLineNo">039</span> *  unlinked procedures. If after reading all the WALs we have unlinked<a name="line.39"></a>
+<span class="sourceLineNo">040</span> *  procedures it means that we had a missing WAL or a corruption.<a name="line.40"></a>
+<span class="sourceLineNo">041</span> *      rootHead = A &lt;-&gt; D &lt;-&gt; G<a name="line.41"></a>
+<span class="sourceLineNo">042</span> *                 B     E<a name="line.42"></a>
+<span class="sourceLineNo">043</span> *                 C<a name="line.43"></a>
+<span class="sourceLineNo">044</span> *      unlinkFromLinkList = None<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * &lt;/pre&gt;<a name="line.45"></a>
+<span class="sourceLineNo">046</span> */<a name="line.46"></a>
+<span class="sourceLineNo">047</span>class WALProcedureMap {<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private static final Logger LOG = LoggerFactory.getLogger(WALProcedureMap.class);<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  private static class Entry {<a name="line.51"></a>
+<span class="sourceLineNo">052</span>    // For bucketed linked lists in hash-table.<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    private Entry hashNext;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    // child head<a name="line.54"></a>
+<span class="sourceLineNo">055</span>    private Entry childHead;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    // double-link for rootHead or childHead<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    private Entry linkNext;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    private Entry linkPrev;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    // replay double-linked-list<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    private Entry replayNext;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    private Entry replayPrev;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    // procedure-infos<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    private Procedure&lt;?&gt; procedure;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    private ProcedureProtos.Procedure proto;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    private boolean ready = false;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>    public Entry(Entry hashNext) {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>      this.hashNext = hashNext;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    }<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>    public long getProcId() {<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      return proto.getProcId();<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    }<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>    public long getParentId() {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      return proto.getParentId();<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    }<a name="line.77"></a>
+<span class="sourceLineNo">078</span><a name="line.78"></a>
+<span class="sourceLineNo">079</span>    public boolean hasParent() {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      return proto.hasParentId();<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    }<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>    public boolean isReady() {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      return ready;<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>    public boolean isFinished() {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      if (!hasParent()) {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>        // we only consider 'root' procedures. because for the user 'finished'<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        // means when everything up to the 'root' is finished.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        switch (proto.getState()) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>          case ROLLEDBACK:<a name="line.92"></a>
+<span class="sourceLineNo">093</span>          case SUCCESS:<a name="line.93"></a>
+<span class="sourceLineNo">094</span>            return true;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>          default:<a name="line.95"></a>
+<span class="sourceLineNo">096</span>            break;<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>      return false;<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 Procedure&lt;?&gt; convert() throws IOException {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      if (procedure == null) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>        procedure = ProcedureUtil.convertToProcedure(proto);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      return procedure;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    }<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>    @Override<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    public String toString() {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      final StringBuilder sb = new StringBuilder();<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      sb.append("Entry(");<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      sb.append(getProcId());<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      sb.append(", parentId=");<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      sb.append(getParentId());<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      sb.append(", class=");<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      sb.append(proto.getClassName());<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      sb.append(")");<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      return sb.toString();<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><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private static class EntryIterator implements ProcedureIterator {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    private final Entry replayHead;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    private Entry current;<a name="line.125"></a>
+<span class="sourceLineNo">126</span><a name="line.126"></a>
+<span class="sourceLineNo">127</span>    public EntryIterator(Entry replayHead) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      this.replayHead = replayHead;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      this.current = replayHead;<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>    @Override<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    public void reset() {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      this.current = replayHead;<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>    @Override<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    public boolean hasNext() {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      return current != null;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>    @Override<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    public boolean isNextFinished() {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      return current != null &amp;&amp; current.isFinished();<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>    @Override<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    public void skipNext() {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      current = current.replayNext;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    }<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>    @Override<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    public Procedure&lt;?&gt; next() throws IOException {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      try {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>        return current.convert();<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      } finally {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>        current = current.replayNext;<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>  }<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>  // procedure hash table<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  private Entry[] procedureMap;<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>  // replay-order double-linked-list<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  private Entry replayOrderHead;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  private Entry replayOrderTail;<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>  // root linked-list<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  private Entry rootHead;<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>  // pending unlinked children (root not present yet)<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  private Entry childUnlinkedHead;<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>  // Track ProcId range<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  private long minModifiedProcId = Long.MAX_VALUE;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  private long maxModifiedProcId = Long.MIN_VALUE;<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>  public WALProcedureMap(int size) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    procedureMap = new Entry[size];<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    replayOrderHead = null;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    replayOrderTail = null;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    rootHead = null;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    childUnlinkedHead = null;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>  public void add(ProcedureProtos.Procedure procProto) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    trackProcIds(procProto.getProcId());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    Entry entry = addToMap(procProto.getProcId(), procProto.hasParentId());<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    boolean newEntry = entry.proto == null;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    // We have seen procedure WALs where the entries are out of order; see HBASE-18152.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    // To compensate, only replace the Entry procedure if for sure this new procedure<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    // is indeed an entry that came later.<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    // TODO: Fix the writing of procedure info so it does not violate basic expectation, that WALs<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    // contain procedure changes goingfrom start to finish in sequence.<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    if (newEntry || isIncreasing(entry.proto, procProto)) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      entry.proto = procProto;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    }<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    addToReplayList(entry);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    if (newEntry) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      if (procProto.hasParentId()) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        childUnlinkedHead = addToLinkList(entry, childUnlinkedHead);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      } else {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        rootHead = addToLinkList(entry, rootHead);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      }<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  }<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>   * @return True if this new procedure is 'richer' than the current one else false and we log this<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   *         incidence where it appears that the WAL has older entries appended after newer ones.<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   *         See HBASE-18152.<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   */<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  private static boolean isIncreasing(ProcedureProtos.Procedure current,<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      ProcedureProtos.Procedure candidate) {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    // Check that the procedures we see are 'increasing'. We used to compare<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    // procedure id first and then update time but it can legitimately go backwards if the<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    // procedure is failed or rolled back so that was unreliable. Was going to compare<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    // state but lets see if comparing update time enough (unfortunately this issue only<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    // seen under load...)<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    boolean increasing = current.getLastUpdate() &lt;= candidate.getLastUpdate();<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    if (!increasing) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      LOG.warn("NOT INCREASING! current=" + current + ", candidate=" + candidate);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    }<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    return increasing;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  }<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span>  public boolean remove(long procId) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    trackProcIds(procId);<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    Entry entry = removeFromMap(procId);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    if (entry != null) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      unlinkFromReplayList(entry);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      unlinkFromLinkList(entry);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      return true;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    }<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    return false;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  }<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>  private void trackProcIds(long procId) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    minModifiedProcId = Math.min(minModifiedProcId, procId);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    maxModifiedProcId = Math.max(maxModifiedProcId, procId);<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>  public long getMinModifiedProcId() {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    return minModifiedProcId;<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>  public long getMaxModifiedProcId() {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    return maxModifiedProcId;<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>  public boolean contains(long procId) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    return getProcedure(procId) != null;<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>  public boolean isEmpty() {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    return replayOrderHead == null;<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>  public void clear() {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      procedureMap[i] = null;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    replayOrderHead = null;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    replayOrderTail = null;<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    rootHead = null;<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    childUnlinkedHead = null;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    minModifiedProcId = Long.MAX_VALUE;<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    maxModifiedProcId = Long.MIN_VALUE;<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>  /*<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   * Merges two WalProcedureMap, the target is the "global" map, the source is the "local" map. -<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   * The entries in the hashtables are guaranteed to be unique. On replay we don't load procedures<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * that already exist in the "global" map (the one we are merging the "local" in to). - The<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * replayOrderList of the "local" nao will be appended to the "global" map replay list. - The<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   * "local" map will be cleared at the end of the operation.<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   */<a name="line.278"></a>
+<span class="sourceLineNo">279</span>  public void mergeTail(WALProcedureMap other) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    for (Entry p = other.replayOrderHead; p != null; p = p.replayNext) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      int slotIndex = getMapSlot(p.getProcId());<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      p.hashNext = procedureMap[slotIndex];<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      procedureMap[slotIndex] = p;<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>    if (replayOrderHead == null) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      replayOrderHead = other.replayOrderHead;<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      replayOrderTail = other.replayOrderTail;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      rootHead = other.rootHead;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      childUnlinkedHead = other.childUnlinkedHead;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    } else {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      // append replay list<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      assert replayOrderTail.replayNext == null;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      assert other.replayOrderHead.replayPrev == null;<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      replayOrderTail.replayNext = other.replayOrderHead;<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      other.replayOrderHead.replayPrev = replayOrderTail;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      replayOrderTail = other.replayOrderTail;<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>      // merge rootHead<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      if (rootHead == null) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        rootHead = other.rootHead;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      } else if (other.rootHead != null) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>        Entry otherTail = findLinkListTail(other.rootHead);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>        otherTail.linkNext = rootHead;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        rootHead.linkPrev = otherTail;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        rootHead = other.rootHead;<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>      // merge childUnlinkedHead<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      if (childUnlinkedHead == null) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        childUnlinkedHead = other.childUnlinkedHead;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      } else if (other.childUnlinkedHead != null) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        Entry otherTail = findLinkListTail(other.childUnlinkedHead);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        otherTail.linkNext = childUnlinkedHead;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        childUnlinkedHead.linkPrev = otherTail;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        childUnlinkedHead = other.childUnlinkedHead;<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>    maxModifiedProcId = Math.max(maxModifiedProcId, other.maxModifiedProcId);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    minModifiedProcId = Math.max(minModifiedProcId, other.minModifiedProcId);<a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>    other.clear();<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>  /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * Returns an EntryIterator with the list of procedures ready to be added to the executor. A<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   * Procedure is ready if its children and parent are ready.<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   */<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  public ProcedureIterator fetchReady() {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    buildGraph();<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    Entry readyHead = null;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    Entry readyTail = null;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    Entry p = replayOrderHead;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    while (p != null) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      Entry next = p.replayNext;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      if (p.isReady()) {<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        unlinkFromReplayList(p);<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        if (readyTail != null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>          readyTail.replayNext = p;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>          p.replayPrev = readyTail;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        } else {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>          p.replayPrev = null;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>          readyHead = p;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        readyTail = p;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        p.replayNext = null;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      }<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      p = next;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    // we need the hash-table lookups for parents, so this must be done<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    // out of the loop where we check isReadyToRun()<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    for (p = readyHead; p != null; p = p.replayNext) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      removeFromMap(p.getProcId());<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      unlinkFromLinkList(p);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    return readyHead != null ? new EntryIterator(readyHead) : null;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>  /**<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * Drain this map and return all procedures in it.<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  public ProcedureIterator fetchAll() {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    Entry head = replayOrderHead;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    for (Entry p = head; p != null; p = p.replayNext) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      removeFromMap(p.getProcId());<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      assert procedureMap[i] == null : "map not empty i=" + i;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    replayOrderHead = null;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    replayOrderTail = null;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    childUnlinkedHead = null;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    rootHead = null;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    return head != null ? new EntryIterator(head) : null;<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>  private void buildGraph() {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    Entry p = childUnlinkedHead;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    while (p != null) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      Entry next = p.linkNext;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      Entry rootProc = getRootProcedure(p);<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      if (rootProc != null) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>        rootProc.childHead = addToLinkList(p, rootProc.childHead);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      }<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      p = next;<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>    for (p = rootHead; p != null; p = p.linkNext) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      checkReadyToRun(p);<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    }<a name="line.391"></a>
+<span class="sourceLineNo">392</span>  }<a name="line.392"></a>
+<span class="sourceLineNo">393</span><a name="line.393"></a>
+<span class="sourceLineNo">394</span>  private Entry getRootProcedure(Entry entry) {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    while (entry != null &amp;&amp; entry.hasParent()) {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      entry = getProcedure(entry.getParentId());<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    }<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    return entry;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span>  /**<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   * (see the comprehensive explanation in the beginning of {@link ProcedureWALFormatReader}). A<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * Procedure is ready when parent and children are ready. "ready" means that we all the<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   * information that we need in-memory.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * &lt;p/&gt;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   * Example-1:&lt;br/&gt;<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   * We have two WALs, we start reading from the newest (wal-2)<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   *<a name="line.408"></a>
+<span class="sourceLineNo">409</span>   * &lt;pre&gt;<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   *    wal-2 | C B |<a name="line.410"></a>
+<span class="sourceLineNo">411</span>   *    wal-1 | A B C |<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * &lt;/pre&gt;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   *<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   * If C and B don't depend on A (A is not the parent), we can start them before reading wal-1. If<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * B is the only one with parent A we can start C. We have to read one more WAL before being able<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   * to start B.<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * &lt;p/&gt;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * How do we know with the only information in B that we are not ready.<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   * &lt;ul&gt;<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * &lt;li&gt;easy case, the parent is missing from the global map&lt;/li&gt;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * &lt;li&gt;more complex case we look at the Stack IDs.&lt;/li&gt;<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * &lt;/ul&gt;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * The Stack-IDs are added to the procedure order as an incremental index tracking how many times<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * that procedure was executed, which is equivalent to the number of times we wrote the procedure<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   * to the WAL. &lt;br/&gt;<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * In the example above:<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   *<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * &lt;pre&gt;<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   *   wal-2: B has stackId = [1, 2]<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   *   wal-1: B has stackId = [1]<a name="line.430"></a>
+<span class="sourceLineNo">431</span>   *   wal-1: A has stackId = [0]<a name="line.431"></a>
+<span class="sourceLineNo">432</span>   * &lt;/pre&gt;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>   *<a name="line.433"></a>
+<span class="sourceLineNo">434</span>   * Since we know that the Stack-IDs are incremental for a Procedure, we notice that there is a gap<a name="line.434"></a>
+<span class="sourceLineNo">435</span>   * in the stackIds of B, so something was executed before.<a name="line.435"></a>
+<span class="sourceLineNo">436</span>   * &lt;p/&gt;<a name="line.436"></a>
+<span class="sourceLineNo">437</span>   * To identify when a Procedure is ready we do the sum of the stackIds of the procedure and the<a name="line.437"></a>
+<span class="sourceLineNo">438</span>   * parent. if the stackIdSum is equal to the sum of {1..maxStackId} then everything we need is<a name="line.438"></a>
+<span class="sourceLineNo">439</span>   * available.<a name="line.439"></a>
+<span class="sourceLineNo">440</span>   * &lt;p/&gt;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>   * Example-2<a name="line.441"></a>
+<span class="sourceLineNo">442</span>   *<a name="line.442"></a>
+<span class="sourceLineNo">443</span>   * &lt;pre&gt;<a name="line.443"></a>
+<span class="sourceLineNo">444</span>   *    wal-2 | A |              A stackIds = [0, 2]<a name="line.444"></a>
+<span class="sourceLineNo">445</span>   *    wal-1 | A B |            B stackIds = [1]<a name="line.445"></a>
+<span class="sourceLineNo">446</span>   * &lt;/pre&gt;<a name="line.446"></a>
+<span class="sourceLineNo">447</span>   *<a name="line.447"></a>
+<span class="sourceLineNo">448</span>   * There is a gap between A stackIds so something was executed in between.<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   */<a name="line.449"></a>
+<span class="sourceLineNo">450</span>  private boolean checkReadyToRun(Entry rootEntry) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    assert !rootEntry.hasParent() : "expected root procedure, got " + rootEntry;<a name="line.451"></a>
+<span class="sourceLineNo">452</span><a name="line.452"></a>
+<span class="sourceLineNo">453</span>    if (rootEntry.isFinished()) {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      // If the root procedure is finished, sub-procedures should be gone<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      if (rootEntry.childHead != null) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>        LOG.error("unexpected active children for root-procedure: {}", rootEntry);<a name="line.456"></a>
+<span class="sourceLineNo">457</span>        for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>          LOG.error("unexpected active children: {}", p);<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>      assert rootEntry.childHead == null : "unexpected children on root completion. " + rootEntry;<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      rootEntry.ready = true;<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      return true;<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>    int stackIdSum = 0;<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    int maxStackId = 0;<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    for (int i = 0; i &lt; rootEntry.proto.getStackIdCount(); ++i) {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      int stackId = 1 + rootEntry.proto.getStackId(i);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      maxStackId = Math.max(maxStackId, stackId);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      stackIdSum += stackId;<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      LOG.trace("stackId={} stackIdSum={} maxStackid={} {}", stackId, stackIdSum, maxStackId,<a name="line.473"></a>
+<span class="sourceLineNo">474</span>        rootEntry);<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>    for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.477"></a>
+<span class="sourceLineNo">478</span>      for (int i = 0; i &lt; p.proto.getStackIdCount(); ++i) {<a name="line.478"></a>
+<span class="sourceLineNo">479</span>        int stackId = 1 + p.proto.getStackId(i);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>        maxStackId = Math.max(maxStackId, stackId);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>        stackIdSum += stackId;<a name="line.481"></a>
+<span class="sourceLineNo">482</span>        LOG.trace("stackId={} stackIdSum={} maxStackid={} {}", stackId, stackIdSum, maxStackId, p);<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>    // The cmpStackIdSum is this formula for finding the sum of a series of numbers:<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    // http://www.wikihow.com/Sum-the-Integers-from-1-to-N#/Image:Sum-the-Integers-from-1-to-N-Step-2-Version-3.jpg<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    final int cmpStackIdSum = (maxStackId * (maxStackId + 1) / 2);<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    if (cmpStackIdSum == stackIdSum) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      rootEntry.ready = true;<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        p.ready = true;<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      }<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      return true;<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    }<a name="line.494"></a>
+<span class="sourceLineNo">495</span>    return false;<a name="line.495"></a>
+<span class="sourceLineNo">496</span>  }<a name="line.496"></a>
+<span class="sourceLineNo">497</span><a name="line.497"></a>
+<span class="sourceLineNo">498</span>  private void unlinkFromReplayList(Entry entry) {<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    if (replayOrderHead == entry) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>      replayOrderHead = entry.replayNext;<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    }<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    if (replayOrderTail == entry) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      replayOrderTail = entry.replayPrev;<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    if (entry.replayPrev != null) {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      entry.replayPrev.replayNext = entry.replayNext;<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    }<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    if (entry.replayNext != null) {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      entry.replayNext.replayPrev = entry.replayPrev;<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><a name="line.512"></a>
+<span class="sourceLineNo">513</span>  private void addToReplayList(final Entry entry) {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    unlinkFromReplayList(entry);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    entry.replayNext = replayOrderHead;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    entry.replayPrev = null;<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    if (replayOrderHead != null) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      replayOrderHead.replayPrev = entry;<a name="line.518"></a>
+<span class="sourceLineNo">519</span>    } else {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      replayOrderTail = entry;<a name="line.520"></a>
+<span class="sourceLineNo">521</span>    }<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    replayOrderHead = entry;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>  }<a name="line.523"></a>
+<span class="sourceLineNo">524</span><a name="line.524"></a>
+<span class="sourceLineNo">525</span>  private void unlinkFromLinkList(Entry entry) {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    if (entry == rootHead) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      rootHead = entry.linkNext;<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    } else if (entry == childUnlinkedHead) {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>      childUnlinkedHead = entry.linkNext;<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    if (entry.linkPrev != null) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      entry.linkPrev.linkNext = entry.linkNext;<a name="line.532"></a>
+<span class="sourceLineNo">533</span>    }<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    if (entry.linkNext != null) {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>      entry.linkNext.linkPrev = entry.linkPrev;<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
+<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
+<span class="sourceLineNo">538</span><a name="line.538"></a>
+<span class="sourceLineNo">539</span>  private Entry addToLinkList(Entry entry, Entry linkHead) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    unlinkFromLinkList(entry);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    entry.linkNext = linkHead;<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    entry.linkPrev = null;<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    if (linkHead != null) {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      linkHead.linkPrev = entry;<a name="line.544"></a>
+<span class="sourceLineNo">545</span>    }<a name="line.545"></a>
+<span class="sourceLineNo">546</span>    return entry;<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">549</span>  private Entry findLinkListTail(Entry linkHead) {<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    Entry tail = linkHead;<a name="line.550"></a>
+<span class="sourceLineNo">551</span>    while (tail.linkNext != null) {<a name="line.551"></a>
+<span class="sourceLineNo">552</span>      tail = tail.linkNext;<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    return tail;<a name="line.554"></a>
+<span class="sourceLineNo">555</span>  }<a name="line.555"></a>
+<span class="sourceLineNo">556</span><a name="line.556"></a>
+<span class="sourceLineNo">557</span>  private Entry addToMap(long procId, boolean hasParent) {<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    int slotIndex = getMapSlot(procId);<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    Entry entry = getProcedure(slotIndex, procId);<a name="line.559"></a>
+<span class="sourceLineNo">560</span>    if (entry != null) {<a name="line.560"></a>
+<span class="sourceLineNo">561</span>      return entry;<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>    entry = new Entry(procedureMap[slotIndex]);<a name="line.564"></a>
+<span class="sourceLineNo">565</span>    procedureMap[slotIndex] = entry;<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    return entry;<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>  private Entry removeFromMap(final long procId) {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    int slotIndex = getMapSlot(procId);<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    Entry prev = null;<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    Entry entry = procedureMap[slotIndex];<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    while (entry != null) {<a name="line.573"></a>
+<span class="sourceLineNo">574</span>      if (procId == entry.getProcId()) {<a name="line.574"></a>
+<span class="sourceLineNo">575</span>        if (prev != null) {<a name="line.575"></a>
+<span class="sourceLineNo">576</span>          prev.hashNext = entry.hashNext;<a name="line.576"></a>
+<span class="sourceLineNo">577</span>        } else {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>          procedureMap[slotIndex] = entry.hashNext;<a name="line.578"></a>
+<span class="sourceLineNo">579</span>        }<a name="line.579"></a>
+<span class="sourceLineNo">580</span>        entry.hashNext = null;<a name="line.580"></a>
+<span class="sourceLineNo">581</span>        return entry;<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      }<a name="line.582"></a>
+<span class="sourceLineNo">583</span>      prev = entry;<a name="line.583"></a>
+<span class="sourceLineNo">584</span>      entry = entry.hashNext;<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    }<a name="line.585"></a>
+<span class="sourceLineNo">586</span>    return null;<a name="line.586"></a>
+<span class="sourceLineNo">587</span>  }<a name="line.587"></a>
+<span class="sourceLineNo">588</span><a name="line.588"></a>
+<span class="sourceLineNo">589</span>  private Entry getProcedure(long procId) {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    return getProcedure(getMapSlot(procId), procId);<a name="line.590"></a>
+<span class="sourceLineNo">591</span>  }<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span>  private Entry getProcedure(int slotIndex, long procId) {<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    Entry entry = procedureMap[slotIndex];<a name="line.594"></a>
+<span class="sourceLineNo">595</span>    while (entry != null) {<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      if (procId == entry.getProcId()) {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>        return entry;<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      }<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      entry = entry.hashNext;<a name="line.599"></a>
+<span class="sourceLineNo">600</span>    }<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    return null;<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>  private int getMapSlot(long procId) {<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    return (int) (Procedure.getProcIdHashCode(procId) % procedureMap.length);<a name="line.605"></a>
+<span class="sourceLineNo">606</span>  }<a name="line.606"></a>
+<span class="sourceLineNo">607</span>}<a name="line.607"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[29/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html
index 2725fa1..ff29160 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html
@@ -89,142 +89,143 @@
 <span class="sourceLineNo">081</span>     * @throws IOException if there was an error fetching/deserializing the procedure<a name="line.81"></a>
 <span class="sourceLineNo">082</span>     * @return the next procedure in the iteration.<a name="line.82"></a>
 <span class="sourceLineNo">083</span>     */<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    Procedure next() throws IOException;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  }<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  /**<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * Interface passed to the ProcedureStore.load() method to handle the store-load events.<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   */<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  public interface ProcedureLoader {<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    /**<a name="line.91"></a>
-<span class="sourceLineNo">092</span>     * Called by ProcedureStore.load() to notify about the maximum proc-id in the store.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>     * @param maxProcId the highest proc-id in the store<a name="line.93"></a>
-<span class="sourceLineNo">094</span>     */<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    void setMaxProcId(long maxProcId);<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>     * Called by the ProcedureStore.load() every time a set of procedures are ready to be executed.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>     * The ProcedureIterator passed to the method, has the procedure sorted in replay-order.<a name="line.99"></a>
-<span class="sourceLineNo">100</span>     * @param procIter iterator over the procedures ready to be added to the executor.<a name="line.100"></a>
-<span class="sourceLineNo">101</span>     */<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    void load(ProcedureIterator procIter) throws IOException;<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>    /**<a name="line.104"></a>
-<span class="sourceLineNo">105</span>     * Called by the ProcedureStore.load() in case we have procedures not-ready to be added to<a name="line.105"></a>
-<span class="sourceLineNo">106</span>     * the executor, which probably means they are corrupted since some information/link is missing.<a name="line.106"></a>
-<span class="sourceLineNo">107</span>     * @param procIter iterator over the procedures not ready to be added to the executor, corrupted<a name="line.107"></a>
-<span class="sourceLineNo">108</span>     */<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    void handleCorrupted(ProcedureIterator procIter) throws IOException;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  }<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  /**<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * Add the listener to the notification list.<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * @param listener The AssignmentListener to register<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   */<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  void registerListener(ProcedureStoreListener listener);<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>   * Remove the listener from the notification list.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @param listener The AssignmentListener to unregister<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * @return true if the listner was in the list and it was removed, otherwise false.<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   */<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  boolean unregisterListener(ProcedureStoreListener listener);<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>  /**<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * Start/Open the procedure store<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * @param numThreads<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   */<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  void start(int numThreads) throws IOException;<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>   * Stop/Close the procedure store<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   * @param abort true if the stop is an abort<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   */<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  void stop(boolean abort);<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  /**<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   * @return true if the store is running, otherwise false.<a name="line.138"></a>
-<span class="sourceLineNo">139</span>   */<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  boolean isRunning();<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>  /**<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * @return the number of threads/slots passed to start()<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   */<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  int getNumThreads();<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>   * Set the number of procedure running.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * This can be used, for example, by the store to know how long to wait before a sync.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * @return how many procedures are running (may not be same as &lt;code&gt;count&lt;/code&gt;).<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   */<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  int setRunningProcedureCount(int count);<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>   * Acquire the lease for the procedure store.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  void recoverLease() throws IOException;<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>   * Load the Procedures in the store.<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * @param loader the ProcedureLoader that will handle the store-load events<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   */<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  void load(ProcedureLoader loader) throws IOException;<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>   * When a procedure is submitted to the executor insert(proc, null) will be called.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   * 'proc' has a 'RUNNABLE' state and the initial information required to start up.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   *<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   * When a procedure is executed and it returns children insert(proc, subprocs) will be called.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * 'proc' has a 'WAITING' state and an update state.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * 'subprocs' are the children in 'RUNNABLE' state with the initial information.<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   *<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * @param proc the procedure to serialize and write to the store.<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @param subprocs the newly created child of the proc.<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   */<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  void insert(Procedure proc, Procedure[] subprocs);<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>   * Serialize a set of new procedures.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * These procedures are freshly submitted to the executor and each procedure<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * has a 'RUNNABLE' state and the initial information required to start up.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   *<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   * @param procs the procedures to serialize and write to the store.<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   */<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  void insert(Procedure[] procs);<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>   * The specified procedure was executed,<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   * and the new state should be written to the store.<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * @param proc the procedure to serialize and write to the store.<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   */<a name="line.191"></a>
-<span class="sourceLineNo">192</span>  void update(Procedure proc);<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>   * The specified procId was removed from the executor,<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   * due to completion, abort or failure.<a name="line.196"></a>
-<span class="sourceLineNo">197</span>   * The store implementor should remove all the information about the specified procId.<a name="line.197"></a>
-<span class="sourceLineNo">198</span>   * @param procId the ID of the procedure to remove.<a name="line.198"></a>
-<span class="sourceLineNo">199</span>   */<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  void delete(long procId);<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  /**<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * The parent procedure completed.<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * Update the state and mark all the child deleted.<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * @param parentProc the parent procedure to serialize and write to the store.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * @param subProcIds the IDs of the sub-procedure to remove.<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   */<a name="line.207"></a>
-<span class="sourceLineNo">208</span>  void delete(Procedure parentProc, long[] subProcIds);<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>  /**<a name="line.210"></a>
-<span class="sourceLineNo">211</span>   * The specified procIds were removed from the executor,<a name="line.211"></a>
-<span class="sourceLineNo">212</span>   * due to completion, abort or failure.<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * The store implementor should remove all the information about the specified procIds.<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * @param procIds the IDs of the procedures to remove.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   * @param offset the array offset from where to start to delete<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * @param count the number of IDs to delete<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   */<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  void delete(long[] procIds, int offset, int count);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>}<a name="line.219"></a>
+<span class="sourceLineNo">084</span>    @SuppressWarnings("rawtypes")<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    Procedure next() throws IOException;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Interface passed to the ProcedureStore.load() method to handle the store-load events.<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   */<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public interface ProcedureLoader {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    /**<a name="line.92"></a>
+<span class="sourceLineNo">093</span>     * Called by ProcedureStore.load() to notify about the maximum proc-id in the store.<a name="line.93"></a>
+<span class="sourceLineNo">094</span>     * @param maxProcId the highest proc-id in the store<a name="line.94"></a>
+<span class="sourceLineNo">095</span>     */<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    void setMaxProcId(long maxProcId);<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>     * Called by the ProcedureStore.load() every time a set of procedures are ready to be executed.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>     * The ProcedureIterator passed to the method, has the procedure sorted in replay-order.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>     * @param procIter iterator over the procedures ready to be added to the executor.<a name="line.101"></a>
+<span class="sourceLineNo">102</span>     */<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    void load(ProcedureIterator procIter) throws IOException;<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>     * Called by the ProcedureStore.load() in case we have procedures not-ready to be added to<a name="line.106"></a>
+<span class="sourceLineNo">107</span>     * the executor, which probably means they are corrupted since some information/link is missing.<a name="line.107"></a>
+<span class="sourceLineNo">108</span>     * @param procIter iterator over the procedures not ready to be added to the executor, corrupted<a name="line.108"></a>
+<span class="sourceLineNo">109</span>     */<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    void handleCorrupted(ProcedureIterator procIter) throws IOException;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>  /**<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * Add the listener to the notification list.<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * @param listener The AssignmentListener to register<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   */<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  void registerListener(ProcedureStoreListener listener);<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>   * Remove the listener from the notification list.<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * @param listener The AssignmentListener to unregister<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * @return true if the listner was in the list and it was removed, otherwise false.<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   */<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  boolean unregisterListener(ProcedureStoreListener listener);<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>   * Start/Open the procedure store<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * @param numThreads<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   */<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  void start(int numThreads) throws IOException;<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>   * Stop/Close the procedure store<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   * @param abort true if the stop is an abort<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   */<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  void stop(boolean abort);<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  /**<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   * @return true if the store is running, otherwise false.<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   */<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  boolean isRunning();<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>   * @return the number of threads/slots passed to start()<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   */<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  int getNumThreads();<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>   * Set the number of procedure running.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   * This can be used, for example, by the store to know how long to wait before a sync.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * @return how many procedures are running (may not be same as &lt;code&gt;count&lt;/code&gt;).<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   */<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  int setRunningProcedureCount(int count);<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * Acquire the lease for the procedure store.<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  void recoverLease() throws IOException;<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>   * Load the Procedures in the store.<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * @param loader the ProcedureLoader that will handle the store-load events<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   */<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  void load(ProcedureLoader loader) throws IOException;<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>   * When a procedure is submitted to the executor insert(proc, null) will be called.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * 'proc' has a 'RUNNABLE' state and the initial information required to start up.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   *<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   * When a procedure is executed and it returns children insert(proc, subprocs) will be called.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * 'proc' has a 'WAITING' state and an update state.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * 'subprocs' are the children in 'RUNNABLE' state with the initial information.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   *<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   * @param proc the procedure to serialize and write to the store.<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * @param subprocs the newly created child of the proc.<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  void insert(Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs);<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>   * Serialize a set of new procedures.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * These procedures are freshly submitted to the executor and each procedure<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * has a 'RUNNABLE' state and the initial information required to start up.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   *<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * @param procs the procedures to serialize and write to the store.<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   */<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  void insert(Procedure&lt;?&gt;[] procs);<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>   * The specified procedure was executed,<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * and the new state should be written to the store.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * @param proc the procedure to serialize and write to the store.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  void update(Procedure&lt;?&gt; proc);<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>   * The specified procId was removed from the executor,<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * due to completion, abort or failure.<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * The store implementor should remove all the information about the specified procId.<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   * @param procId the ID of the procedure to remove.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   */<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  void delete(long procId);<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>  /**<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   * The parent procedure completed.<a name="line.204"></a>
+<span class="sourceLineNo">205</span>   * Update the state and mark all the child deleted.<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   * @param parentProc the parent procedure to serialize and write to the store.<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   * @param subProcIds the IDs of the sub-procedure to remove.<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  void delete(Procedure&lt;?&gt; parentProc, long[] subProcIds);<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>   * The specified procIds were removed from the executor,<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   * due to completion, abort or failure.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * The store implementor should remove all the information about the specified procIds.<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * @param procIds the IDs of the procedures to remove.<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * @param offset the array offset from where to start to delete<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   * @param count the number of IDs to delete<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   */<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  void delete(long[] procIds, int offset, int count);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>}<a name="line.220"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html
index 2725fa1..ff29160 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html
@@ -89,142 +89,143 @@
 <span class="sourceLineNo">081</span>     * @throws IOException if there was an error fetching/deserializing the procedure<a name="line.81"></a>
 <span class="sourceLineNo">082</span>     * @return the next procedure in the iteration.<a name="line.82"></a>
 <span class="sourceLineNo">083</span>     */<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    Procedure next() throws IOException;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  }<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  /**<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * Interface passed to the ProcedureStore.load() method to handle the store-load events.<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   */<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  public interface ProcedureLoader {<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    /**<a name="line.91"></a>
-<span class="sourceLineNo">092</span>     * Called by ProcedureStore.load() to notify about the maximum proc-id in the store.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>     * @param maxProcId the highest proc-id in the store<a name="line.93"></a>
-<span class="sourceLineNo">094</span>     */<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    void setMaxProcId(long maxProcId);<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>     * Called by the ProcedureStore.load() every time a set of procedures are ready to be executed.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>     * The ProcedureIterator passed to the method, has the procedure sorted in replay-order.<a name="line.99"></a>
-<span class="sourceLineNo">100</span>     * @param procIter iterator over the procedures ready to be added to the executor.<a name="line.100"></a>
-<span class="sourceLineNo">101</span>     */<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    void load(ProcedureIterator procIter) throws IOException;<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>    /**<a name="line.104"></a>
-<span class="sourceLineNo">105</span>     * Called by the ProcedureStore.load() in case we have procedures not-ready to be added to<a name="line.105"></a>
-<span class="sourceLineNo">106</span>     * the executor, which probably means they are corrupted since some information/link is missing.<a name="line.106"></a>
-<span class="sourceLineNo">107</span>     * @param procIter iterator over the procedures not ready to be added to the executor, corrupted<a name="line.107"></a>
-<span class="sourceLineNo">108</span>     */<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    void handleCorrupted(ProcedureIterator procIter) throws IOException;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  }<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  /**<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * Add the listener to the notification list.<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * @param listener The AssignmentListener to register<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   */<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  void registerListener(ProcedureStoreListener listener);<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>   * Remove the listener from the notification list.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @param listener The AssignmentListener to unregister<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * @return true if the listner was in the list and it was removed, otherwise false.<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   */<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  boolean unregisterListener(ProcedureStoreListener listener);<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>  /**<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * Start/Open the procedure store<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * @param numThreads<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   */<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  void start(int numThreads) throws IOException;<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>   * Stop/Close the procedure store<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   * @param abort true if the stop is an abort<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   */<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  void stop(boolean abort);<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  /**<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   * @return true if the store is running, otherwise false.<a name="line.138"></a>
-<span class="sourceLineNo">139</span>   */<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  boolean isRunning();<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>  /**<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * @return the number of threads/slots passed to start()<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   */<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  int getNumThreads();<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>   * Set the number of procedure running.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * This can be used, for example, by the store to know how long to wait before a sync.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * @return how many procedures are running (may not be same as &lt;code&gt;count&lt;/code&gt;).<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   */<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  int setRunningProcedureCount(int count);<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>   * Acquire the lease for the procedure store.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  void recoverLease() throws IOException;<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>   * Load the Procedures in the store.<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * @param loader the ProcedureLoader that will handle the store-load events<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   */<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  void load(ProcedureLoader loader) throws IOException;<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>   * When a procedure is submitted to the executor insert(proc, null) will be called.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   * 'proc' has a 'RUNNABLE' state and the initial information required to start up.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   *<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   * When a procedure is executed and it returns children insert(proc, subprocs) will be called.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * 'proc' has a 'WAITING' state and an update state.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * 'subprocs' are the children in 'RUNNABLE' state with the initial information.<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   *<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * @param proc the procedure to serialize and write to the store.<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @param subprocs the newly created child of the proc.<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   */<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  void insert(Procedure proc, Procedure[] subprocs);<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>   * Serialize a set of new procedures.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * These procedures are freshly submitted to the executor and each procedure<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * has a 'RUNNABLE' state and the initial information required to start up.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   *<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   * @param procs the procedures to serialize and write to the store.<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   */<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  void insert(Procedure[] procs);<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>   * The specified procedure was executed,<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   * and the new state should be written to the store.<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * @param proc the procedure to serialize and write to the store.<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   */<a name="line.191"></a>
-<span class="sourceLineNo">192</span>  void update(Procedure proc);<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>   * The specified procId was removed from the executor,<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   * due to completion, abort or failure.<a name="line.196"></a>
-<span class="sourceLineNo">197</span>   * The store implementor should remove all the information about the specified procId.<a name="line.197"></a>
-<span class="sourceLineNo">198</span>   * @param procId the ID of the procedure to remove.<a name="line.198"></a>
-<span class="sourceLineNo">199</span>   */<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  void delete(long procId);<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  /**<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * The parent procedure completed.<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * Update the state and mark all the child deleted.<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * @param parentProc the parent procedure to serialize and write to the store.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * @param subProcIds the IDs of the sub-procedure to remove.<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   */<a name="line.207"></a>
-<span class="sourceLineNo">208</span>  void delete(Procedure parentProc, long[] subProcIds);<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>  /**<a name="line.210"></a>
-<span class="sourceLineNo">211</span>   * The specified procIds were removed from the executor,<a name="line.211"></a>
-<span class="sourceLineNo">212</span>   * due to completion, abort or failure.<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * The store implementor should remove all the information about the specified procIds.<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * @param procIds the IDs of the procedures to remove.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   * @param offset the array offset from where to start to delete<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * @param count the number of IDs to delete<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   */<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  void delete(long[] procIds, int offset, int count);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>}<a name="line.219"></a>
+<span class="sourceLineNo">084</span>    @SuppressWarnings("rawtypes")<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    Procedure next() throws IOException;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Interface passed to the ProcedureStore.load() method to handle the store-load events.<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   */<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public interface ProcedureLoader {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    /**<a name="line.92"></a>
+<span class="sourceLineNo">093</span>     * Called by ProcedureStore.load() to notify about the maximum proc-id in the store.<a name="line.93"></a>
+<span class="sourceLineNo">094</span>     * @param maxProcId the highest proc-id in the store<a name="line.94"></a>
+<span class="sourceLineNo">095</span>     */<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    void setMaxProcId(long maxProcId);<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>     * Called by the ProcedureStore.load() every time a set of procedures are ready to be executed.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>     * The ProcedureIterator passed to the method, has the procedure sorted in replay-order.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>     * @param procIter iterator over the procedures ready to be added to the executor.<a name="line.101"></a>
+<span class="sourceLineNo">102</span>     */<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    void load(ProcedureIterator procIter) throws IOException;<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>     * Called by the ProcedureStore.load() in case we have procedures not-ready to be added to<a name="line.106"></a>
+<span class="sourceLineNo">107</span>     * the executor, which probably means they are corrupted since some information/link is missing.<a name="line.107"></a>
+<span class="sourceLineNo">108</span>     * @param procIter iterator over the procedures not ready to be added to the executor, corrupted<a name="line.108"></a>
+<span class="sourceLineNo">109</span>     */<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    void handleCorrupted(ProcedureIterator procIter) throws IOException;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>  /**<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * Add the listener to the notification list.<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * @param listener The AssignmentListener to register<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   */<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  void registerListener(ProcedureStoreListener listener);<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>   * Remove the listener from the notification list.<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * @param listener The AssignmentListener to unregister<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * @return true if the listner was in the list and it was removed, otherwise false.<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   */<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  boolean unregisterListener(ProcedureStoreListener listener);<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>   * Start/Open the procedure store<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * @param numThreads<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   */<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  void start(int numThreads) throws IOException;<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>   * Stop/Close the procedure store<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   * @param abort true if the stop is an abort<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   */<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  void stop(boolean abort);<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  /**<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   * @return true if the store is running, otherwise false.<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   */<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  boolean isRunning();<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>   * @return the number of threads/slots passed to start()<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   */<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  int getNumThreads();<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>   * Set the number of procedure running.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   * This can be used, for example, by the store to know how long to wait before a sync.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * @return how many procedures are running (may not be same as &lt;code&gt;count&lt;/code&gt;).<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   */<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  int setRunningProcedureCount(int count);<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * Acquire the lease for the procedure store.<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  void recoverLease() throws IOException;<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>   * Load the Procedures in the store.<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * @param loader the ProcedureLoader that will handle the store-load events<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   */<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  void load(ProcedureLoader loader) throws IOException;<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>   * When a procedure is submitted to the executor insert(proc, null) will be called.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * 'proc' has a 'RUNNABLE' state and the initial information required to start up.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   *<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   * When a procedure is executed and it returns children insert(proc, subprocs) will be called.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * 'proc' has a 'WAITING' state and an update state.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * 'subprocs' are the children in 'RUNNABLE' state with the initial information.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   *<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   * @param proc the procedure to serialize and write to the store.<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * @param subprocs the newly created child of the proc.<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  void insert(Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs);<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>   * Serialize a set of new procedures.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * These procedures are freshly submitted to the executor and each procedure<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * has a 'RUNNABLE' state and the initial information required to start up.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   *<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * @param procs the procedures to serialize and write to the store.<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   */<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  void insert(Procedure&lt;?&gt;[] procs);<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>   * The specified procedure was executed,<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * and the new state should be written to the store.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * @param proc the procedure to serialize and write to the store.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  void update(Procedure&lt;?&gt; proc);<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>   * The specified procId was removed from the executor,<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * due to completion, abort or failure.<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * The store implementor should remove all the information about the specified procId.<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   * @param procId the ID of the procedure to remove.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   */<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  void delete(long procId);<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>  /**<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   * The parent procedure completed.<a name="line.204"></a>
+<span class="sourceLineNo">205</span>   * Update the state and mark all the child deleted.<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   * @param parentProc the parent procedure to serialize and write to the store.<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   * @param subProcIds the IDs of the sub-procedure to remove.<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  void delete(Procedure&lt;?&gt; parentProc, long[] subProcIds);<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>   * The specified procIds were removed from the executor,<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   * due to completion, abort or failure.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * The store implementor should remove all the information about the specified procIds.<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * @param procIds the IDs of the procedures to remove.<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * @param offset the array offset from where to start to delete<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   * @param count the number of IDs to delete<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   */<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  void delete(long[] procIds, int offset, int count);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>}<a name="line.220"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureStoreListener.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureStoreListener.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureStoreListener.html
index 2725fa1..ff29160 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureStoreListener.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureStoreListener.html
@@ -89,142 +89,143 @@
 <span class="sourceLineNo">081</span>     * @throws IOException if there was an error fetching/deserializing the procedure<a name="line.81"></a>
 <span class="sourceLineNo">082</span>     * @return the next procedure in the iteration.<a name="line.82"></a>
 <span class="sourceLineNo">083</span>     */<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    Procedure next() throws IOException;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  }<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  /**<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * Interface passed to the ProcedureStore.load() method to handle the store-load events.<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   */<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  public interface ProcedureLoader {<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    /**<a name="line.91"></a>
-<span class="sourceLineNo">092</span>     * Called by ProcedureStore.load() to notify about the maximum proc-id in the store.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>     * @param maxProcId the highest proc-id in the store<a name="line.93"></a>
-<span class="sourceLineNo">094</span>     */<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    void setMaxProcId(long maxProcId);<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>     * Called by the ProcedureStore.load() every time a set of procedures are ready to be executed.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>     * The ProcedureIterator passed to the method, has the procedure sorted in replay-order.<a name="line.99"></a>
-<span class="sourceLineNo">100</span>     * @param procIter iterator over the procedures ready to be added to the executor.<a name="line.100"></a>
-<span class="sourceLineNo">101</span>     */<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    void load(ProcedureIterator procIter) throws IOException;<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>    /**<a name="line.104"></a>
-<span class="sourceLineNo">105</span>     * Called by the ProcedureStore.load() in case we have procedures not-ready to be added to<a name="line.105"></a>
-<span class="sourceLineNo">106</span>     * the executor, which probably means they are corrupted since some information/link is missing.<a name="line.106"></a>
-<span class="sourceLineNo">107</span>     * @param procIter iterator over the procedures not ready to be added to the executor, corrupted<a name="line.107"></a>
-<span class="sourceLineNo">108</span>     */<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    void handleCorrupted(ProcedureIterator procIter) throws IOException;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  }<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  /**<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * Add the listener to the notification list.<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * @param listener The AssignmentListener to register<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   */<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  void registerListener(ProcedureStoreListener listener);<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>   * Remove the listener from the notification list.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @param listener The AssignmentListener to unregister<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * @return true if the listner was in the list and it was removed, otherwise false.<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   */<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  boolean unregisterListener(ProcedureStoreListener listener);<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>  /**<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * Start/Open the procedure store<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * @param numThreads<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   */<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  void start(int numThreads) throws IOException;<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>   * Stop/Close the procedure store<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   * @param abort true if the stop is an abort<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   */<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  void stop(boolean abort);<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  /**<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   * @return true if the store is running, otherwise false.<a name="line.138"></a>
-<span class="sourceLineNo">139</span>   */<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  boolean isRunning();<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>  /**<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * @return the number of threads/slots passed to start()<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   */<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  int getNumThreads();<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>   * Set the number of procedure running.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * This can be used, for example, by the store to know how long to wait before a sync.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * @return how many procedures are running (may not be same as &lt;code&gt;count&lt;/code&gt;).<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   */<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  int setRunningProcedureCount(int count);<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>   * Acquire the lease for the procedure store.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  void recoverLease() throws IOException;<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>   * Load the Procedures in the store.<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * @param loader the ProcedureLoader that will handle the store-load events<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   */<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  void load(ProcedureLoader loader) throws IOException;<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>   * When a procedure is submitted to the executor insert(proc, null) will be called.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   * 'proc' has a 'RUNNABLE' state and the initial information required to start up.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   *<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   * When a procedure is executed and it returns children insert(proc, subprocs) will be called.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * 'proc' has a 'WAITING' state and an update state.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * 'subprocs' are the children in 'RUNNABLE' state with the initial information.<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   *<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * @param proc the procedure to serialize and write to the store.<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @param subprocs the newly created child of the proc.<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   */<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  void insert(Procedure proc, Procedure[] subprocs);<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>   * Serialize a set of new procedures.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * These procedures are freshly submitted to the executor and each procedure<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * has a 'RUNNABLE' state and the initial information required to start up.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   *<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   * @param procs the procedures to serialize and write to the store.<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   */<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  void insert(Procedure[] procs);<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>   * The specified procedure was executed,<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   * and the new state should be written to the store.<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * @param proc the procedure to serialize and write to the store.<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   */<a name="line.191"></a>
-<span class="sourceLineNo">192</span>  void update(Procedure proc);<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>   * The specified procId was removed from the executor,<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   * due to completion, abort or failure.<a name="line.196"></a>
-<span class="sourceLineNo">197</span>   * The store implementor should remove all the information about the specified procId.<a name="line.197"></a>
-<span class="sourceLineNo">198</span>   * @param procId the ID of the procedure to remove.<a name="line.198"></a>
-<span class="sourceLineNo">199</span>   */<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  void delete(long procId);<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  /**<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * The parent procedure completed.<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * Update the state and mark all the child deleted.<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * @param parentProc the parent procedure to serialize and write to the store.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * @param subProcIds the IDs of the sub-procedure to remove.<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   */<a name="line.207"></a>
-<span class="sourceLineNo">208</span>  void delete(Procedure parentProc, long[] subProcIds);<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>  /**<a name="line.210"></a>
-<span class="sourceLineNo">211</span>   * The specified procIds were removed from the executor,<a name="line.211"></a>
-<span class="sourceLineNo">212</span>   * due to completion, abort or failure.<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * The store implementor should remove all the information about the specified procIds.<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * @param procIds the IDs of the procedures to remove.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   * @param offset the array offset from where to start to delete<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * @param count the number of IDs to delete<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   */<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  void delete(long[] procIds, int offset, int count);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>}<a name="line.219"></a>
+<span class="sourceLineNo">084</span>    @SuppressWarnings("rawtypes")<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    Procedure next() throws IOException;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Interface passed to the ProcedureStore.load() method to handle the store-load events.<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   */<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public interface ProcedureLoader {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    /**<a name="line.92"></a>
+<span class="sourceLineNo">093</span>     * Called by ProcedureStore.load() to notify about the maximum proc-id in the store.<a name="line.93"></a>
+<span class="sourceLineNo">094</span>     * @param maxProcId the highest proc-id in the store<a name="line.94"></a>
+<span class="sourceLineNo">095</span>     */<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    void setMaxProcId(long maxProcId);<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>     * Called by the ProcedureStore.load() every time a set of procedures are ready to be executed.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>     * The ProcedureIterator passed to the method, has the procedure sorted in replay-order.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>     * @param procIter iterator over the procedures ready to be added to the executor.<a name="line.101"></a>
+<span class="sourceLineNo">102</span>     */<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    void load(ProcedureIterator procIter) throws IOException;<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>     * Called by the ProcedureStore.load() in case we have procedures not-ready to be added to<a name="line.106"></a>
+<span class="sourceLineNo">107</span>     * the executor, which probably means they are corrupted since some information/link is missing.<a name="line.107"></a>
+<span class="sourceLineNo">108</span>     * @param procIter iterator over the procedures not ready to be added to the executor, corrupted<a name="line.108"></a>
+<span class="sourceLineNo">109</span>     */<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    void handleCorrupted(ProcedureIterator procIter) throws IOException;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>  /**<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * Add the listener to the notification list.<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * @param listener The AssignmentListener to register<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   */<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  void registerListener(ProcedureStoreListener listener);<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>   * Remove the listener from the notification list.<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * @param listener The AssignmentListener to unregister<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * @return true if the listner was in the list and it was removed, otherwise false.<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   */<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  boolean unregisterListener(ProcedureStoreListener listener);<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>   * Start/Open the procedure store<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * @param numThreads<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   */<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  void start(int numThreads) throws IOException;<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>   * Stop/Close the procedure store<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   * @param abort true if the stop is an abort<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   */<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  void stop(boolean abort);<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  /**<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   * @return true if the store is running, otherwise false.<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   */<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  boolean isRunning();<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>   * @return the number of threads/slots passed to start()<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   */<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  int getNumThreads();<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>   * Set the number of procedure running.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   * This can be used, for example, by the store to know how long to wait before a sync.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * @return how many procedures are running (may not be same as &lt;code&gt;count&lt;/code&gt;).<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   */<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  int setRunningProcedureCount(int count);<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * Acquire the lease for the procedure store.<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  void recoverLease() throws IOException;<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>   * Load the Procedures in the store.<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * @param loader the ProcedureLoader that will handle the store-load events<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   */<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  void load(ProcedureLoader loader) throws IOException;<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>   * When a procedure is submitted to the executor insert(proc, null) will be called.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * 'proc' has a 'RUNNABLE' state and the initial information required to start up.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   *<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   * When a procedure is executed and it returns children insert(proc, subprocs) will be called.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * 'proc' has a 'WAITING' state and an update state.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * 'subprocs' are the children in 'RUNNABLE' state with the initial information.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   *<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   * @param proc the procedure to serialize and write to the store.<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * @param subprocs the newly created child of the proc.<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  void insert(Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs);<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>   * Serialize a set of new procedures.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * These procedures are freshly submitted to the executor and each procedure<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * has a 'RUNNABLE' state and the initial information required to start up.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   *<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * @param procs the procedures to serialize and write to the store.<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   */<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  void insert(Procedure&lt;?&gt;[] procs);<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>   * The specified procedure was executed,<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * and the new state should be written to the store.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * @param proc the procedure to serialize and write to the store.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  void update(Procedure&lt;?&gt; proc);<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>   * The specified procId was removed from the executor,<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * due to completion, abort or failure.<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * The store implementor should remove all the information about the specified procId.<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   * @param procId the ID of the procedure to remove.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   */<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  void delete(long procId);<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>  /**<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   * The parent procedure completed.<a name="line.204"></a>
+<span class="sourceLineNo">205</span>   * Update the state and mark all the child deleted.<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   * @param parentProc the parent procedure to serialize and write to the store.<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   * @param subProcIds the IDs of the sub-procedure to remove.<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  void delete(Procedure&lt;?&gt; parentProc, long[] subProcIds);<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>   * The specified procIds were removed from the executor,<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   * due to completion, abort or failure.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * The store implementor should remove all the information about the specified procIds.<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * @param procIds the IDs of the procedures to remove.<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * @param offset the array offset from where to start to delete<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   * @param count the number of IDs to delete<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   */<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  void delete(long[] procIds, int offset, int count);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>}<a name="line.220"></a>
 
 
 


[02/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
index 0c894de..65a28b9 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
@@ -179,4145 +179,4146 @@
 <span class="sourceLineNo">171</span> * avoiding port contention if another local HBase instance is already running).<a name="line.171"></a>
 <span class="sourceLineNo">172</span> * &lt;p&gt;To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"<a name="line.172"></a>
 <span class="sourceLineNo">173</span> * setting it to true.<a name="line.173"></a>
-<span class="sourceLineNo">174</span> */<a name="line.174"></a>
-<span class="sourceLineNo">175</span>@InterfaceAudience.Public<a name="line.175"></a>
-<span class="sourceLineNo">176</span>@SuppressWarnings("deprecation")<a name="line.176"></a>
-<span class="sourceLineNo">177</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<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>   * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * used in mini dfs.<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   * @deprecated can be used only with mini dfs<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   */<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  @Deprecated<a name="line.185"></a>
-<span class="sourceLineNo">186</span>  private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>  public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  /**<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * The default number of regions per regionserver when creating a pre-split<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * table.<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">174</span> * For triggering test.<a name="line.174"></a>
+<span class="sourceLineNo">175</span> */<a name="line.175"></a>
+<span class="sourceLineNo">176</span>@InterfaceAudience.Public<a name="line.176"></a>
+<span class="sourceLineNo">177</span>@SuppressWarnings("deprecation")<a name="line.177"></a>
+<span class="sourceLineNo">178</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<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>   * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * used in mini dfs.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * @deprecated can be used only with mini dfs<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   */<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  @Deprecated<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>  public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * The default number of regions per regionserver when creating a pre-split<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   * table.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>   */<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.194"></a>
 <span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>  public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>  private MiniDFSCluster dfsCluster = null;<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>  private volatile HBaseCluster hbaseCluster = null;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private MiniMRCluster mrCluster = null;<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>  /** If there is a mini cluster running for this testing utility instance. */<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  private volatile boolean miniClusterRunning;<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  private String hadoopLogDir;<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>  /** Directory on test filesystem where we put the data for this instance of<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    * HBaseTestingUtility*/<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  private Path dataTestDirOnTestFS = null;<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>  /**<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * Shared cluster connection.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   */<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  private volatile Connection connection;<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>  /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  private static String FS_URI;<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>  /** This is for unit tests parameterized with a single boolean. */<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  public static final List&lt;Object[]&gt; MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<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>   * Checks to see if a specific port is available.<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   *<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @param port the port number to check for availability<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the port is available, or &lt;tt&gt;false&lt;/tt&gt; if not<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   */<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  public static boolean available(int port) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    ServerSocket ss = null;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    DatagramSocket ds = null;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    try {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      ss = new ServerSocket(port);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      ss.setReuseAddress(true);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      ds = new DatagramSocket(port);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      ds.setReuseAddress(true);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      return true;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    } catch (IOException e) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      // Do nothing<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    } finally {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      if (ds != null) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        ds.close();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      }<a name="line.244"></a>
-<span class="sourceLineNo">245</span><a name="line.245"></a>
-<span class="sourceLineNo">246</span>      if (ss != null) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        try {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          ss.close();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        } catch (IOException e) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          /* should not be thrown */<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><a name="line.254"></a>
-<span class="sourceLineNo">255</span>    return false;<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>  /**<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * Create all combinations of Bloom filters and compression algorithms for<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * testing.<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   */<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  private static List&lt;Object[]&gt; bloomAndCompressionCombinations() {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    for (Compression.Algorithm comprAlgo :<a name="line.264"></a>
-<span class="sourceLineNo">265</span>         HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      for (BloomType bloomType : BloomType.values()) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>        configurations.add(new Object[] { comprAlgo, bloomType });<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>    return Collections.unmodifiableList(configurations);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  /**<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * Create combination of memstoreTS and tags<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  private static List&lt;Object[]&gt; memStoreTSAndTagsCombination() {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    configurations.add(new Object[] { false, false });<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    configurations.add(new Object[] { false, true });<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    configurations.add(new Object[] { true, false });<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    configurations.add(new Object[] { true, true });<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    return Collections.unmodifiableList(configurations);<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>  public static List&lt;Object[]&gt; memStoreTSTagsAndOffheapCombination() {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    configurations.add(new Object[] { false, false, true });<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    configurations.add(new Object[] { false, false, false });<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    configurations.add(new Object[] { false, true, true });<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    configurations.add(new Object[] { false, true, false });<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    configurations.add(new Object[] { true, false, true });<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    configurations.add(new Object[] { true, false, false });<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    configurations.add(new Object[] { true, true, true });<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    configurations.add(new Object[] { true, true, false });<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    return Collections.unmodifiableList(configurations);<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>  public static final Collection&lt;Object[]&gt; BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      bloomAndCompressionCombinations();<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>  public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.197"></a>
+<span class="sourceLineNo">198</span>  public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>  private MiniDFSCluster dfsCluster = null;<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>  private volatile HBaseCluster hbaseCluster = null;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  private MiniMRCluster mrCluster = null;<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>  /** If there is a mini cluster running for this testing utility instance. */<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  private volatile boolean miniClusterRunning;<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>  private String hadoopLogDir;<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>  /** Directory on test filesystem where we put the data for this instance of<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    * HBaseTestingUtility*/<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  private Path dataTestDirOnTestFS = null;<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>   * Shared cluster connection.<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   */<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  private volatile Connection connection;<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>  /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  private static String FS_URI;<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>  /** This is for unit tests parameterized with a single boolean. */<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  public static final List&lt;Object[]&gt; MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<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>   * Checks to see if a specific port is available.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   *<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * @param port the port number to check for availability<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the port is available, or &lt;tt&gt;false&lt;/tt&gt; if not<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  public static boolean available(int port) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    ServerSocket ss = null;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    DatagramSocket ds = null;<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    try {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      ss = new ServerSocket(port);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      ss.setReuseAddress(true);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      ds = new DatagramSocket(port);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      ds.setReuseAddress(true);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      return true;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    } catch (IOException e) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      // Do nothing<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    } finally {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      if (ds != null) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        ds.close();<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      }<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>      if (ss != null) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        try {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          ss.close();<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        } catch (IOException e) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          /* should not be thrown */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      }<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    }<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>    return false;<a name="line.256"></a>
+<span class="sourceLineNo">257</span>  }<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span>  /**<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * Create all combinations of Bloom filters and compression algorithms for<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * testing.<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   */<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  private static List&lt;Object[]&gt; bloomAndCompressionCombinations() {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    for (Compression.Algorithm comprAlgo :<a name="line.265"></a>
+<span class="sourceLineNo">266</span>         HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      for (BloomType bloomType : BloomType.values()) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>        configurations.add(new Object[] { comprAlgo, bloomType });<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>    return Collections.unmodifiableList(configurations);<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>   * Create combination of memstoreTS and tags<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   */<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  private static List&lt;Object[]&gt; memStoreTSAndTagsCombination() {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    configurations.add(new Object[] { false, false });<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    configurations.add(new Object[] { false, true });<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    configurations.add(new Object[] { true, false });<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    configurations.add(new Object[] { true, true });<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    return Collections.unmodifiableList(configurations);<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>  public static List&lt;Object[]&gt; memStoreTSTagsAndOffheapCombination() {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    configurations.add(new Object[] { false, false, true });<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    configurations.add(new Object[] { false, false, false });<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    configurations.add(new Object[] { false, true, true });<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    configurations.add(new Object[] { false, true, false });<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    configurations.add(new Object[] { true, false, true });<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    configurations.add(new Object[] { true, false, false });<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    configurations.add(new Object[] { true, true, true });<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    configurations.add(new Object[] { true, true, false });<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    return Collections.unmodifiableList(configurations);<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>  public static final Collection&lt;Object[]&gt; BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      bloomAndCompressionCombinations();<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>   * &lt;p&gt;Create an HBaseTestingUtility using a default configuration.<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   *<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   *<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * &lt;p&gt;Previously, there was a distinction between the type of utility returned by<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * at which point they will switch to using mini DFS for storage.<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   */<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  public HBaseTestingUtility() {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    this(HBaseConfiguration.create());<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  }<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span>  /**<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * &lt;p&gt;Create an HBaseTestingUtility using a given configuration.<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   *<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   *<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * &lt;p&gt;Previously, there was a distinction between the type of utility returned by<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * at which point they will switch to using mini DFS for storage.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   *<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * @param conf The configuration to use for further operations<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   */<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    super(conf);<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>    // a hbase checksum verification failure will cause unit tests to fail<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.336"></a>
-<span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>    // Save this for when setting default file:// breaks things<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    if (this.conf.get("fs.defaultFS") != null) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    // Every cluster is a local cluster until we start DFS<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    // Note that conf could be null, but this.conf will not be<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    String dataTestDir = getDataTestDir().toString();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    this.conf.set("fs.defaultFS","file:///");<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    // If the value for random ports isn't set set it to true, thus making<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    // tests opt-out for random port assignment<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  }<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>  /**<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility()} instead<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * @return a normal HBaseTestingUtility<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   */<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  @Deprecated<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  public static HBaseTestingUtility createLocalHTU() {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    return new HBaseTestingUtility();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>  /**<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility(Configuration)} instead<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * @return a normal HBaseTestingUtility<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   */<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  @Deprecated<a name="line.371"></a>
-<span class="sourceLineNo">372</span>  public static HBaseTestingUtility createLocalHTU(Configuration c) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    return new HBaseTestingUtility(c);<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>   * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   */<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    closeRegionAndWAL((HRegion)r);<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>  /**<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   */<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    if (r == null) return;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    r.close();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    if (r.getWAL() == null) return;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    r.getWAL().close();<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  /**<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   * Returns this classes's instance of {@link Configuration}.  Be careful how<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   * you use the returned Configuration since {@link Connection} instances<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   * can be shared.  The Map of Connections is keyed by the Configuration.  If<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * say, a Connection was being used against a cluster that had been shutdown,<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * be wholesome.  Rather than use the return direct, its usually best to<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * make a copy and use that.  Do<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * &lt;code&gt;Configuration c = new Configuration(INSTANCE.getConfiguration());&lt;/code&gt;<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * @return Instance of Configuration.<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   */<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  @Override<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  public Configuration getConfiguration() {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    return super.getConfiguration();<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>  public void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    this.hbaseCluster = hbaseCluster;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>  }<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>  /**<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * Give it a random name so can have many concurrent tests running if<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * we need to.  It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * System property, as it's what minidfscluster bases<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   * it data dir on.  Moding a System property is not the way to do concurrent<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * instances -- another instance could grab the temporary<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * value unintentionally -- but not anything can do about it at moment;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * single instance only is how the minidfscluster works.<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   *<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * We also create the underlying directory for<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   *  hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   *  in the conf, and as a system property for hadoop.tmp.dir<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   *<a name="line.426"></a>
-<span class="sourceLineNo">427</span>   * @return The calculated data test build directory, if newly-created.<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   */<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  @Override<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  protected Path setupDataTestDir() {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    Path testPath = super.setupDataTestDir();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    if (null == testPath) {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      return null;<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>    createSubDirAndSystemProperty(<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      "hadoop.log.dir",<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      testPath, "hadoop-log-dir");<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>    // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    //  we want our own value to ensure uniqueness on the same machine<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    createSubDirAndSystemProperty(<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      "hadoop.tmp.dir",<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      testPath, "hadoop-tmp-dir");<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>    // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    createSubDir(<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      "mapreduce.cluster.local.dir",<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      testPath, "mapred-local-dir");<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>    return testPath;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  private void createSubDirAndSystemProperty(<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    String propertyName, Path parent, String subDirName){<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    String sysValue = System.getProperty(propertyName);<a name="line.457"></a>
-<span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span>    if (sysValue != null) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // There is already a value set. So we do nothing but hope<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      //  that there will be no conflicts<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.462"></a>
-<span class="sourceLineNo">463</span>        sysValue + " so I do NOT create it in " + parent);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      String confValue = conf.get(propertyName);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      if (confValue != null &amp;&amp; !confValue.endsWith(sysValue)){<a name="line.465"></a>
-<span class="sourceLineNo">466</span>       LOG.warn(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>         propertyName + " property value differs in configuration and system: "+<a name="line.467"></a>
-<span class="sourceLineNo">468</span>         "Configuration="+confValue+" while System="+sysValue+<a name="line.468"></a>
-<span class="sourceLineNo">469</span>         " Erasing configuration value by system value."<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>      conf.set(propertyName, sysValue);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    } else {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      // Ok, it's not set, so we create it as a subdirectory<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      createSubDir(propertyName, parent, subDirName);<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      System.setProperty(propertyName, conf.get(propertyName));<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span>  /**<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * @return Where to write test data on the test filesystem; Returns working directory<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * for the test filesystem by default<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * @see #setupDataTestDirOnTestFS()<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   * @see #getTestFileSystem()<a name="line.484"></a>
-<span class="sourceLineNo">485</span>   */<a name="line.485"></a>
-<span class="sourceLineNo">486</span>  private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    FileSystem fs = getTestFileSystem();<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.488"></a>
-<span class="sourceLineNo">489</span>  }<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>  /**<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * @return META table descriptor<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * @deprecated since 2.0 version and will be removed in 3.0 version.<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   *             use {@link #getMetaTableDescriptorBuilder()}<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   */<a name="line.495"></a>
-<span class="sourceLineNo">496</span>  @Deprecated<a name="line.496"></a>
-<span class="sourceLineNo">497</span>  public HTableDescriptor getMetaTableDescriptor() {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    return new ImmutableHTableDescriptor(getMetaTableDescriptorBuilder().build());<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span>  /**<a name="line.501"></a>
-<span class="sourceLineNo">502</span>   * @return META table descriptor<a name="line.502"></a>
-<span class="sourceLineNo">503</span>   */<a name="line.503"></a>
-<span class="sourceLineNo">504</span>  public TableDescriptorBuilder getMetaTableDescriptorBuilder() {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    try {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      return FSTableDescriptors.createMetaTableDescriptorBuilder(conf);<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    } catch (IOException e) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      throw new RuntimeException("Unable to create META table descriptor", e);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<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>  /**<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.514"></a>
-<span class="sourceLineNo">515</span>   * if the test relies on it.<a name="line.515"></a>
-<span class="sourceLineNo">516</span>   * @return a unique path in the test filesystem<a name="line.516"></a>
-<span class="sourceLineNo">517</span>   */<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  public Path getDataTestDirOnTestFS() throws IOException {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    if (dataTestDirOnTestFS == null) {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      setupDataTestDirOnTestFS();<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>    return dataTestDirOnTestFS;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>  }<a name="line.524"></a>
-<span class="sourceLineNo">525</span><a name="line.525"></a>
-<span class="sourceLineNo">526</span>  /**<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.527"></a>
-<span class="sourceLineNo">528</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * if the test relies on it.<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * @return a unique path in the test filesystem<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   * @param subdirName name of the subdir to create under the base test dir<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   */<a name="line.532"></a>
-<span class="sourceLineNo">533</span>  public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
-<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span>  /**<a name="line.537"></a>
-<span class="sourceLineNo">538</span>   * Sets up a path in test filesystem to be used by tests.<a name="line.538"></a>
-<span class="sourceLineNo">539</span>   * Creates a new directory if not already setup.<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   */<a name="line.540"></a>
-<span class="sourceLineNo">541</span>  private void setupDataTestDirOnTestFS() throws IOException {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    if (dataTestDirOnTestFS != null) {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      LOG.warn("Data test on test fs dir already setup in "<a name="line.543"></a>
-<span class="sourceLineNo">544</span>          + dataTestDirOnTestFS.toString());<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      return;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    dataTestDirOnTestFS = getNewDataTestDirOnTestFS();<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 up a new path in test filesystem to be used by tests.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   */<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  private Path getNewDataTestDirOnTestFS() throws IOException {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    //The file system can be either local, mini dfs, or if the configuration<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    //is supplied externally, it can be an external cluster FS. If it is a local<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    //file system, the tests should use getBaseTestDir, otherwise, we can use<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    //the working directory, and create a unique sub dir there<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    FileSystem fs = getTestFileSystem();<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    Path newDataTestDir;<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    String randomStr = getRandomUUID().toString();<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    if (fs.getUri().getScheme().equals(FileSystem.getLocal(conf).getUri().getScheme())) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      newDataTestDir = new Path(getDataTestDir(), randomStr);<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      File dataTestDir = new File(newDataTestDir.toString());<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      if (deleteOnExit()) dataTestDir.deleteOnExit();<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    } else {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      Path base = getBaseTestDirOnTestFS();<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      newDataTestDir = new Path(base, randomStr);<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      if (deleteOnExit()) fs.deleteOnExit(newDataTestDir);<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    return newDataTestDir;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>  /**<a name="line.573"></a>
-<span class="sourceLineNo">574</span>   * Cleans the test data directory on the test filesystem.<a name="line.574"></a>
-<span class="sourceLineNo">575</span>   * @return True if we removed the test dirs<a name="line.575"></a>
-<span class="sourceLineNo">576</span>   * @throws IOException<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   */<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  public boolean cleanupDataTestDirOnTestFS() throws IOException {<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    boolean ret = getTestFileSystem().delete(dataTestDirOnTestFS, true);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    if (ret)<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      dataTestDirOnTestFS = null;<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    return ret;<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>   * Cleans a subdirectory under the test data directory on the test filesystem.<a name="line.586"></a>
-<span class="sourceLineNo">587</span>   * @return True if we removed child<a name="line.587"></a>
-<span class="sourceLineNo">588</span>   * @throws IOException<a name="line.588"></a>
-<span class="sourceLineNo">589</span>   */<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  public boolean cleanupDataTestDirOnTestFS(String subdirName) throws IOException {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    Path cpath = getDataTestDirOnTestFS(subdirName);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return getTestFileSystem().delete(cpath, true);<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>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * Start a minidfscluster.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * @param servers How many DNs to start.<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   * @throws Exception<a name="line.598"></a>
-<span class="sourceLineNo">599</span>   * @see #shutdownMiniDFSCluster()<a name="line.599"></a>
-<span class="sourceLineNo">600</span>   * @return The mini dfs cluster created.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>   */<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  public MiniDFSCluster startMiniDFSCluster(int servers) throws Exception {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    return startMiniDFSCluster(servers, null);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>  }<a name="line.604"></a>
-<span class="sourceLineNo">605</span><a name="line.605"></a>
-<span class="sourceLineNo">606</span>  /**<a name="line.606"></a>
-<span class="sourceLineNo">607</span>   * Start a minidfscluster.<a name="line.607"></a>
-<span class="sourceLineNo">608</span>   * This is useful if you want to run datanode on distinct hosts for things<a name="line.608"></a>
-<span class="sourceLineNo">609</span>   * like HDFS block location verification.<a name="line.609"></a>
-<span class="sourceLineNo">610</span>   * If you start MiniDFSCluster without host names, all instances of the<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * datanodes will have the same host name.<a name="line.611"></a>
-<span class="sourceLineNo">612</span>   * @param hosts hostnames DNs to run on.<a name="line.612"></a>
-<span class="sourceLineNo">613</span>   * @throws Exception<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * @see #shutdownMiniDFSCluster()<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @return The mini dfs cluster created.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   */<a name="line.616"></a>
-<span class="sourceLineNo">617</span>  public MiniDFSCluster startMiniDFSCluster(final String hosts[])<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  throws Exception {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    if ( hosts != null &amp;&amp; hosts.length != 0) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return startMiniDFSCluster(hosts.length, hosts);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    } else {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      return startMiniDFSCluster(1, null);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    }<a name="line.623"></a>
-<span class="sourceLineNo">624</span>  }<a name="line.624"></a>
-<span class="sourceLineNo">625</span><a name="line.625"></a>
-<span class="sourceLineNo">626</span>  /**<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   * Start a minidfscluster.<a name="line.627"></a>
-<span class="sourceLineNo">628</span>   * Can only create one.<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   * @param servers How many DNs to start.<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   * @param hosts hostnames DNs to run on.<a name="line.630"></a>
-<span class="sourceLineNo">631</span>   * @throws Exception<a name="line.631"></a>
-<span class="sourceLineNo">632</span>   * @see #shutdownMiniDFSCluster()<a name="line.632"></a>
-<span class="sourceLineNo">633</span>   * @return The mini dfs cluster created.<a name="line.633"></a>
-<span class="sourceLineNo">634</span>   */<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  public MiniDFSCluster startMiniDFSCluster(int servers, final String hosts[])<a name="line.635"></a>
-<span class="sourceLineNo">636</span>  throws Exception {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    return startMiniDFSCluster(servers, null, hosts);<a name="line.637"></a>
-<span class="sourceLineNo">638</span>  }<a name="line.638"></a>
-<span class="sourceLineNo">639</span><a name="line.639"></a>
-<span class="sourceLineNo">640</span>  private void setFs() throws IOException {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    if(this.dfsCluster == null){<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      LOG.info("Skipping setting fs because dfsCluster is null");<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      return;<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    }<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    FileSystem fs = this.dfsCluster.getFileSystem();<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    FSUtils.setFsDefault(this.conf, new Path(fs.getUri()));<a name="line.646"></a>
-<span class="sourceLineNo">647</span><a name="line.647"></a>
-<span class="sourceLineNo">648</span>    // re-enable this check with dfs<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    conf.unset(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>  }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span>  public MiniDFSCluster startMiniDFSCluster(int servers, final  String racks[], String hosts[])<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      throws Exception {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    createDirsAndSetProperties();<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    EditLogFileOutputStream.setShouldSkipFsyncForTesting(true);<a name="line.655"></a>
-<span class="sourceLineNo">656</span><a name="line.656"></a>
-<span class="sourceLineNo">657</span>    // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    org.apache.log4j.Logger.getLogger(org.apache.hadoop.metrics2.util.MBeans.class).<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        setLevel(org.apache.log4j.Level.ERROR);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    org.apache.log4j.Logger.getLogger(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class).<a name="line.660"></a>
-<span class="sourceLineNo">661</span>        setLevel(org.apache.log4j.Level.ERROR);<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>    TraceUtil.initTracer(conf);<a name="line.663"></a>
-<span class="sourceLineNo">664</span><a name="line.664"></a>
-<span class="sourceLineNo">665</span>    this.dfsCluster = new MiniDFSCluster(0, this.conf, servers, true, true,<a name="line.665"></a>
-<span class="sourceLineNo">666</span>        true, null, racks, hosts, null);<a name="line.666"></a>
-<span class="sourceLineNo">667</span><a name="line.667"></a>
-<span class="sourceLineNo">668</span>    // Set this just-started cluster as our filesystem.<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    setFs();<a name="line.669"></a>
-<span class="sourceLineNo">670</span><a name="line.670"></a>
-<span class="sourceLineNo">671</span>    // Wait for the cluster to be totally up<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    this.dfsCluster.waitClusterUp();<a name="line.672"></a>
-<span class="sourceLineNo">673</span><a name="line.673"></a>
-<span class="sourceLineNo">674</span>    //reset the test directory for test file system<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    dataTestDirOnTestFS = null;<a name="line.675"></a>
-<span class="sourceLineNo">676</span>    String dataTestDir = getDataTestDir().toString();<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    conf.set(HConstants.HBASE_DIR, dataTestDir);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>    return this.dfsCluster;<a name="line.680"></a>
-<span class="sourceLineNo">681</span>  }<a name="line.681"></a>
-<span class="sourceLineNo">682</span><a name="line.682"></a>
-<span class="sourceLineNo">683</span>  public MiniDFSCluster startMiniDFSClusterForTestWAL(int namenodePort) throws IOException {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    createDirsAndSetProperties();<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    dfsCluster = new MiniDFSCluster(namenodePort, conf, 5, false, true, true, null,<a name="line.685"></a>
-<span class="sourceLineNo">686</span>        null, null, null);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>    return dfsCluster;<a name="line.687"></a>
-<span class="sourceLineNo">688</span>  }<a name="line.688"></a>
-<span class="sourceLineNo">689</span><a name="line.689"></a>
-<span class="sourceLineNo">690</span>  /** This is used before starting HDFS and map-reduce mini-clusters */<a name="line.690"></a>
-<span class="sourceLineNo">691</span>  private void createDirsAndSetProperties() throws IOException {<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    setupClusterTestDir();<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    conf.set(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    System.setProperty(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    createDirAndSetProperty("cache_data", "test.cache.data");<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    createDirAndSetProperty("hadoop_tmp", "hadoop.tmp.dir");<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    hadoopLogDir = createDirAndSetProperty("hadoop_logs", "hadoop.log.dir");<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    createDirAndSetProperty("mapred_local", "mapreduce.cluster.local.dir");<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    createDirAndSetProperty("mapred_temp", "mapreduce.cluster.temp.dir");<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    enableShortCircuit();<a name="line.700"></a>
-<span class="sourceLineNo">701</span><a name="line.701"></a>
-<span class="sourceLineNo">702</span>    Path root = getDataTestDirOnTestFS("hadoop");<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    conf.set(MapreduceTestingShim.getMROutputDirProp(),<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      new Path(root, "mapred-output-dir").toString());<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    conf.set("mapreduce.jobtracker.system.dir", new Path(root, "mapred-system-dir").toString());<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    conf.set("mapreduce.jobtracker.staging.root.dir",<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      new Path(root, "mapreduce-jobtracker-staging-root-dir").toString());<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    conf.set("mapreduce.job.working.dir", new Path(root, "mapred-working-dir").toString());<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    conf.set("yarn.app.mapreduce.am.staging-dir",<a name="line.709"></a>
-<span class="sourceLineNo">710</span>      new Path(root, "mapreduce-am-staging-root-dir").toString());<a name="line.710"></a>
-<span class="sourceLineNo">711</span>  }<a name="line.711"></a>
-<span class="sourceLineNo">712</span><a name="line.712"></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>   * &lt;p&gt;Create an HBaseTestingUtility using a default configuration.<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   *<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   *<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   * &lt;p&gt;Previously, there was a distinction between the type of utility returned by<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * at which point they will switch to using mini DFS for storage.<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   */<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  public HBaseTestingUtility() {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    this(HBaseConfiguration.create());<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>   * &lt;p&gt;Create an HBaseTestingUtility using a given configuration.<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   *<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   *<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * &lt;p&gt;Previously, there was a distinction between the type of utility returned by<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.328"></a>
+<span class="sourceLineNo">329</span>   * at which point they will switch to using mini DFS for storage.<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   *<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   * @param conf The configuration to use for further operations<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    super(conf);<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>    // a hbase checksum verification failure will cause unit tests to fail<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>    // Save this for when setting default file:// breaks things<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    if (this.conf.get("fs.defaultFS") != null) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    }<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    // Every cluster is a local cluster until we start DFS<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    // Note that conf could be null, but this.conf will not be<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    String dataTestDir = getDataTestDir().toString();<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    this.conf.set("fs.defaultFS","file:///");<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    // If the value for random ports isn't set set it to true, thus making<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    // tests opt-out for random port assignment<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>  /**<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility()} instead<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * @return a normal HBaseTestingUtility<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  @Deprecated<a name="line.363"></a>
+<span class="sourceLineNo">364</span>  public static HBaseTestingUtility createLocalHTU() {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    return new HBaseTestingUtility();<a name="line.365"></a>
+<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>  /**<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility(Configuration)} instead<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   * @return a normal HBaseTestingUtility<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   */<a name="line.371"></a>
+<span class="sourceLineNo">372</span>  @Deprecated<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  public static HBaseTestingUtility createLocalHTU(Configuration c) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    return new HBaseTestingUtility(c);<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>  /**<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    closeRegionAndWAL((HRegion)r);<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>  /**<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   */<a name="line.386"></a>
+<span class="sourceLineNo">387</span>  public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    if (r == null) return;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    r.close();<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    if (r.getWAL() == null) return;<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    r.getWAL().close();<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>  /**<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * Returns this classes's instance of {@link Configuration}.  Be careful how<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * you use the returned Configuration since {@link Connection} instances<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   * can be shared.  The Map of Connections is keyed by the Configuration.  If<a name="line.397"></a>
+<span class="sourceLineNo">398</span>   * say, a Connection was being used against a cluster that had been shutdown,<a name="line.398"></a>
+<span class="sourceLineNo">399</span>   * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.399"></a>
+<span class="sourceLineNo">400</span>   * be wholesome.  Rather than use the return direct, its usually best to<a name="line.400"></a>
+<span class="sourceLineNo">401</span>   * make a copy and use that.  Do<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   * &lt;code&gt;Configuration c = new Configuration(INSTANCE.getConfiguration());&lt;/code&gt;<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * @return Instance of Configuration.<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  @Override<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  public Configuration getConfiguration() {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    return super.getConfiguration();<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 void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    this.hbaseCluster = hbaseCluster;<a name="line.411"></a>
+<span class="sourceLineNo">412</span>  }<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>  /**<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   * Give it a random name so can have many concurrent tests running if<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * we need to.  It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * System property, as it's what minidfscluster bases<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   * it data dir on.  Moding a System property is not the way to do concurrent<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * instances -- another instance could grab the temporary<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * value unintentionally -- but not anything can do about it at moment;<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * single instance only is how the minidfscluster works.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   *<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * We also create the underlying directory for<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   *  hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   *  in the conf, and as a system property for hadoop.tmp.dir<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   *<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @return The calculated data test build directory, if newly-created.<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   */<a name="line.429"></a>
+<span class="sourceLineNo">430</span>  @Override<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  protected Path setupDataTestDir() {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    Path testPath = super.setupDataTestDir();<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    if (null == testPath) {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      return null;<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    }<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span>    createSubDirAndSystemProperty(<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      "hadoop.log.dir",<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      testPath, "hadoop-log-dir");<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>    // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    //  we want our own value to ensure uniqueness on the same machine<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    createSubDirAndSystemProperty(<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      "hadoop.tmp.dir",<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      testPath, "hadoop-tmp-dir");<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>    // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    createSubDir(<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      "mapreduce.cluster.local.dir",<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      testPath, "mapred-local-dir");<a name="line.450"></a>
+<span class="sourceLineNo">451</span><a name="line.451"></a>
+<span class="sourceLineNo">452</span>    return testPath;<a name="line.452"></a>
+<span class="sourceLineNo">453</span>  }<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>  private void createSubDirAndSystemProperty(<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    String propertyName, Path parent, String subDirName){<a name="line.456"></a>
+<span class="sourceLineNo">457</span><a name="line.457"></a>
+<span class="sourceLineNo">458</span>    String sysValue = System.getProperty(propertyName);<a name="line.458"></a>
+<span class="sourceLineNo">459</span><a name="line.459"></a>
+<span class="sourceLineNo">460</span>    if (sysValue != null) {<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      // There is already a value set. So we do nothing but hope<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      //  that there will be no conflicts<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        sysValue + " so I do NOT create it in " + parent);<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      String confValue = conf.get(propertyName);<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      if (confValue != null &amp;&amp; !confValue.endsWith(sysValue)){<a name="line.466"></a>
+<span class="sourceLineNo">467</span>       LOG.warn(<a name="line.467"></a>
+<span class="sourceLineNo">468</span>         propertyName + " property value differs in configuration and system: "+<a name="line.468"></a>
+<span class="sourceLineNo">469</span>         "Configuration="+confValue+" while System="+sysValue+<a name="line.469"></a>
+<span class="sourceLineNo">470</span>         " Erasing configuration value by system value."<a name="line.470"></a>
+<span class="sourceLineNo">471</span>       );<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      }<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      conf.set(propertyName, sysValue);<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    } else {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      // Ok, it's not set, so we create it as a subdirectory<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      createSubDir(propertyName, parent, subDirName);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      System.setProperty(propertyName, conf.get(propertyName));<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
+<span class="sourceLineNo">480</span><a name="line.480"></a>
+<span class="sourceLineNo">481</span>  /**<a name="line.481"></a>
+<span class="sourceLineNo">482</span>   * @return Where to write test data on the test filesystem; Returns working directory<a name="line.482"></a>
+<span class="sourceLineNo">483</span>   * for the test filesystem by default<a name="line.483"></a>
+<span class="sourceLineNo">484</span>   * @see #setupDataTestDirOnTestFS()<a name="line.484"></a>
+<span class="sourceLineNo">485</span>   * @see #getTestFileSystem()<a name="line.485"></a>
+<span class="sourceLineNo">486</span>   */<a name="line.486"></a>
+<span class="sourceLineNo">487</span>  private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    FileSystem fs = getTestFileSystem();<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.489"></a>
+<span class="sourceLineNo">490</span>  }<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>   * @return META table descriptor<a name="line.493"></a>
+<span class="sourceLineNo">494</span>   * @deprecated since 2.0 version and will be removed in 3.0 version.<a name="line.494"></a>
+<span class="sourceLineNo">495</span>   *             use {@link #getMetaTableDescriptorBuilder()}<a name="line.495"></a>
+<span class="sourceLineNo">496</span>   */<a name="line.496"></a>
+<span class="sourceLineNo">497</span>  @Deprecated<a name="line.497"></a>
+<span class="sourceLineNo">498</span>  public HTableDescriptor getMetaTableDescriptor() {<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    return new ImmutableHTableDescriptor(getMetaTableDescriptorBuilder().build());<a name="line.499"></a>
+<span class="sourceLineNo">500</span>  }<a name="line.500"></a>
+<span class="sourceLineNo">501</span><a name="line.501"></a>
+<span class="sourceLineNo">502</span>  /**<a name="line.502"></a>
+<span class="sourceLineNo">503</span>   * @return META table descriptor<a name="line.503"></a>
+<span class="sourceLineNo">504</span>   */<a name="line.504"></a>
+<span class="sourceLineNo">505</span>  public TableDescriptorBuilder getMetaTableDescriptorBuilder() {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    try {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      return FSTableDescriptors.createMetaTableDescriptorBuilder(conf);<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    } catch (IOException e) {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      throw new RuntimeException("Unable to create META table descriptor", e);<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><a name="line.512"></a>
+<span class="sourceLineNo">513</span>  /**<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.514"></a>
+<span class="sourceLineNo">515</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.515"></a>
+<span class="sourceLineNo">516</span>   * if the test relies on it.<a name="line.516"></a>
+<span class="sourceLineNo">517</span>   * @return a unique path in the test filesystem<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   */<a name="line.518"></a>
+<span class="sourceLineNo">519</span>  public Path getDataTestDirOnTestFS() throws IOException {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    if (dataTestDirOnTestFS == null) {<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      setupDataTestDirOnTestFS();<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>    return dataTestDirOnTestFS;<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  }<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>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.528"></a>
+<span class="sourceLineNo">529</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.529"></a>
+<span class="sourceLineNo">530</span>   * if the test relies on it.<a name="line.530"></a>
+<span class="sourceLineNo">531</span>   * @return a unique path in the test filesystem<a name="line.531"></a>
+<span class="sourceLineNo">532</span>   * @param subdirName name of the subdir to create under the base test dir<a name="line.532"></a>
+<span class="sourceLineNo">533</span>   */<a name="line.533"></a>
+<span class="sourceLineNo">534</span>  public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.535"></a>
+<span class="sourceLineNo">536</span>  }<a name="line.536"></a>
+<span class="sourceLineNo">537</span><a name="line.537"></a>


<TRUNCATED>

[05/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html
index 0c894de..65a28b9 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html
@@ -179,4145 +179,4146 @@
 <span class="sourceLineNo">171</span> * avoiding port contention if another local HBase instance is already running).<a name="line.171"></a>
 <span class="sourceLineNo">172</span> * &lt;p&gt;To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"<a name="line.172"></a>
 <span class="sourceLineNo">173</span> * setting it to true.<a name="line.173"></a>
-<span class="sourceLineNo">174</span> */<a name="line.174"></a>
-<span class="sourceLineNo">175</span>@InterfaceAudience.Public<a name="line.175"></a>
-<span class="sourceLineNo">176</span>@SuppressWarnings("deprecation")<a name="line.176"></a>
-<span class="sourceLineNo">177</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<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>   * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * used in mini dfs.<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   * @deprecated can be used only with mini dfs<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   */<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  @Deprecated<a name="line.185"></a>
-<span class="sourceLineNo">186</span>  private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>  public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  /**<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * The default number of regions per regionserver when creating a pre-split<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * table.<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">174</span> * For triggering test.<a name="line.174"></a>
+<span class="sourceLineNo">175</span> */<a name="line.175"></a>
+<span class="sourceLineNo">176</span>@InterfaceAudience.Public<a name="line.176"></a>
+<span class="sourceLineNo">177</span>@SuppressWarnings("deprecation")<a name="line.177"></a>
+<span class="sourceLineNo">178</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<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>   * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * used in mini dfs.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * @deprecated can be used only with mini dfs<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   */<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  @Deprecated<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>  public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * The default number of regions per regionserver when creating a pre-split<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   * table.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>   */<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.194"></a>
 <span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>  public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>  private MiniDFSCluster dfsCluster = null;<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>  private volatile HBaseCluster hbaseCluster = null;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private MiniMRCluster mrCluster = null;<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>  /** If there is a mini cluster running for this testing utility instance. */<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  private volatile boolean miniClusterRunning;<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  private String hadoopLogDir;<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>  /** Directory on test filesystem where we put the data for this instance of<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    * HBaseTestingUtility*/<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  private Path dataTestDirOnTestFS = null;<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>  /**<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * Shared cluster connection.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   */<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  private volatile Connection connection;<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>  /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  private static String FS_URI;<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>  /** This is for unit tests parameterized with a single boolean. */<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  public static final List&lt;Object[]&gt; MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<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>   * Checks to see if a specific port is available.<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   *<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @param port the port number to check for availability<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the port is available, or &lt;tt&gt;false&lt;/tt&gt; if not<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   */<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  public static boolean available(int port) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    ServerSocket ss = null;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    DatagramSocket ds = null;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    try {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      ss = new ServerSocket(port);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      ss.setReuseAddress(true);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      ds = new DatagramSocket(port);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      ds.setReuseAddress(true);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      return true;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    } catch (IOException e) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      // Do nothing<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    } finally {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      if (ds != null) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        ds.close();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      }<a name="line.244"></a>
-<span class="sourceLineNo">245</span><a name="line.245"></a>
-<span class="sourceLineNo">246</span>      if (ss != null) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        try {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          ss.close();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        } catch (IOException e) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          /* should not be thrown */<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><a name="line.254"></a>
-<span class="sourceLineNo">255</span>    return false;<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>  /**<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * Create all combinations of Bloom filters and compression algorithms for<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * testing.<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   */<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  private static List&lt;Object[]&gt; bloomAndCompressionCombinations() {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    for (Compression.Algorithm comprAlgo :<a name="line.264"></a>
-<span class="sourceLineNo">265</span>         HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      for (BloomType bloomType : BloomType.values()) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>        configurations.add(new Object[] { comprAlgo, bloomType });<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>    return Collections.unmodifiableList(configurations);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  /**<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * Create combination of memstoreTS and tags<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  private static List&lt;Object[]&gt; memStoreTSAndTagsCombination() {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    configurations.add(new Object[] { false, false });<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    configurations.add(new Object[] { false, true });<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    configurations.add(new Object[] { true, false });<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    configurations.add(new Object[] { true, true });<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    return Collections.unmodifiableList(configurations);<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>  public static List&lt;Object[]&gt; memStoreTSTagsAndOffheapCombination() {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    configurations.add(new Object[] { false, false, true });<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    configurations.add(new Object[] { false, false, false });<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    configurations.add(new Object[] { false, true, true });<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    configurations.add(new Object[] { false, true, false });<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    configurations.add(new Object[] { true, false, true });<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    configurations.add(new Object[] { true, false, false });<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    configurations.add(new Object[] { true, true, true });<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    configurations.add(new Object[] { true, true, false });<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    return Collections.unmodifiableList(configurations);<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>  public static final Collection&lt;Object[]&gt; BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      bloomAndCompressionCombinations();<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>  public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.197"></a>
+<span class="sourceLineNo">198</span>  public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>  private MiniDFSCluster dfsCluster = null;<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>  private volatile HBaseCluster hbaseCluster = null;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  private MiniMRCluster mrCluster = null;<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>  /** If there is a mini cluster running for this testing utility instance. */<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  private volatile boolean miniClusterRunning;<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>  private String hadoopLogDir;<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>  /** Directory on test filesystem where we put the data for this instance of<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    * HBaseTestingUtility*/<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  private Path dataTestDirOnTestFS = null;<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>   * Shared cluster connection.<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   */<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  private volatile Connection connection;<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>  /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  private static String FS_URI;<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>  /** This is for unit tests parameterized with a single boolean. */<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  public static final List&lt;Object[]&gt; MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<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>   * Checks to see if a specific port is available.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   *<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * @param port the port number to check for availability<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the port is available, or &lt;tt&gt;false&lt;/tt&gt; if not<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  public static boolean available(int port) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    ServerSocket ss = null;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    DatagramSocket ds = null;<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    try {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      ss = new ServerSocket(port);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      ss.setReuseAddress(true);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      ds = new DatagramSocket(port);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      ds.setReuseAddress(true);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      return true;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    } catch (IOException e) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      // Do nothing<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    } finally {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      if (ds != null) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        ds.close();<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      }<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>      if (ss != null) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        try {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          ss.close();<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        } catch (IOException e) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          /* should not be thrown */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      }<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    }<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>    return false;<a name="line.256"></a>
+<span class="sourceLineNo">257</span>  }<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span>  /**<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * Create all combinations of Bloom filters and compression algorithms for<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * testing.<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   */<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  private static List&lt;Object[]&gt; bloomAndCompressionCombinations() {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    for (Compression.Algorithm comprAlgo :<a name="line.265"></a>
+<span class="sourceLineNo">266</span>         HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      for (BloomType bloomType : BloomType.values()) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>        configurations.add(new Object[] { comprAlgo, bloomType });<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>    return Collections.unmodifiableList(configurations);<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>   * Create combination of memstoreTS and tags<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   */<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  private static List&lt;Object[]&gt; memStoreTSAndTagsCombination() {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    configurations.add(new Object[] { false, false });<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    configurations.add(new Object[] { false, true });<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    configurations.add(new Object[] { true, false });<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    configurations.add(new Object[] { true, true });<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    return Collections.unmodifiableList(configurations);<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>  public static List&lt;Object[]&gt; memStoreTSTagsAndOffheapCombination() {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    configurations.add(new Object[] { false, false, true });<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    configurations.add(new Object[] { false, false, false });<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    configurations.add(new Object[] { false, true, true });<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    configurations.add(new Object[] { false, true, false });<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    configurations.add(new Object[] { true, false, true });<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    configurations.add(new Object[] { true, false, false });<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    configurations.add(new Object[] { true, true, true });<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    configurations.add(new Object[] { true, true, false });<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    return Collections.unmodifiableList(configurations);<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>  public static final Collection&lt;Object[]&gt; BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      bloomAndCompressionCombinations();<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>   * &lt;p&gt;Create an HBaseTestingUtility using a default configuration.<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   *<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   *<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * &lt;p&gt;Previously, there was a distinction between the type of utility returned by<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * at which point they will switch to using mini DFS for storage.<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   */<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  public HBaseTestingUtility() {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    this(HBaseConfiguration.create());<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  }<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span>  /**<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * &lt;p&gt;Create an HBaseTestingUtility using a given configuration.<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   *<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   *<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * &lt;p&gt;Previously, there was a distinction between the type of utility returned by<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * at which point they will switch to using mini DFS for storage.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   *<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * @param conf The configuration to use for further operations<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   */<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    super(conf);<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>    // a hbase checksum verification failure will cause unit tests to fail<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.336"></a>
-<span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>    // Save this for when setting default file:// breaks things<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    if (this.conf.get("fs.defaultFS") != null) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    // Every cluster is a local cluster until we start DFS<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    // Note that conf could be null, but this.conf will not be<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    String dataTestDir = getDataTestDir().toString();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    this.conf.set("fs.defaultFS","file:///");<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    // If the value for random ports isn't set set it to true, thus making<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    // tests opt-out for random port assignment<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  }<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>  /**<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility()} instead<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * @return a normal HBaseTestingUtility<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   */<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  @Deprecated<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  public static HBaseTestingUtility createLocalHTU() {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    return new HBaseTestingUtility();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>  /**<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility(Configuration)} instead<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * @return a normal HBaseTestingUtility<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   */<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  @Deprecated<a name="line.371"></a>
-<span class="sourceLineNo">372</span>  public static HBaseTestingUtility createLocalHTU(Configuration c) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    return new HBaseTestingUtility(c);<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>   * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   */<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    closeRegionAndWAL((HRegion)r);<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>  /**<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   */<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    if (r == null) return;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    r.close();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    if (r.getWAL() == null) return;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    r.getWAL().close();<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  /**<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   * Returns this classes's instance of {@link Configuration}.  Be careful how<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   * you use the returned Configuration since {@link Connection} instances<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   * can be shared.  The Map of Connections is keyed by the Configuration.  If<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * say, a Connection was being used against a cluster that had been shutdown,<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * be wholesome.  Rather than use the return direct, its usually best to<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * make a copy and use that.  Do<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * &lt;code&gt;Configuration c = new Configuration(INSTANCE.getConfiguration());&lt;/code&gt;<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * @return Instance of Configuration.<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   */<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  @Override<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  public Configuration getConfiguration() {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    return super.getConfiguration();<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>  public void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    this.hbaseCluster = hbaseCluster;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>  }<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>  /**<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * Give it a random name so can have many concurrent tests running if<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * we need to.  It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * System property, as it's what minidfscluster bases<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   * it data dir on.  Moding a System property is not the way to do concurrent<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * instances -- another instance could grab the temporary<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * value unintentionally -- but not anything can do about it at moment;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * single instance only is how the minidfscluster works.<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   *<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * We also create the underlying directory for<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   *  hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   *  in the conf, and as a system property for hadoop.tmp.dir<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   *<a name="line.426"></a>
-<span class="sourceLineNo">427</span>   * @return The calculated data test build directory, if newly-created.<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   */<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  @Override<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  protected Path setupDataTestDir() {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    Path testPath = super.setupDataTestDir();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    if (null == testPath) {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      return null;<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>    createSubDirAndSystemProperty(<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      "hadoop.log.dir",<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      testPath, "hadoop-log-dir");<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>    // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    //  we want our own value to ensure uniqueness on the same machine<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    createSubDirAndSystemProperty(<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      "hadoop.tmp.dir",<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      testPath, "hadoop-tmp-dir");<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>    // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    createSubDir(<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      "mapreduce.cluster.local.dir",<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      testPath, "mapred-local-dir");<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>    return testPath;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  private void createSubDirAndSystemProperty(<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    String propertyName, Path parent, String subDirName){<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    String sysValue = System.getProperty(propertyName);<a name="line.457"></a>
-<span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span>    if (sysValue != null) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // There is already a value set. So we do nothing but hope<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      //  that there will be no conflicts<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.462"></a>
-<span class="sourceLineNo">463</span>        sysValue + " so I do NOT create it in " + parent);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      String confValue = conf.get(propertyName);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      if (confValue != null &amp;&amp; !confValue.endsWith(sysValue)){<a name="line.465"></a>
-<span class="sourceLineNo">466</span>       LOG.warn(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>         propertyName + " property value differs in configuration and system: "+<a name="line.467"></a>
-<span class="sourceLineNo">468</span>         "Configuration="+confValue+" while System="+sysValue+<a name="line.468"></a>
-<span class="sourceLineNo">469</span>         " Erasing configuration value by system value."<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>      conf.set(propertyName, sysValue);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    } else {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      // Ok, it's not set, so we create it as a subdirectory<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      createSubDir(propertyName, parent, subDirName);<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      System.setProperty(propertyName, conf.get(propertyName));<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span>  /**<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * @return Where to write test data on the test filesystem; Returns working directory<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * for the test filesystem by default<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * @see #setupDataTestDirOnTestFS()<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   * @see #getTestFileSystem()<a name="line.484"></a>
-<span class="sourceLineNo">485</span>   */<a name="line.485"></a>
-<span class="sourceLineNo">486</span>  private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    FileSystem fs = getTestFileSystem();<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.488"></a>
-<span class="sourceLineNo">489</span>  }<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>  /**<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * @return META table descriptor<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * @deprecated since 2.0 version and will be removed in 3.0 version.<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   *             use {@link #getMetaTableDescriptorBuilder()}<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   */<a name="line.495"></a>
-<span class="sourceLineNo">496</span>  @Deprecated<a name="line.496"></a>
-<span class="sourceLineNo">497</span>  public HTableDescriptor getMetaTableDescriptor() {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    return new ImmutableHTableDescriptor(getMetaTableDescriptorBuilder().build());<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span>  /**<a name="line.501"></a>
-<span class="sourceLineNo">502</span>   * @return META table descriptor<a name="line.502"></a>
-<span class="sourceLineNo">503</span>   */<a name="line.503"></a>
-<span class="sourceLineNo">504</span>  public TableDescriptorBuilder getMetaTableDescriptorBuilder() {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    try {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      return FSTableDescriptors.createMetaTableDescriptorBuilder(conf);<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    } catch (IOException e) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      throw new RuntimeException("Unable to create META table descriptor", e);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<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>  /**<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.514"></a>
-<span class="sourceLineNo">515</span>   * if the test relies on it.<a name="line.515"></a>
-<span class="sourceLineNo">516</span>   * @return a unique path in the test filesystem<a name="line.516"></a>
-<span class="sourceLineNo">517</span>   */<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  public Path getDataTestDirOnTestFS() throws IOException {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    if (dataTestDirOnTestFS == null) {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      setupDataTestDirOnTestFS();<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>    return dataTestDirOnTestFS;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>  }<a name="line.524"></a>
-<span class="sourceLineNo">525</span><a name="line.525"></a>
-<span class="sourceLineNo">526</span>  /**<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.527"></a>
-<span class="sourceLineNo">528</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * if the test relies on it.<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * @return a unique path in the test filesystem<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   * @param subdirName name of the subdir to create under the base test dir<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   */<a name="line.532"></a>
-<span class="sourceLineNo">533</span>  public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
-<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span>  /**<a name="line.537"></a>
-<span class="sourceLineNo">538</span>   * Sets up a path in test filesystem to be used by tests.<a name="line.538"></a>
-<span class="sourceLineNo">539</span>   * Creates a new directory if not already setup.<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   */<a name="line.540"></a>
-<span class="sourceLineNo">541</span>  private void setupDataTestDirOnTestFS() throws IOException {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    if (dataTestDirOnTestFS != null) {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      LOG.warn("Data test on test fs dir already setup in "<a name="line.543"></a>
-<span class="sourceLineNo">544</span>          + dataTestDirOnTestFS.toString());<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      return;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    dataTestDirOnTestFS = getNewDataTestDirOnTestFS();<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 up a new path in test filesystem to be used by tests.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   */<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  private Path getNewDataTestDirOnTestFS() throws IOException {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    //The file system can be either local, mini dfs, or if the configuration<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    //is supplied externally, it can be an external cluster FS. If it is a local<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    //file system, the tests should use getBaseTestDir, otherwise, we can use<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    //the working directory, and create a unique sub dir there<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    FileSystem fs = getTestFileSystem();<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    Path newDataTestDir;<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    String randomStr = getRandomUUID().toString();<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    if (fs.getUri().getScheme().equals(FileSystem.getLocal(conf).getUri().getScheme())) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      newDataTestDir = new Path(getDataTestDir(), randomStr);<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      File dataTestDir = new File(newDataTestDir.toString());<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      if (deleteOnExit()) dataTestDir.deleteOnExit();<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    } else {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      Path base = getBaseTestDirOnTestFS();<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      newDataTestDir = new Path(base, randomStr);<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      if (deleteOnExit()) fs.deleteOnExit(newDataTestDir);<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    return newDataTestDir;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>  /**<a name="line.573"></a>
-<span class="sourceLineNo">574</span>   * Cleans the test data directory on the test filesystem.<a name="line.574"></a>
-<span class="sourceLineNo">575</span>   * @return True if we removed the test dirs<a name="line.575"></a>
-<span class="sourceLineNo">576</span>   * @throws IOException<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   */<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  public boolean cleanupDataTestDirOnTestFS() throws IOException {<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    boolean ret = getTestFileSystem().delete(dataTestDirOnTestFS, true);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    if (ret)<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      dataTestDirOnTestFS = null;<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    return ret;<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>   * Cleans a subdirectory under the test data directory on the test filesystem.<a name="line.586"></a>
-<span class="sourceLineNo">587</span>   * @return True if we removed child<a name="line.587"></a>
-<span class="sourceLineNo">588</span>   * @throws IOException<a name="line.588"></a>
-<span class="sourceLineNo">589</span>   */<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  public boolean cleanupDataTestDirOnTestFS(String subdirName) throws IOException {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    Path cpath = getDataTestDirOnTestFS(subdirName);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return getTestFileSystem().delete(cpath, true);<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>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * Start a minidfscluster.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * @param servers How many DNs to start.<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   * @throws Exception<a name="line.598"></a>
-<span class="sourceLineNo">599</span>   * @see #shutdownMiniDFSCluster()<a name="line.599"></a>
-<span class="sourceLineNo">600</span>   * @return The mini dfs cluster created.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>   */<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  public MiniDFSCluster startMiniDFSCluster(int servers) throws Exception {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    return startMiniDFSCluster(servers, null);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>  }<a name="line.604"></a>
-<span class="sourceLineNo">605</span><a name="line.605"></a>
-<span class="sourceLineNo">606</span>  /**<a name="line.606"></a>
-<span class="sourceLineNo">607</span>   * Start a minidfscluster.<a name="line.607"></a>
-<span class="sourceLineNo">608</span>   * This is useful if you want to run datanode on distinct hosts for things<a name="line.608"></a>
-<span class="sourceLineNo">609</span>   * like HDFS block location verification.<a name="line.609"></a>
-<span class="sourceLineNo">610</span>   * If you start MiniDFSCluster without host names, all instances of the<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * datanodes will have the same host name.<a name="line.611"></a>
-<span class="sourceLineNo">612</span>   * @param hosts hostnames DNs to run on.<a name="line.612"></a>
-<span class="sourceLineNo">613</span>   * @throws Exception<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * @see #shutdownMiniDFSCluster()<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @return The mini dfs cluster created.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   */<a name="line.616"></a>
-<span class="sourceLineNo">617</span>  public MiniDFSCluster startMiniDFSCluster(final String hosts[])<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  throws Exception {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    if ( hosts != null &amp;&amp; hosts.length != 0) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return startMiniDFSCluster(hosts.length, hosts);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    } else {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      return startMiniDFSCluster(1, null);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    }<a name="line.623"></a>
-<span class="sourceLineNo">624</span>  }<a name="line.624"></a>
-<span class="sourceLineNo">625</span><a name="line.625"></a>
-<span class="sourceLineNo">626</span>  /**<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   * Start a minidfscluster.<a name="line.627"></a>
-<span class="sourceLineNo">628</span>   * Can only create one.<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   * @param servers How many DNs to start.<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   * @param hosts hostnames DNs to run on.<a name="line.630"></a>
-<span class="sourceLineNo">631</span>   * @throws Exception<a name="line.631"></a>
-<span class="sourceLineNo">632</span>   * @see #shutdownMiniDFSCluster()<a name="line.632"></a>
-<span class="sourceLineNo">633</span>   * @return The mini dfs cluster created.<a name="line.633"></a>
-<span class="sourceLineNo">634</span>   */<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  public MiniDFSCluster startMiniDFSCluster(int servers, final String hosts[])<a name="line.635"></a>
-<span class="sourceLineNo">636</span>  throws Exception {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    return startMiniDFSCluster(servers, null, hosts);<a name="line.637"></a>
-<span class="sourceLineNo">638</span>  }<a name="line.638"></a>
-<span class="sourceLineNo">639</span><a name="line.639"></a>
-<span class="sourceLineNo">640</span>  private void setFs() throws IOException {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    if(this.dfsCluster == null){<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      LOG.info("Skipping setting fs because dfsCluster is null");<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      return;<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    }<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    FileSystem fs = this.dfsCluster.getFileSystem();<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    FSUtils.setFsDefault(this.conf, new Path(fs.getUri()));<a name="line.646"></a>
-<span class="sourceLineNo">647</span><a name="line.647"></a>
-<span class="sourceLineNo">648</span>    // re-enable this check with dfs<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    conf.unset(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>  }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span>  public MiniDFSCluster startMiniDFSCluster(int servers, final  String racks[], String hosts[])<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      throws Exception {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    createDirsAndSetProperties();<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    EditLogFileOutputStream.setShouldSkipFsyncForTesting(true);<a name="line.655"></a>
-<span class="sourceLineNo">656</span><a name="line.656"></a>
-<span class="sourceLineNo">657</span>    // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    org.apache.log4j.Logger.getLogger(org.apache.hadoop.metrics2.util.MBeans.class).<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        setLevel(org.apache.log4j.Level.ERROR);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    org.apache.log4j.Logger.getLogger(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class).<a name="line.660"></a>
-<span class="sourceLineNo">661</span>        setLevel(org.apache.log4j.Level.ERROR);<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>    TraceUtil.initTracer(conf);<a name="line.663"></a>
-<span class="sourceLineNo">664</span><a name="line.664"></a>
-<span class="sourceLineNo">665</span>    this.dfsCluster = new MiniDFSCluster(0, this.conf, servers, true, true,<a name="line.665"></a>
-<span class="sourceLineNo">666</span>        true, null, racks, hosts, null);<a name="line.666"></a>
-<span class="sourceLineNo">667</span><a name="line.667"></a>
-<span class="sourceLineNo">668</span>    // Set this just-started cluster as our filesystem.<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    setFs();<a name="line.669"></a>
-<span class="sourceLineNo">670</span><a name="line.670"></a>
-<span class="sourceLineNo">671</span>    // Wait for the cluster to be totally up<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    this.dfsCluster.waitClusterUp();<a name="line.672"></a>
-<span class="sourceLineNo">673</span><a name="line.673"></a>
-<span class="sourceLineNo">674</span>    //reset the test directory for test file system<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    dataTestDirOnTestFS = null;<a name="line.675"></a>
-<span class="sourceLineNo">676</span>    String dataTestDir = getDataTestDir().toString();<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    conf.set(HConstants.HBASE_DIR, dataTestDir);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>    return this.dfsCluster;<a name="line.680"></a>
-<span class="sourceLineNo">681</span>  }<a name="line.681"></a>
-<span class="sourceLineNo">682</span><a name="line.682"></a>
-<span class="sourceLineNo">683</span>  public MiniDFSCluster startMiniDFSClusterForTestWAL(int namenodePort) throws IOException {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    createDirsAndSetProperties();<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    dfsCluster = new MiniDFSCluster(namenodePort, conf, 5, false, true, true, null,<a name="line.685"></a>
-<span class="sourceLineNo">686</span>        null, null, null);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>    return dfsCluster;<a name="line.687"></a>
-<span class="sourceLineNo">688</span>  }<a name="line.688"></a>
-<span class="sourceLineNo">689</span><a name="line.689"></a>
-<span class="sourceLineNo">690</span>  /** This is used before starting HDFS and map-reduce mini-clusters */<a name="line.690"></a>
-<span class="sourceLineNo">691</span>  private void createDirsAndSetProperties() throws IOException {<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    setupClusterTestDir();<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    conf.set(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    System.setProperty(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    createDirAndSetProperty("cache_data", "test.cache.data");<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    createDirAndSetProperty("hadoop_tmp", "hadoop.tmp.dir");<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    hadoopLogDir = createDirAndSetProperty("hadoop_logs", "hadoop.log.dir");<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    createDirAndSetProperty("mapred_local", "mapreduce.cluster.local.dir");<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    createDirAndSetProperty("mapred_temp", "mapreduce.cluster.temp.dir");<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    enableShortCircuit();<a name="line.700"></a>
-<span class="sourceLineNo">701</span><a name="line.701"></a>
-<span class="sourceLineNo">702</span>    Path root = getDataTestDirOnTestFS("hadoop");<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    conf.set(MapreduceTestingShim.getMROutputDirProp(),<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      new Path(root, "mapred-output-dir").toString());<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    conf.set("mapreduce.jobtracker.system.dir", new Path(root, "mapred-system-dir").toString());<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    conf.set("mapreduce.jobtracker.staging.root.dir",<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      new Path(root, "mapreduce-jobtracker-staging-root-dir").toString());<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    conf.set("mapreduce.job.working.dir", new Path(root, "mapred-working-dir").toString());<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    conf.set("yarn.app.mapreduce.am.staging-dir",<a name="line.709"></a>
-<span class="sourceLineNo">710</span>      new Path(root, "mapreduce-am-staging-root-dir").toString());<a name="line.710"></a>
-<span class="sourceLineNo">711</span>  }<a name="line.711"></a>
-<span class="sourceLineNo">712</span><a name="line.712"></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>   * &lt;p&gt;Create an HBaseTestingUtility using a default configuration.<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   *<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   *<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   * &lt;p&gt;Previously, there was a distinction between the type of utility returned by<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * at which point they will switch to using mini DFS for storage.<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   */<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  public HBaseTestingUtility() {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    this(HBaseConfiguration.create());<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>   * &lt;p&gt;Create an HBaseTestingUtility using a given configuration.<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   *<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   *<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * &lt;p&gt;Previously, there was a distinction between the type of utility returned by<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.328"></a>
+<span class="sourceLineNo">329</span>   * at which point they will switch to using mini DFS for storage.<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   *<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   * @param conf The configuration to use for further operations<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    super(conf);<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>    // a hbase checksum verification failure will cause unit tests to fail<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>    // Save this for when setting default file:// breaks things<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    if (this.conf.get("fs.defaultFS") != null) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    }<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    // Every cluster is a local cluster until we start DFS<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    // Note that conf could be null, but this.conf will not be<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    String dataTestDir = getDataTestDir().toString();<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    this.conf.set("fs.defaultFS","file:///");<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    // If the value for random ports isn't set set it to true, thus making<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    // tests opt-out for random port assignment<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>  /**<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility()} instead<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * @return a normal HBaseTestingUtility<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  @Deprecated<a name="line.363"></a>
+<span class="sourceLineNo">364</span>  public static HBaseTestingUtility createLocalHTU() {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    return new HBaseTestingUtility();<a name="line.365"></a>
+<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>  /**<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility(Configuration)} instead<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   * @return a normal HBaseTestingUtility<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   */<a name="line.371"></a>
+<span class="sourceLineNo">372</span>  @Deprecated<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  public static HBaseTestingUtility createLocalHTU(Configuration c) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    return new HBaseTestingUtility(c);<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>  /**<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    closeRegionAndWAL((HRegion)r);<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>  /**<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   */<a name="line.386"></a>
+<span class="sourceLineNo">387</span>  public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    if (r == null) return;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    r.close();<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    if (r.getWAL() == null) return;<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    r.getWAL().close();<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>  /**<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * Returns this classes's instance of {@link Configuration}.  Be careful how<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * you use the returned Configuration since {@link Connection} instances<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   * can be shared.  The Map of Connections is keyed by the Configuration.  If<a name="line.397"></a>
+<span class="sourceLineNo">398</span>   * say, a Connection was being used against a cluster that had been shutdown,<a name="line.398"></a>
+<span class="sourceLineNo">399</span>   * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.399"></a>
+<span class="sourceLineNo">400</span>   * be wholesome.  Rather than use the return direct, its usually best to<a name="line.400"></a>
+<span class="sourceLineNo">401</span>   * make a copy and use that.  Do<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   * &lt;code&gt;Configuration c = new Configuration(INSTANCE.getConfiguration());&lt;/code&gt;<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * @return Instance of Configuration.<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  @Override<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  public Configuration getConfiguration() {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    return super.getConfiguration();<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 void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    this.hbaseCluster = hbaseCluster;<a name="line.411"></a>
+<span class="sourceLineNo">412</span>  }<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>  /**<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   * Give it a random name so can have many concurrent tests running if<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * we need to.  It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * System property, as it's what minidfscluster bases<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   * it data dir on.  Moding a System property is not the way to do concurrent<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * instances -- another instance could grab the temporary<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * value unintentionally -- but not anything can do about it at moment;<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * single instance only is how the minidfscluster works.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   *<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * We also create the underlying directory for<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   *  hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   *  in the conf, and as a system property for hadoop.tmp.dir<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   *<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @return The calculated data test build directory, if newly-created.<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   */<a name="line.429"></a>
+<span class="sourceLineNo">430</span>  @Override<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  protected Path setupDataTestDir() {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    Path testPath = super.setupDataTestDir();<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    if (null == testPath) {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      return null;<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    }<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span>    createSubDirAndSystemProperty(<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      "hadoop.log.dir",<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      testPath, "hadoop-log-dir");<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>    // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    //  we want our own value to ensure uniqueness on the same machine<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    createSubDirAndSystemProperty(<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      "hadoop.tmp.dir",<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      testPath, "hadoop-tmp-dir");<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>    // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    createSubDir(<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      "mapreduce.cluster.local.dir",<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      testPath, "mapred-local-dir");<a name="line.450"></a>
+<span class="sourceLineNo">451</span><a name="line.451"></a>
+<span class="sourceLineNo">452</span>    return testPath;<a name="line.452"></a>
+<span class="sourceLineNo">453</span>  }<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>  private void createSubDirAndSystemProperty(<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    String propertyName, Path parent, String subDirName){<a name="line.456"></a>
+<span class="sourceLineNo">457</span><a name="line.457"></a>
+<span class="sourceLineNo">458</span>    String sysValue = System.getProperty(propertyName);<a name="line.458"></a>
+<span class="sourceLineNo">459</span><a name="line.459"></a>
+<span class="sourceLineNo">460</span>    if (sysValue != null) {<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      // There is already a value set. So we do nothing but hope<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      //  that there will be no conflicts<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        sysValue + " so I do NOT create it in " + parent);<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      String confValue = conf.get(propertyName);<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      if (confValue != null &amp;&amp; !confValue.endsWith(sysValue)){<a name="line.466"></a>
+<span class="sourceLineNo">467</span>       LOG.warn(<a name="line.467"></a>
+<span class="sourceLineNo">468</span>         propertyName + " property value differs in configuration and system: "+<a name="line.468"></a>
+<span class="sourceLineNo">469</span>         "Configuration="+confValue+" while System="+sysValue+<a name="line.469"></a>
+<span class="sourceLineNo">470</span>         " Erasing configuration value by system value."<a name="line.470"></a>
+<span class="sourceLineNo">471</span>       );<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      }<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      conf.set(propertyName, sysValue);<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    } else {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      // Ok, it's not set, so we create it as a subdirectory<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      createSubDir(propertyName, parent, subDirName);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      System.setProperty(propertyName, conf.get(propertyName));<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
+<span class="sourceLineNo">480</span><a name="line.480"></a>
+<span class="sourceLineNo">481</span>  /**<a name="line.481"></a>
+<span class="sourceLineNo">482</span>   * @return Where to write test data on the test filesystem; Returns working directory<a name="line.482"></a>
+<span class="sourceLineNo">483</span>   * for the test filesystem by default<a name="line.483"></a>
+<span class="sourceLineNo">484</span>   * @see #setupDataTestDirOnTestFS()<a name="line.484"></a>
+<span class="sourceLineNo">485</span>   * @see #getTestFileSystem()<a name="line.485"></a>
+<span class="sourceLineNo">486</span>   */<a name="line.486"></a>
+<span class="sourceLineNo">487</span>  private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    FileSystem fs = getTestFileSystem();<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.489"></a>
+<span class="sourceLineNo">490</span>  }<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>   * @return META table descriptor<a name="line.493"></a>
+<span class="sourceLineNo">494</span>   * @deprecated since 2.0 version and will be removed in 3.0 version.<a name="line.494"></a>
+<span class="sourceLineNo">495</span>   *             use {@link #getMetaTableDescriptorBuilder()}<a name="line.495"></a>
+<span class="sourceLineNo">496</span>   */<a name="line.496"></a>
+<span class="sourceLineNo">497</span>  @Deprecated<a name="line.497"></a>
+<span class="sourceLineNo">498</span>  public HTableDescriptor getMetaTableDescriptor() {<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    return new ImmutableHTableDescriptor(getMetaTableDescriptorBuilder().build());<a name="line.499"></a>
+<span class="sourceLineNo">500</span>  }<a name="line.500"></a>
+<span class="sourceLineNo">501</span><a name="line.501"></a>
+<span class="sourceLineNo">502</span>  /**<a name="line.502"></a>
+<span class="sourceLineNo">503</span>   * @return META table descriptor<a name="line.503"></a>
+<span class="sourceLineNo">504</span>   */<a name="line.504"></a>
+<span class="sourceLineNo">505</span>  public TableDescriptorBuilder getMetaTableDescriptorBuilder() {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    try {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      return FSTableDescriptors.createMetaTableDescriptorBuilder(conf);<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    } catch (IOException e) {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      throw new RuntimeException("Unable to create META table descriptor", e);<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><a name="line.512"></a>
+<span class="sourceLineNo">513</span>  /**<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.514"></a>
+<span class="sourceLineNo">515</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.515"></a>
+<span class="sourceLineNo">516</span>   * if the test relies on it.<a name="line.516"></a>
+<span class="sourceLineNo">517</span>   * @return a unique path in the test filesystem<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   */<a name="line.518"></a>
+<span class="sourceLineNo">519</span>  public Path getDataTestDirOnTestFS() throws IOException {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    if (dataTestDirOnTestFS == null) {<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      setupDataTestDirOnTestFS();<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>    return dataTestDirOnTestFS;<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  }<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>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.528"></a>
+<span class="sourceLineNo">529</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.529"></a>
+<span class="sourceLineNo">530</span>   * if the test relies on it.<a name="line.530"></a>
+<span class="sourceLineNo">531</span>   * @return a unique path in the test filesystem<a name="line.531"></a>
+<span class="sourceLineNo">532</span>   * @param subdirName name of the subdir to create under the base test dir<a name="line.532"></a>
+<span class="sourceLineNo">533</span>   */<a name="line.533"></a>
+<span class="sourceLineNo">534</span>  public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    return new Path(getDataTestDir

<TRUNCATED>

[24/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/CorruptedWALProcedureStoreException.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/CorruptedWALProcedureStoreException.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/CorruptedWALProcedureStoreException.html
index 71e3294..7a77d9e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/CorruptedWALProcedureStoreException.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/CorruptedWALProcedureStoreException.html
@@ -23,19 +23,19 @@
 <span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
 <span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
-<span class="sourceLineNo">018</span><a name="line.18"></a>
-<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.procedure2.store.wal;<a name="line.19"></a>
-<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>/**<a name="line.25"></a>
-<span class="sourceLineNo">026</span> * Thrown when a procedure WAL is corrupted<a name="line.26"></a>
-<span class="sourceLineNo">027</span> */<a name="line.27"></a>
-<span class="sourceLineNo">028</span>@InterfaceAudience.Private<a name="line.28"></a>
-<span class="sourceLineNo">029</span>@InterfaceStability.Stable<a name="line.29"></a>
-<span class="sourceLineNo">030</span>public class CorruptedWALProcedureStoreException extends HBaseIOException {<a name="line.30"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.procedure2.store.wal;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.21"></a>
+<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">023</span>/**<a name="line.23"></a>
+<span class="sourceLineNo">024</span> * Thrown when a procedure WAL is corrupted<a name="line.24"></a>
+<span class="sourceLineNo">025</span> */<a name="line.25"></a>
+<span class="sourceLineNo">026</span>@InterfaceAudience.Private<a name="line.26"></a>
+<span class="sourceLineNo">027</span>public class CorruptedWALProcedureStoreException extends HBaseIOException {<a name="line.27"></a>
+<span class="sourceLineNo">028</span><a name="line.28"></a>
+<span class="sourceLineNo">029</span>  private static final long serialVersionUID = -3407300445435898074L;<a name="line.29"></a>
+<span class="sourceLineNo">030</span><a name="line.30"></a>
 <span class="sourceLineNo">031</span>  /** default constructor */<a name="line.31"></a>
 <span class="sourceLineNo">032</span>  public CorruptedWALProcedureStoreException() {<a name="line.32"></a>
 <span class="sourceLineNo">033</span>    super();<a name="line.33"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html
index 37cde6d..d69564e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html
@@ -23,201 +23,198 @@
 <span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
 <span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
-<span class="sourceLineNo">018</span><a name="line.18"></a>
-<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.procedure2.store.wal;<a name="line.19"></a>
-<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span><a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.fs.FileStatus;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.fs.FileSystem;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.fs.Path;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.slf4j.Logger;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.slf4j.LoggerFactory;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALTrailer;<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>/**<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * Describes a WAL File<a name="line.37"></a>
-<span class="sourceLineNo">038</span> */<a name="line.38"></a>
-<span class="sourceLineNo">039</span>@InterfaceAudience.Private<a name="line.39"></a>
-<span class="sourceLineNo">040</span>@InterfaceStability.Evolving<a name="line.40"></a>
-<span class="sourceLineNo">041</span>public class ProcedureWALFile implements Comparable&lt;ProcedureWALFile&gt; {<a name="line.41"></a>
-<span class="sourceLineNo">042</span>  private static final Logger LOG = LoggerFactory.getLogger(ProcedureWALFile.class);<a name="line.42"></a>
-<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>  private ProcedureWALHeader header;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  private FSDataInputStream stream;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>  private FileSystem fs;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  private Path logFile;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  private long startPos;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  private long minProcId;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private long maxProcId;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  private long logSize;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  private long timestamp;<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span>  public ProcedureStoreTracker getTracker() {<a name="line.54"></a>
-<span class="sourceLineNo">055</span>    return tracker;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  }<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  private final ProcedureStoreTracker tracker = new ProcedureStoreTracker();<a name="line.58"></a>
-<span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span>  public ProcedureWALFile(final FileSystem fs, final FileStatus logStatus) {<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    this.fs = fs;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    this.logFile = logStatus.getPath();<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    this.logSize = logStatus.getLen();<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    this.timestamp = logStatus.getModificationTime();<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    tracker.setPartialFlag(true);<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  }<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>  public ProcedureWALFile(FileSystem fs, Path logFile, ProcedureWALHeader header,<a name="line.68"></a>
-<span class="sourceLineNo">069</span>      long startPos, long timestamp) {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    this.fs = fs;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    this.header = header;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    this.logFile = logFile;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    this.startPos = startPos;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    this.logSize = startPos;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    this.timestamp = timestamp;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    tracker.setPartialFlag(true);<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  }<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  public void open() throws IOException {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    if (stream == null) {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      stream = fs.open(logFile);<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>    if (header == null) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      header = ProcedureWALFormat.readHeader(stream);<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      startPos = stream.getPos();<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    } else {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      stream.seek(startPos);<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    }<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  }<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  public ProcedureWALTrailer readTrailer() throws IOException {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    try {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      return ProcedureWALFormat.readTrailer(stream, startPos, logSize);<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    } finally {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      stream.seek(startPos);<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>  public void readTracker() throws IOException {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    ProcedureWALTrailer trailer = readTrailer();<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    try {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      stream.seek(trailer.getTrackerPos());<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      final ProcedureProtos.ProcedureStoreTracker trackerProtoBuf =<a name="line.104"></a>
-<span class="sourceLineNo">105</span>          ProcedureProtos.ProcedureStoreTracker.parseDelimitedFrom(stream);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>      tracker.resetToProto(trackerProtoBuf);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    } finally {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      stream.seek(startPos);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  }<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  public void updateLocalTracker(ProcedureStoreTracker tracker) {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    this.tracker.resetTo(tracker);<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>  public void close() {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    if (stream == null) return;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    try {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      stream.close();<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    } catch (IOException e) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      LOG.warn("unable to close the wal file: " + logFile, e);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    } finally {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      stream = null;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    }<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  public FSDataInputStream getStream() {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    return stream;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  }<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>  public ProcedureWALHeader getHeader() {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    return header;<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>  public long getTimestamp() {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    return timestamp;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  }<a name="line.137"></a>
-<span class="sourceLineNo">138</span><a name="line.138"></a>
-<span class="sourceLineNo">139</span>  public boolean isCompacted() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    return header.getType() == ProcedureWALFormat.LOG_TYPE_COMPACTED;<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  }<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>  public long getLogId() {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    return header.getLogId();<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>  public long getSize() {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    return logSize;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  }<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>  /**<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * Used to update in-progress log sizes. the FileStatus will report 0 otherwise.<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   */<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  void addToSize(long size) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    this.logSize += size;<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>  public void removeFile(final Path walArchiveDir) throws IOException {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    close();<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    boolean archived = false;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    if (walArchiveDir != null) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      Path archivedFile = new Path(walArchiveDir, logFile.getName());<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      LOG.info("Archiving " + logFile + " to " + archivedFile);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      if (!fs.rename(logFile, archivedFile)) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        LOG.warn("Failed archive of " + logFile + ", deleting");<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      } else {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        archived = true;<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>    if (!archived) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      if (!fs.delete(logFile, false)) {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>        LOG.warn("Failed delete of " + logFile);<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>  }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>  public void setProcIds(long minId, long maxId) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    this.minProcId = minId;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    this.maxProcId = maxId;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  }<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>  public long getMinProcId() {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    return minProcId;<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>  public long getMaxProcId() {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    return maxProcId;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  @Override<a name="line.190"></a>
-<span class="sourceLineNo">191</span>  public int compareTo(final ProcedureWALFile other) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    long diff = header.getLogId() - other.header.getLogId();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    return (diff &lt; 0) ? -1 : (diff &gt; 0) ? 1 : 0;<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>  @Override<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  public boolean equals(Object o) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    if (this == o) return true;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    if (!(o instanceof ProcedureWALFile)) return false;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    return compareTo((ProcedureWALFile)o) == 0;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>  }<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>  @Override<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  public int hashCode() {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    return logFile.hashCode();<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>  @Override<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  public String toString() {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    return logFile.toString();<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>}<a name="line.212"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.procedure2.store.wal;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.fs.FileStatus;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.fs.FileSystem;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.fs.Path;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.slf4j.Logger;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.slf4j.LoggerFactory;<a name="line.28"></a>
+<span class="sourceLineNo">029</span><a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALTrailer;<a name="line.32"></a>
+<span class="sourceLineNo">033</span><a name="line.33"></a>
+<span class="sourceLineNo">034</span>/**<a name="line.34"></a>
+<span class="sourceLineNo">035</span> * Describes a WAL File<a name="line.35"></a>
+<span class="sourceLineNo">036</span> */<a name="line.36"></a>
+<span class="sourceLineNo">037</span>@InterfaceAudience.Private<a name="line.37"></a>
+<span class="sourceLineNo">038</span>public class ProcedureWALFile implements Comparable&lt;ProcedureWALFile&gt; {<a name="line.38"></a>
+<span class="sourceLineNo">039</span>  private static final Logger LOG = LoggerFactory.getLogger(ProcedureWALFile.class);<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>  private ProcedureWALHeader header;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  private FSDataInputStream stream;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>  private FileSystem fs;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>  private Path logFile;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>  private long startPos;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>  private long minProcId;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private long maxProcId;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  private long logSize;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private long timestamp;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  public ProcedureStoreTracker getTracker() {<a name="line.51"></a>
+<span class="sourceLineNo">052</span>    return tracker;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  }<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>  private final ProcedureStoreTracker tracker = new ProcedureStoreTracker();<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  public ProcedureWALFile(final FileSystem fs, final FileStatus logStatus) {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    this.fs = fs;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    this.logFile = logStatus.getPath();<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    this.logSize = logStatus.getLen();<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    this.timestamp = logStatus.getModificationTime();<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    tracker.setPartialFlag(true);<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  }<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>  public ProcedureWALFile(FileSystem fs, Path logFile, ProcedureWALHeader header,<a name="line.65"></a>
+<span class="sourceLineNo">066</span>      long startPos, long timestamp) {<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    this.fs = fs;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    this.header = header;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    this.logFile = logFile;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    this.startPos = startPos;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    this.logSize = startPos;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    this.timestamp = timestamp;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    tracker.setPartialFlag(true);<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>  public void open() throws IOException {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    if (stream == null) {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      stream = fs.open(logFile);<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    }<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>    if (header == null) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      header = ProcedureWALFormat.readHeader(stream);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      startPos = stream.getPos();<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    } else {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      stream.seek(startPos);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    }<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  }<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>  public ProcedureWALTrailer readTrailer() throws IOException {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    try {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      return ProcedureWALFormat.readTrailer(stream, startPos, logSize);<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    } finally {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      stream.seek(startPos);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    }<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public void readTracker() throws IOException {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    ProcedureWALTrailer trailer = readTrailer();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    try {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      stream.seek(trailer.getTrackerPos());<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      final ProcedureProtos.ProcedureStoreTracker trackerProtoBuf =<a name="line.101"></a>
+<span class="sourceLineNo">102</span>          ProcedureProtos.ProcedureStoreTracker.parseDelimitedFrom(stream);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      tracker.resetToProto(trackerProtoBuf);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    } finally {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      stream.seek(startPos);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public void updateLocalTracker(ProcedureStoreTracker tracker) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    this.tracker.resetTo(tracker);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>  public void close() {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    if (stream == null) return;<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    try {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      stream.close();<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    } catch (IOException e) {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      LOG.warn("unable to close the wal file: " + logFile, e);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    } finally {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      stream = null;<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>  public FSDataInputStream getStream() {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    return stream;<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>  public ProcedureWALHeader getHeader() {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    return header;<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>  public long getTimestamp() {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    return timestamp;<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>  public boolean isCompacted() {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    return header.getType() == ProcedureWALFormat.LOG_TYPE_COMPACTED;<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  }<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>  public long getLogId() {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    return header.getLogId();<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>  public long getSize() {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    return logSize;<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>   * Used to update in-progress log sizes. the FileStatus will report 0 otherwise.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   */<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  void addToSize(long size) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    this.logSize += size;<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>  public void removeFile(final Path walArchiveDir) throws IOException {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    close();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    boolean archived = false;<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    if (walArchiveDir != null) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      Path archivedFile = new Path(walArchiveDir, logFile.getName());<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      LOG.info("Archiving " + logFile + " to " + archivedFile);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      if (!fs.rename(logFile, archivedFile)) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>        LOG.warn("Failed archive of " + logFile + ", deleting");<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      } else {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        archived = true;<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      }<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    if (!archived) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      if (!fs.delete(logFile, false)) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>        LOG.warn("Failed delete of " + logFile);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      }<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public void setProcIds(long minId, long maxId) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    this.minProcId = minId;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    this.maxProcId = maxId;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  }<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>  public long getMinProcId() {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    return minProcId;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>  }<a name="line.181"></a>
+<span class="sourceLineNo">182</span><a name="line.182"></a>
+<span class="sourceLineNo">183</span>  public long getMaxProcId() {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    return maxProcId;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>  @Override<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  public int compareTo(final ProcedureWALFile other) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    long diff = header.getLogId() - other.header.getLogId();<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    return (diff &lt; 0) ? -1 : (diff &gt; 0) ? 1 : 0;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>  @Override<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  public boolean equals(Object o) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    if (this == o) return true;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    if (!(o instanceof ProcedureWALFile)) return false;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    return compareTo((ProcedureWALFile)o) == 0;<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>  @Override<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  public int hashCode() {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    return logFile.hashCode();<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>  @Override<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  public String toString() {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    return logFile.toString();<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.InvalidWALDataException.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.InvalidWALDataException.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.InvalidWALDataException.html
index 4a42bda..30963fa 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.InvalidWALDataException.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.InvalidWALDataException.html
@@ -26,83 +26,83 @@
 <span class="sourceLineNo">018</span><a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.procedure2.store.wal;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hbase.thirdparty.com.google.protobuf.InvalidProtocolBufferException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span><a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.io.InputStream;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.io.OutputStream;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Iterator;<a name="line.26"></a>
-<span class="sourceLineNo">027</span><a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.slf4j.Logger;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.slf4j.LoggerFactory;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureLoader;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.procedure2.util.ByteSlot;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALTrailer;<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> * Helper class that contains the WAL serialization utils.<a name="line.45"></a>
-<span class="sourceLineNo">046</span> */<a name="line.46"></a>
-<span class="sourceLineNo">047</span>@InterfaceAudience.Private<a name="line.47"></a>
-<span class="sourceLineNo">048</span>@InterfaceStability.Evolving<a name="line.48"></a>
-<span class="sourceLineNo">049</span>public final class ProcedureWALFormat {<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private static final Logger LOG = LoggerFactory.getLogger(ProcedureWALFormat.class);<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>  static final byte LOG_TYPE_STREAM = 0;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  static final byte LOG_TYPE_COMPACTED = 1;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  static final byte LOG_TYPE_MAX_VALID = 1;<a name="line.54"></a>
+<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.io.InputStream;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.OutputStream;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.Iterator;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureLoader;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.procedure2.util.ByteSlot;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.33"></a>
+<span class="sourceLineNo">034</span><a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hbase.thirdparty.com.google.protobuf.InvalidProtocolBufferException;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALTrailer;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>/**<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * Helper class that contains the WAL serialization utils.<a name="line.42"></a>
+<span class="sourceLineNo">043</span> */<a name="line.43"></a>
+<span class="sourceLineNo">044</span>@InterfaceAudience.Private<a name="line.44"></a>
+<span class="sourceLineNo">045</span>public final class ProcedureWALFormat {<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>  static final byte LOG_TYPE_STREAM = 0;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  static final byte LOG_TYPE_COMPACTED = 1;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  static final byte LOG_TYPE_MAX_VALID = 1;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  static final byte HEADER_VERSION = 1;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  static final byte TRAILER_VERSION = 1;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  static final long HEADER_MAGIC = 0x31764c4157637250L;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  static final long TRAILER_MAGIC = 0x50726357414c7631L;<a name="line.54"></a>
 <span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  static final byte HEADER_VERSION = 1;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  static final byte TRAILER_VERSION = 1;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  static final long HEADER_MAGIC = 0x31764c4157637250L;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  static final long TRAILER_MAGIC = 0x50726357414c7631L;<a name="line.59"></a>
+<span class="sourceLineNo">056</span>  @InterfaceAudience.Private<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  public static class InvalidWALDataException extends IOException {<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>    private static final long serialVersionUID = 5471733223070202196L;<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 static class InvalidWALDataException extends IOException {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    public InvalidWALDataException(String s) {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>      super(s);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    }<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>    public InvalidWALDataException(Throwable t) {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>      super(t);<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    }<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  }<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  interface Loader extends ProcedureLoader {<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    void markCorruptedWAL(ProcedureWALFile log, IOException e);<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  }<a name="line.74"></a>
+<span class="sourceLineNo">061</span>    public InvalidWALDataException(String s) {<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      super(s);<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    }<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>    public InvalidWALDataException(Throwable t) {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>      super(t);<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    }<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  }<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  interface Loader extends ProcedureLoader {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    void markCorruptedWAL(ProcedureWALFile log, IOException e);<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>  private ProcedureWALFormat() {}<a name="line.74"></a>
 <span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private ProcedureWALFormat() {}<a name="line.76"></a>
-<span class="sourceLineNo">077</span><a name="line.77"></a>
-<span class="sourceLineNo">078</span>  public static void load(final Iterator&lt;ProcedureWALFile&gt; logs,<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      final ProcedureStoreTracker tracker, final Loader loader) throws IOException {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    final ProcedureWALFormatReader reader = new ProcedureWALFormatReader(tracker, loader);<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    tracker.setKeepDeletes(true);<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    try {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      // Ignore the last log which is current active log.<a name="line.83"></a>
-<span class="sourceLineNo">084</span>      while (logs.hasNext()) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>        ProcedureWALFile log = logs.next();<a name="line.85"></a>
-<span class="sourceLineNo">086</span>        log.open();<a name="line.86"></a>
-<span class="sourceLineNo">087</span>        try {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>          reader.read(log);<a name="line.88"></a>
-<span class="sourceLineNo">089</span>        } finally {<a name="line.89"></a>
-<span class="sourceLineNo">090</span>          log.close();<a name="line.90"></a>
-<span class="sourceLineNo">091</span>        }<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      }<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      reader.finish();<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>      // The tracker is now updated with all the procedures read from the logs<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      tracker.setPartialFlag(false);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      tracker.resetUpdates();<a name="line.97"></a>
+<span class="sourceLineNo">076</span>  public static void load(Iterator&lt;ProcedureWALFile&gt; logs, ProcedureStoreTracker tracker,<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      Loader loader) throws IOException {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    ProcedureWALFormatReader reader = new ProcedureWALFormatReader(tracker, loader);<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    tracker.setKeepDeletes(true);<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    try {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      // Ignore the last log which is current active log.<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      while (logs.hasNext()) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>        ProcedureWALFile log = logs.next();<a name="line.83"></a>
+<span class="sourceLineNo">084</span>        log.open();<a name="line.84"></a>
+<span class="sourceLineNo">085</span>        try {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>          reader.read(log);<a name="line.86"></a>
+<span class="sourceLineNo">087</span>        } finally {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>          log.close();<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>      reader.finish();<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>      // The tracker is now updated with all the procedures read from the logs<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      if (tracker.isPartial()) {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>        tracker.setPartialFlag(false);<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      }<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      tracker.resetModified();<a name="line.97"></a>
 <span class="sourceLineNo">098</span>    } finally {<a name="line.98"></a>
 <span class="sourceLineNo">099</span>      tracker.setKeepDeletes(false);<a name="line.99"></a>
 <span class="sourceLineNo">100</span>    }<a name="line.100"></a>
@@ -213,7 +213,7 @@
 <span class="sourceLineNo">205</span>  }<a name="line.205"></a>
 <span class="sourceLineNo">206</span><a name="line.206"></a>
 <span class="sourceLineNo">207</span>  public static void writeEntry(ByteSlot slot, ProcedureWALEntry.Type type,<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      Procedure proc, Procedure[] subprocs) throws IOException {<a name="line.208"></a>
+<span class="sourceLineNo">208</span>      Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs) throws IOException {<a name="line.208"></a>
 <span class="sourceLineNo">209</span>    final ProcedureWALEntry.Builder builder = ProcedureWALEntry.newBuilder();<a name="line.209"></a>
 <span class="sourceLineNo">210</span>    builder.setType(type);<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    builder.addProcedure(ProcedureUtil.convertToProtoProcedure(proc));<a name="line.211"></a>
@@ -225,17 +225,17 @@
 <span class="sourceLineNo">217</span>    builder.build().writeDelimitedTo(slot);<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>  public static void writeInsert(ByteSlot slot, Procedure proc)<a name="line.220"></a>
+<span class="sourceLineNo">220</span>  public static void writeInsert(ByteSlot slot, Procedure&lt;?&gt; proc)<a name="line.220"></a>
 <span class="sourceLineNo">221</span>      throws IOException {<a name="line.221"></a>
 <span class="sourceLineNo">222</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_INIT, proc, null);<a name="line.222"></a>
 <span class="sourceLineNo">223</span>  }<a name="line.223"></a>
 <span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>  public static void writeInsert(ByteSlot slot, Procedure proc, Procedure[] subprocs)<a name="line.225"></a>
+<span class="sourceLineNo">225</span>  public static void writeInsert(ByteSlot slot, Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs)<a name="line.225"></a>
 <span class="sourceLineNo">226</span>      throws IOException {<a name="line.226"></a>
 <span class="sourceLineNo">227</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_INSERT, proc, subprocs);<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>  public static void writeUpdate(ByteSlot slot, Procedure proc)<a name="line.230"></a>
+<span class="sourceLineNo">230</span>  public static void writeUpdate(ByteSlot slot, Procedure&lt;?&gt; proc)<a name="line.230"></a>
 <span class="sourceLineNo">231</span>      throws IOException {<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_UPDATE, proc, null);<a name="line.232"></a>
 <span class="sourceLineNo">233</span>  }<a name="line.233"></a>
@@ -248,7 +248,7 @@
 <span class="sourceLineNo">240</span>    builder.build().writeDelimitedTo(slot);<a name="line.240"></a>
 <span class="sourceLineNo">241</span>  }<a name="line.241"></a>
 <span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public static void writeDelete(ByteSlot slot, Procedure proc, long[] subprocs)<a name="line.243"></a>
+<span class="sourceLineNo">243</span>  public static void writeDelete(ByteSlot slot, Procedure&lt;?&gt; proc, long[] subprocs)<a name="line.243"></a>
 <span class="sourceLineNo">244</span>      throws IOException {<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    final ProcedureWALEntry.Builder builder = ProcedureWALEntry.newBuilder();<a name="line.245"></a>
 <span class="sourceLineNo">246</span>    builder.setType(ProcedureWALEntry.Type.PROCEDURE_WAL_DELETE);<a name="line.246"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.Loader.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.Loader.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.Loader.html
index 4a42bda..30963fa 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.Loader.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.Loader.html
@@ -26,83 +26,83 @@
 <span class="sourceLineNo">018</span><a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.procedure2.store.wal;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hbase.thirdparty.com.google.protobuf.InvalidProtocolBufferException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span><a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.io.InputStream;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.io.OutputStream;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Iterator;<a name="line.26"></a>
-<span class="sourceLineNo">027</span><a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.slf4j.Logger;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.slf4j.LoggerFactory;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureLoader;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.procedure2.util.ByteSlot;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALTrailer;<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> * Helper class that contains the WAL serialization utils.<a name="line.45"></a>
-<span class="sourceLineNo">046</span> */<a name="line.46"></a>
-<span class="sourceLineNo">047</span>@InterfaceAudience.Private<a name="line.47"></a>
-<span class="sourceLineNo">048</span>@InterfaceStability.Evolving<a name="line.48"></a>
-<span class="sourceLineNo">049</span>public final class ProcedureWALFormat {<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private static final Logger LOG = LoggerFactory.getLogger(ProcedureWALFormat.class);<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>  static final byte LOG_TYPE_STREAM = 0;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  static final byte LOG_TYPE_COMPACTED = 1;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  static final byte LOG_TYPE_MAX_VALID = 1;<a name="line.54"></a>
+<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.io.InputStream;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.OutputStream;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.Iterator;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureLoader;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.procedure2.util.ByteSlot;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.33"></a>
+<span class="sourceLineNo">034</span><a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hbase.thirdparty.com.google.protobuf.InvalidProtocolBufferException;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALTrailer;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>/**<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * Helper class that contains the WAL serialization utils.<a name="line.42"></a>
+<span class="sourceLineNo">043</span> */<a name="line.43"></a>
+<span class="sourceLineNo">044</span>@InterfaceAudience.Private<a name="line.44"></a>
+<span class="sourceLineNo">045</span>public final class ProcedureWALFormat {<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>  static final byte LOG_TYPE_STREAM = 0;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  static final byte LOG_TYPE_COMPACTED = 1;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  static final byte LOG_TYPE_MAX_VALID = 1;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  static final byte HEADER_VERSION = 1;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  static final byte TRAILER_VERSION = 1;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  static final long HEADER_MAGIC = 0x31764c4157637250L;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  static final long TRAILER_MAGIC = 0x50726357414c7631L;<a name="line.54"></a>
 <span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  static final byte HEADER_VERSION = 1;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  static final byte TRAILER_VERSION = 1;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  static final long HEADER_MAGIC = 0x31764c4157637250L;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  static final long TRAILER_MAGIC = 0x50726357414c7631L;<a name="line.59"></a>
+<span class="sourceLineNo">056</span>  @InterfaceAudience.Private<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  public static class InvalidWALDataException extends IOException {<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>    private static final long serialVersionUID = 5471733223070202196L;<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 static class InvalidWALDataException extends IOException {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    public InvalidWALDataException(String s) {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>      super(s);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    }<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>    public InvalidWALDataException(Throwable t) {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>      super(t);<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    }<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  }<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  interface Loader extends ProcedureLoader {<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    void markCorruptedWAL(ProcedureWALFile log, IOException e);<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  }<a name="line.74"></a>
+<span class="sourceLineNo">061</span>    public InvalidWALDataException(String s) {<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      super(s);<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    }<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>    public InvalidWALDataException(Throwable t) {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>      super(t);<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    }<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  }<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  interface Loader extends ProcedureLoader {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    void markCorruptedWAL(ProcedureWALFile log, IOException e);<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>  private ProcedureWALFormat() {}<a name="line.74"></a>
 <span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private ProcedureWALFormat() {}<a name="line.76"></a>
-<span class="sourceLineNo">077</span><a name="line.77"></a>
-<span class="sourceLineNo">078</span>  public static void load(final Iterator&lt;ProcedureWALFile&gt; logs,<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      final ProcedureStoreTracker tracker, final Loader loader) throws IOException {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    final ProcedureWALFormatReader reader = new ProcedureWALFormatReader(tracker, loader);<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    tracker.setKeepDeletes(true);<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    try {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      // Ignore the last log which is current active log.<a name="line.83"></a>
-<span class="sourceLineNo">084</span>      while (logs.hasNext()) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>        ProcedureWALFile log = logs.next();<a name="line.85"></a>
-<span class="sourceLineNo">086</span>        log.open();<a name="line.86"></a>
-<span class="sourceLineNo">087</span>        try {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>          reader.read(log);<a name="line.88"></a>
-<span class="sourceLineNo">089</span>        } finally {<a name="line.89"></a>
-<span class="sourceLineNo">090</span>          log.close();<a name="line.90"></a>
-<span class="sourceLineNo">091</span>        }<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      }<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      reader.finish();<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>      // The tracker is now updated with all the procedures read from the logs<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      tracker.setPartialFlag(false);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      tracker.resetUpdates();<a name="line.97"></a>
+<span class="sourceLineNo">076</span>  public static void load(Iterator&lt;ProcedureWALFile&gt; logs, ProcedureStoreTracker tracker,<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      Loader loader) throws IOException {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    ProcedureWALFormatReader reader = new ProcedureWALFormatReader(tracker, loader);<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    tracker.setKeepDeletes(true);<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    try {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      // Ignore the last log which is current active log.<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      while (logs.hasNext()) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>        ProcedureWALFile log = logs.next();<a name="line.83"></a>
+<span class="sourceLineNo">084</span>        log.open();<a name="line.84"></a>
+<span class="sourceLineNo">085</span>        try {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>          reader.read(log);<a name="line.86"></a>
+<span class="sourceLineNo">087</span>        } finally {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>          log.close();<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>      reader.finish();<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>      // The tracker is now updated with all the procedures read from the logs<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      if (tracker.isPartial()) {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>        tracker.setPartialFlag(false);<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      }<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      tracker.resetModified();<a name="line.97"></a>
 <span class="sourceLineNo">098</span>    } finally {<a name="line.98"></a>
 <span class="sourceLineNo">099</span>      tracker.setKeepDeletes(false);<a name="line.99"></a>
 <span class="sourceLineNo">100</span>    }<a name="line.100"></a>
@@ -213,7 +213,7 @@
 <span class="sourceLineNo">205</span>  }<a name="line.205"></a>
 <span class="sourceLineNo">206</span><a name="line.206"></a>
 <span class="sourceLineNo">207</span>  public static void writeEntry(ByteSlot slot, ProcedureWALEntry.Type type,<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      Procedure proc, Procedure[] subprocs) throws IOException {<a name="line.208"></a>
+<span class="sourceLineNo">208</span>      Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs) throws IOException {<a name="line.208"></a>
 <span class="sourceLineNo">209</span>    final ProcedureWALEntry.Builder builder = ProcedureWALEntry.newBuilder();<a name="line.209"></a>
 <span class="sourceLineNo">210</span>    builder.setType(type);<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    builder.addProcedure(ProcedureUtil.convertToProtoProcedure(proc));<a name="line.211"></a>
@@ -225,17 +225,17 @@
 <span class="sourceLineNo">217</span>    builder.build().writeDelimitedTo(slot);<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>  public static void writeInsert(ByteSlot slot, Procedure proc)<a name="line.220"></a>
+<span class="sourceLineNo">220</span>  public static void writeInsert(ByteSlot slot, Procedure&lt;?&gt; proc)<a name="line.220"></a>
 <span class="sourceLineNo">221</span>      throws IOException {<a name="line.221"></a>
 <span class="sourceLineNo">222</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_INIT, proc, null);<a name="line.222"></a>
 <span class="sourceLineNo">223</span>  }<a name="line.223"></a>
 <span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>  public static void writeInsert(ByteSlot slot, Procedure proc, Procedure[] subprocs)<a name="line.225"></a>
+<span class="sourceLineNo">225</span>  public static void writeInsert(ByteSlot slot, Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs)<a name="line.225"></a>
 <span class="sourceLineNo">226</span>      throws IOException {<a name="line.226"></a>
 <span class="sourceLineNo">227</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_INSERT, proc, subprocs);<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>  public static void writeUpdate(ByteSlot slot, Procedure proc)<a name="line.230"></a>
+<span class="sourceLineNo">230</span>  public static void writeUpdate(ByteSlot slot, Procedure&lt;?&gt; proc)<a name="line.230"></a>
 <span class="sourceLineNo">231</span>      throws IOException {<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_UPDATE, proc, null);<a name="line.232"></a>
 <span class="sourceLineNo">233</span>  }<a name="line.233"></a>
@@ -248,7 +248,7 @@
 <span class="sourceLineNo">240</span>    builder.build().writeDelimitedTo(slot);<a name="line.240"></a>
 <span class="sourceLineNo">241</span>  }<a name="line.241"></a>
 <span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public static void writeDelete(ByteSlot slot, Procedure proc, long[] subprocs)<a name="line.243"></a>
+<span class="sourceLineNo">243</span>  public static void writeDelete(ByteSlot slot, Procedure&lt;?&gt; proc, long[] subprocs)<a name="line.243"></a>
 <span class="sourceLineNo">244</span>      throws IOException {<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    final ProcedureWALEntry.Builder builder = ProcedureWALEntry.newBuilder();<a name="line.245"></a>
 <span class="sourceLineNo">246</span>    builder.setType(ProcedureWALEntry.Type.PROCEDURE_WAL_DELETE);<a name="line.246"></a>


[39/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/class-use/BitSetNode.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/class-use/BitSetNode.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/class-use/BitSetNode.html
new file mode 100644
index 0000000..bf6ae5c
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/class-use/BitSetNode.html
@@ -0,0 +1,279 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.procedure2.store.BitSetNode (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.procedure2.store.BitSetNode (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/class-use/BitSetNode.html" target="_top">Frames</a></li>
+<li><a href="BitSetNode.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.procedure2.store.BitSetNode" class="title">Uses of Class<br>org.apache.hadoop.hbase.procedure2.store.BitSetNode</h2>
+</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
+<caption><span>Packages that use <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Package</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.procedure2.store">org.apache.hadoop.hbase.procedure2.store</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<ul class="blockList">
+<li class="blockList"><a name="org.apache.hadoop.hbase.procedure2.store">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a> in <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/package-summary.html">org.apache.hadoop.hbase.procedure2.store</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/package-summary.html">org.apache.hadoop.hbase.procedure2.store</a> with type parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#map">map</a></span></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/package-summary.html">org.apache.hadoop.hbase.procedure2.store</a> that return <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#delete-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">delete</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;node,
+      long&nbsp;procId)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#getOrCreateNode-long-">getOrCreateNode</a></span>(long&nbsp;procId)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#growNode-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">growNode</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;node,
+        long&nbsp;procId)</code>
+<div class="block">Grows <code>node</code> to contain <code>procId</code> and updates the map.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#insert-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">insert</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;node,
+      long&nbsp;procId)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#lookupClosestNode-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">lookupClosestNode</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;node,
+                 long&nbsp;procId)</code>
+<div class="block">lookup the node containing the specified procId.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#mergeNodes-org.apache.hadoop.hbase.procedure2.store.BitSetNode-org.apache.hadoop.hbase.procedure2.store.BitSetNode-">mergeNodes</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;leftNode,
+          <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;rightNode)</code>
+<div class="block">Merges <code>leftNode</code> & <code>rightNode</code> and updates the map.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#update-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">update</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;node,
+      long&nbsp;procId)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/package-summary.html">org.apache.hadoop.hbase.procedure2.store</a> with parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">BitSetNode.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#canMerge-org.apache.hadoop.hbase.procedure2.store.BitSetNode-">canMerge</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;rightNode)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#delete-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">delete</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;node,
+      long&nbsp;procId)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#growNode-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">growNode</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;node,
+        long&nbsp;procId)</code>
+<div class="block">Grows <code>node</code> to contain <code>procId</code> and updates the map.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#insert-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">insert</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;node,
+      long&nbsp;procId)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#lookupClosestNode-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">lookupClosestNode</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;node,
+                 long&nbsp;procId)</code>
+<div class="block">lookup the node containing the specified procId.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="typeNameLabel">BitSetNode.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#merge-org.apache.hadoop.hbase.procedure2.store.BitSetNode-">merge</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;rightNode)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#mergeNodes-org.apache.hadoop.hbase.procedure2.store.BitSetNode-org.apache.hadoop.hbase.procedure2.store.BitSetNode-">mergeNodes</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;leftNode,
+          <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;rightNode)</code>
+<div class="block">Merges <code>leftNode</code> & <code>rightNode</code> and updates the map.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#update-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">update</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;node,
+      long&nbsp;procId)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
+<caption><span>Constructors in <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/package-summary.html">org.apache.hadoop.hbase.procedure2.store</a> with parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#BitSetNode-org.apache.hadoop.hbase.procedure2.store.BitSetNode-boolean-">BitSetNode</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;other,
+          boolean&nbsp;resetDelete)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/class-use/BitSetNode.html" target="_top">Frames</a></li>
+<li><a href="BitSetNode.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStore.ProcedureIterator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStore.ProcedureIterator.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStore.ProcedureIterator.html
index 3915799..ed15eec 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStore.ProcedureIterator.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStore.ProcedureIterator.html
@@ -158,7 +158,28 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>private static class&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.EntryIterator</a></span></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html">org.apache.hadoop.hbase.procedure2.store.wal</a> that return <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#fetchAll--">fetchAll</a></span>()</code>
+<div class="block">Drain this map and return all procedures in it.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#fetchReady--">fetchReady</a></span>()</code>
+<div class="block">Returns an EntryIterator with the list of procedures ready to be added to the executor.</div>
+</td>
 </tr>
 </tbody>
 </table>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStoreTracker.BitSetNode.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStoreTracker.BitSetNode.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStoreTracker.BitSetNode.html
deleted file mode 100644
index de21445..0000000
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStoreTracker.BitSetNode.html
+++ /dev/null
@@ -1,279 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode (Apache HBase 3.0.0-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode (Apache HBase 3.0.0-SNAPSHOT API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStoreTracker.BitSetNode.html" target="_top">Frames</a></li>
-<li><a href="ProcedureStoreTracker.BitSetNode.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h2 title="Uses of Class org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode" class="title">Uses of Class<br>org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode</h2>
-</div>
-<div class="classUseContainer">
-<ul class="blockList">
-<li class="blockList">
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
-<caption><span>Packages that use <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Package</th>
-<th class="colLast" scope="col">Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.procedure2.store">org.apache.hadoop.hbase.procedure2.store</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList">
-<ul class="blockList">
-<li class="blockList"><a name="org.apache.hadoop.hbase.procedure2.store">
-<!--   -->
-</a>
-<h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a> in <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/package-summary.html">org.apache.hadoop.hbase.procedure2.store</a></h3>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
-<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/package-summary.html">org.apache.hadoop.hbase.procedure2.store</a> with type parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&gt;</code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#map">map</a></span></code>&nbsp;</td>
-</tr>
-</tbody>
-</table>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
-<caption><span>Methods in <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/package-summary.html">org.apache.hadoop.hbase.procedure2.store</a> that return <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#delete-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">delete</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;node,
-      long&nbsp;procId)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#getOrCreateNode-long-">getOrCreateNode</a></span>(long&nbsp;procId)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#growNode-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">growNode</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;node,
-        long&nbsp;procId)</code>
-<div class="block">Grows <code>node</code> to contain <code>procId</code> and updates the map.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#insert-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">insert</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;node,
-      long&nbsp;procId)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#lookupClosestNode-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">lookupClosestNode</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;node,
-                 long&nbsp;procId)</code>
-<div class="block">lookup the node containing the specified procId.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#mergeNodes-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-">mergeNodes</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;leftNode,
-          <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;rightNode)</code>
-<div class="block">Merges <code>leftNode</code> & <code>rightNode</code> and updates the map.</div>
-</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#update-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">update</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;node,
-      long&nbsp;procId)</code>&nbsp;</td>
-</tr>
-</tbody>
-</table>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
-<caption><span>Methods in <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/package-summary.html">org.apache.hadoop.hbase.procedure2.store</a> with parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.BitSetNode.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#canMerge-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-">canMerge</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;rightNode)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#delete-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">delete</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;node,
-      long&nbsp;procId)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#growNode-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">growNode</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;node,
-        long&nbsp;procId)</code>
-<div class="block">Grows <code>node</code> to contain <code>procId</code> and updates the map.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#insert-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">insert</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;node,
-      long&nbsp;procId)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#lookupClosestNode-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">lookupClosestNode</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;node,
-                 long&nbsp;procId)</code>
-<div class="block">lookup the node containing the specified procId.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.BitSetNode.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#merge-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-">merge</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;rightNode)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#mergeNodes-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-">mergeNodes</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;leftNode,
-          <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;rightNode)</code>
-<div class="block">Merges <code>leftNode</code> & <code>rightNode</code> and updates the map.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#update-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">update</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;node,
-      long&nbsp;procId)</code>&nbsp;</td>
-</tr>
-</tbody>
-</table>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
-<caption><span>Constructors in <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/package-summary.html">org.apache.hadoop.hbase.procedure2.store</a> with parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#BitSetNode-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-boolean-">BitSetNode</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;other,
-          boolean&nbsp;resetDelete)</code>&nbsp;</td>
-</tr>
-</tbody>
-</table>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStoreTracker.BitSetNode.html" target="_top">Frames</a></li>
-<li><a href="ProcedureStoreTracker.BitSetNode.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStoreTracker.DeleteState.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStoreTracker.DeleteState.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStoreTracker.DeleteState.html
index 652c780..ffcb93f 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStoreTracker.DeleteState.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStoreTracker.DeleteState.html
@@ -110,7 +110,7 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.DeleteState</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.BitSetNode.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#isDeleted-long-">isDeleted</a></span>(long&nbsp;procId)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">BitSetNode.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#isDeleted-long-">isDeleted</a></span>(long&nbsp;procId)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.DeleteState</a></code></td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStoreTracker.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStoreTracker.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStoreTracker.html
index 93f83214..17b7be9 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStoreTracker.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStoreTracker.html
@@ -115,11 +115,17 @@
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#resetTo-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker-boolean-">resetTo</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker,
-       boolean&nbsp;resetDelete)</code>&nbsp;</td>
+       boolean&nbsp;resetDelete)</code>
+<div class="block">Resets internal state to same as given <code>tracker</code>, and change the deleted flag according
+ to the modified flag if <code>resetDelete</code> is true.</div>
+</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#setDeletedIfSet-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker-">setDeletedIfSet</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">ProcedureStoreTracker.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#setDeletedIfModifiedInBoth-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker-">setDeletedIfModifiedInBoth</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker)</code>
+<div class="block">Similar with <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#setDeletedIfModified-long...-"><code>setDeletedIfModified(long...)</code></a>, but here the <code>procId</code> are given by
+ the <code>tracker</code>.</div>
+</td>
 </tr>
 </tbody>
 </table>
@@ -142,9 +148,8 @@
 <tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a></code></td>
 <td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#localTracker">localTracker</a></span></code>
-<div class="block">If tracker for a log file is partial (see <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#partial"><code>partial</code></a>), we
- re-build the list of procedures updated in that WAL because we need it for log cleaning
- purposes.</div>
+<div class="block">If tracker for a log file is partial (see <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#partial"><code>partial</code></a>), we re-build
+ the list of procedures modified in that WAL because we need it for log cleaning purposes.</div>
 </td>
 </tr>
 <tr class="altColor">
@@ -188,11 +193,21 @@
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#insertIfPartial-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure-">insertIfPartial</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker,
+               org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure&nbsp;proc)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">ProcedureWALFormat.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#load-java.util.Iterator-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormat.Loader-">load</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&gt;&nbsp;logs,
     <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker,
     <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.Loader.html" title="interface in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormat.Loader</a>&nbsp;loader)</code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#setDeletedIfPartial-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker-long-">setDeletedIfPartial</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker,
+                   long&nbsp;procId)</code>&nbsp;</td>
+</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">ProcedureWALFile.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#updateLocalTracker-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker-">updateLocalTracker</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker)</code>&nbsp;</td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/package-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/package-frame.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/package-frame.html
index 838c70d..5ab413b 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/package-frame.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/package-frame.html
@@ -20,10 +20,10 @@
 </ul>
 <h2 title="Classes">Classes</h2>
 <ul title="Classes">
+<li><a href="BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store" target="classFrame">BitSetNode</a></li>
 <li><a href="NoopProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store" target="classFrame">NoopProcedureStore</a></li>
 <li><a href="ProcedureStoreBase.html" title="class in org.apache.hadoop.hbase.procedure2.store" target="classFrame">ProcedureStoreBase</a></li>
 <li><a href="ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store" target="classFrame">ProcedureStoreTracker</a></li>
-<li><a href="ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store" target="classFrame">ProcedureStoreTracker.BitSetNode</a></li>
 </ul>
 <h2 title="Enums">Enums</h2>
 <ul title="Enums">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/package-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/package-summary.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/package-summary.html
index c62ce4a..0a5ebc6 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/package-summary.html
@@ -118,27 +118,27 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store">NoopProcedureStore</a></td>
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></td>
 <td class="colLast">
-<div class="block">An In-Memory store that does not keep track of the procedures inserted.</div>
+<div class="block">A bitmap which can grow/merge with other <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store"><code>BitSetNode</code></a> (if certain conditions are met).</div>
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreBase.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreBase</a></td>
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store">NoopProcedureStore</a></td>
 <td class="colLast">
-<div class="block">Base class for <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store"><code>ProcedureStore</code></a>s.</div>
+<div class="block">An In-Memory store that does not keep track of the procedures inserted.</div>
 </td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a></td>
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreBase.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreBase</a></td>
 <td class="colLast">
-<div class="block">Keeps track of live procedures.</div>
+<div class="block">Base class for <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store"><code>ProcedureStore</code></a>s.</div>
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></td>
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a></td>
 <td class="colLast">
-<div class="block">A bitmap which can grow/merge with other <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store"><code>ProcedureStoreTracker.BitSetNode</code></a> (if certain conditions are met).</div>
+<div class="block">Keeps track of live procedures.</div>
 </td>
 </tr>
 </tbody>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/package-tree.html
index a24c03c..9a03d8f 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/package-tree.html
@@ -81,13 +81,13 @@
 <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.procedure2.store.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">BitSetNode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.store.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreBase.html" title="class in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">ProcedureStoreBase</span></a> (implements org.apache.hadoop.hbase.procedure2.store.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.procedure2.store.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">NoopProcedureStore</span></a></li>
 </ul>
 </li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.store.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">ProcedureStoreTracker</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.store.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">ProcedureStoreTracker.BitSetNode</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/package-use.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/package-use.html
index 4fbbd0b..5698daf 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/package-use.html
@@ -150,40 +150,40 @@
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/class-use/BitSetNode.html#org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>
+<div class="block">A bitmap which can grow/merge with other <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store"><code>BitSetNode</code></a> (if certain conditions are met).</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStore.html#org.apache.hadoop.hbase.procedure2.store">ProcedureStore</a>
 <div class="block">The ProcedureStore is used by the executor to persist the state of each procedure execution.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStore.ProcedureIterator.html#org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a>
 <div class="block">An Iterator over a collection of Procedure</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStore.ProcedureLoader.html#org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureLoader</a>
 <div class="block">Interface passed to the ProcedureStore.load() method to handle the store-load events.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStore.ProcedureStoreListener.html#org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureStoreListener</a>
 <div class="block">Store listener interface.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStoreBase.html#org.apache.hadoop.hbase.procedure2.store">ProcedureStoreBase</a>
 <div class="block">Base class for <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store"><code>ProcedureStore</code></a>s.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStoreTracker.html#org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>
 <div class="block">Keeps track of live procedures.</div>
 </td>
 </tr>
-<tr class="altColor">
-<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStoreTracker.BitSetNode.html#org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>
-<div class="block">A bitmap which can grow/merge with other <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store"><code>ProcedureStoreTracker.BitSetNode</code></a> (if certain conditions are met).</div>
-</td>
-</tr>
 <tr class="rowColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/class-use/ProcedureStoreTracker.DeleteState.html#org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.DeleteState</a>&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/CorruptedWALProcedureStoreException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/CorruptedWALProcedureStoreException.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/CorruptedWALProcedureStoreException.html
index 6841367..03c56d5 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/CorruptedWALProcedureStoreException.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/CorruptedWALProcedureStoreException.html
@@ -69,13 +69,13 @@
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
 <li>Nested&nbsp;|&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#methods.inherited.from.class.java.lang.Throwable">Method</a></li>
 </ul>
 <ul class="subNavList">
 <li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
 <li>Method</li>
 </ul>
@@ -128,8 +128,7 @@
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
- @InterfaceStability.Stable
-public class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/CorruptedWALProcedureStoreException.html#line.30">CorruptedWALProcedureStoreException</a>
+public class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/CorruptedWALProcedureStoreException.html#line.27">CorruptedWALProcedureStoreException</a>
 extends <a href="../../../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <div class="block">Thrown when a procedure WAL is corrupted</div>
 <dl>
@@ -142,6 +141,25 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/HBaseIOException.h
 <div class="summary">
 <ul class="blockList">
 <li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/CorruptedWALProcedureStoreException.html#serialVersionUID">serialVersionUID</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
 <!-- ======== CONSTRUCTOR SUMMARY ======== -->
 <ul class="blockList">
 <li class="blockList"><a name="constructor.summary">
@@ -194,6 +212,27 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/HBaseIOException.h
 <div class="details">
 <ul class="blockList">
 <li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="serialVersionUID">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>serialVersionUID</h4>
+<pre>private static final&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/CorruptedWALProcedureStoreException.html#line.29">serialVersionUID</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.CorruptedWALProcedureStoreException.serialVersionUID">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
 <ul class="blockList">
 <li class="blockList"><a name="constructor.detail">
@@ -278,13 +317,13 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/HBaseIOException.h
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
 <li>Nested&nbsp;|&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#methods.inherited.from.class.java.lang.Throwable">Method</a></li>
 </ul>
 <ul class="subNavList">
 <li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
 <li>Method</li>
 </ul>


[11/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/downloads.html
----------------------------------------------------------------------
diff --git a/downloads.html b/downloads.html
index 90a33a6..def12c6 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase Downloads</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index 4c5353e..8775cb8 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index 7d9db8b..b6b2adf 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBaseâ„¢ Home</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index 49233d9..4cf01a7 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index d6d6346..d072f6c 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index f665328..d196f14 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index ec3e2d9..4df4ff0 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -341,7 +341,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index fff8e4c..cdc9274 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index 3d84213..91010c1 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index ec876a5..b0dca55 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 9c08380..4605e89 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index cc39f5a..9f0036c 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Powered By Apache HBase™</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index ec53692..a7c101b 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index 36a05a5..b69caba 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index 28ccc91..43757dd 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index d4d61c4..69f1340 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index 8725024..4f45fbb 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index 1e0f5d1..fc88cf4 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Other Apache HBase (TM) Resources</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index 01cbef3..c80871e 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 90317ad..ead7413 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase™ Sponsors</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index b3476b5..80d2a1f 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Supporting Projects</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

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


[38/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html
index 1570f7f..9be7a8e 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html
@@ -114,8 +114,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
- @InterfaceStability.Evolving
-public class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.41">ProcedureWALFile</a>
+public class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.38">ProcedureWALFile</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/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&gt;</pre>
 <div class="block">Describes a WAL File</div>
@@ -336,7 +335,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <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/procedure2/store/wal/ProcedureWALFile.html#line.42">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.39">LOG</a></pre>
 </li>
 </ul>
 <a name="header">
@@ -345,7 +344,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>header</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.44">header</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.41">header</a></pre>
 </li>
 </ul>
 <a name="stream">
@@ -354,7 +353,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>stream</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.FSDataInputStream <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.45">stream</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.FSDataInputStream <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.42">stream</a></pre>
 </li>
 </ul>
 <a name="fs">
@@ -363,7 +362,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>fs</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.46">fs</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.43">fs</a></pre>
 </li>
 </ul>
 <a name="logFile">
@@ -372,7 +371,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>logFile</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.47">logFile</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.44">logFile</a></pre>
 </li>
 </ul>
 <a name="startPos">
@@ -381,7 +380,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>startPos</h4>
-<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.48">startPos</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.45">startPos</a></pre>
 </li>
 </ul>
 <a name="minProcId">
@@ -390,7 +389,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>minProcId</h4>
-<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.49">minProcId</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.46">minProcId</a></pre>
 </li>
 </ul>
 <a name="maxProcId">
@@ -399,7 +398,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>maxProcId</h4>
-<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.50">maxProcId</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.47">maxProcId</a></pre>
 </li>
 </ul>
 <a name="logSize">
@@ -408,7 +407,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>logSize</h4>
-<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.51">logSize</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.48">logSize</a></pre>
 </li>
 </ul>
 <a name="timestamp">
@@ -417,7 +416,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>timestamp</h4>
-<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.52">timestamp</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.49">timestamp</a></pre>
 </li>
 </ul>
 <a name="tracker">
@@ -426,7 +425,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockListLast">
 <li class="blockList">
 <h4>tracker</h4>
-<pre>private final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.58">tracker</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.55">tracker</a></pre>
 </li>
 </ul>
 </li>
@@ -443,7 +442,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>ProcedureWALFile</h4>
-<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.60">ProcedureWALFile</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.57">ProcedureWALFile</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                         org.apache.hadoop.fs.FileStatus&nbsp;logStatus)</pre>
 </li>
 </ul>
@@ -453,7 +452,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ProcedureWALFile</h4>
-<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.68">ProcedureWALFile</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.65">ProcedureWALFile</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                         org.apache.hadoop.fs.Path&nbsp;logFile,
                         org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader&nbsp;header,
                         long&nbsp;startPos,
@@ -474,7 +473,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>getTracker</h4>
-<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.54">getTracker</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.51">getTracker</a>()</pre>
 </li>
 </ul>
 <a name="open--">
@@ -483,7 +482,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>open</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.79">open</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.76">open</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>
@@ -497,7 +496,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>readTrailer</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALTrailer&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.92">readTrailer</a>()
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALTrailer&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.89">readTrailer</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>
@@ -511,7 +510,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>readTracker</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.100">readTracker</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.97">readTracker</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>
@@ -525,7 +524,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>updateLocalTracker</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.112">updateLocalTracker</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.109">updateLocalTracker</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker)</pre>
 </li>
 </ul>
 <a name="close--">
@@ -534,7 +533,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.116">close</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.113">close</a>()</pre>
 </li>
 </ul>
 <a name="getStream--">
@@ -543,7 +542,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>getStream</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.FSDataInputStream&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.127">getStream</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.FSDataInputStream&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.124">getStream</a>()</pre>
 </li>
 </ul>
 <a name="getHeader--">
@@ -552,7 +551,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>getHeader</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.131">getHeader</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.128">getHeader</a>()</pre>
 </li>
 </ul>
 <a name="getTimestamp--">
@@ -561,7 +560,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>getTimestamp</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.135">getTimestamp</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.132">getTimestamp</a>()</pre>
 </li>
 </ul>
 <a name="isCompacted--">
@@ -570,7 +569,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>isCompacted</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.139">isCompacted</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.136">isCompacted</a>()</pre>
 </li>
 </ul>
 <a name="getLogId--">
@@ -579,7 +578,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>getLogId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.143">getLogId</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.140">getLogId</a>()</pre>
 </li>
 </ul>
 <a name="getSize--">
@@ -588,7 +587,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>getSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.147">getSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.144">getSize</a>()</pre>
 </li>
 </ul>
 <a name="addToSize-long-">
@@ -597,7 +596,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>addToSize</h4>
-<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.154">addToSize</a>(long&nbsp;size)</pre>
+<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.151">addToSize</a>(long&nbsp;size)</pre>
 <div class="block">Used to update in-progress log sizes. the FileStatus will report 0 otherwise.</div>
 </li>
 </ul>
@@ -607,7 +606,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>removeFile</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.158">removeFile</a>(org.apache.hadoop.fs.Path&nbsp;walArchiveDir)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.155">removeFile</a>(org.apache.hadoop.fs.Path&nbsp;walArchiveDir)
                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -621,7 +620,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>setProcIds</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.177">setProcIds</a>(long&nbsp;minId,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.174">setProcIds</a>(long&nbsp;minId,
                        long&nbsp;maxId)</pre>
 </li>
 </ul>
@@ -631,7 +630,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>getMinProcId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.182">getMinProcId</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.179">getMinProcId</a>()</pre>
 </li>
 </ul>
 <a name="getMaxProcId--">
@@ -640,7 +639,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxProcId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.186">getMaxProcId</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.183">getMaxProcId</a>()</pre>
 </li>
 </ul>
 <a name="compareTo-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFile-">
@@ -649,7 +648,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTo</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.191">compareTo</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&nbsp;other)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.188">compareTo</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&nbsp;other)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true#compareTo-T-" title="class or interface in java.lang">compareTo</a></code>&nbsp;in interface&nbsp;<code><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/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&gt;</code></dd>
@@ -662,7 +661,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.197">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;o)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.194">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;o)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a></code>&nbsp;in class&nbsp;<code><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></code></dd>
@@ -675,7 +674,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockList">
 <li class="blockList">
 <h4>hashCode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.204">hashCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#line.201">hashCode</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a></code>&nbsp;in class&nbsp;<code><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></code></dd>
@@ -688,7 +687,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparab
 <ul class="blockListLast">
 <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/store/wal/ProcedureWALFile.html#line.209">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/store/wal/ProcedureWALFile.html#line.206">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/Object.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/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.InvalidWALDataException.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.InvalidWALDataException.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.InvalidWALDataException.html
index e5dfc81..50037da 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.InvalidWALDataException.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.InvalidWALDataException.html
@@ -69,13 +69,13 @@
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
 <li>Nested&nbsp;|&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#methods.inherited.from.class.java.lang.Throwable">Method</a></li>
 </ul>
 <ul class="subNavList">
 <li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
 <li>Method</li>
 </ul>
@@ -127,7 +127,7 @@
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.62">ProcedureWALFormat.InvalidWALDataException</a>
+public static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.57">ProcedureWALFormat.InvalidWALDataException</a>
 extends <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="seeLabel">See Also:</span></dt>
@@ -139,6 +139,25 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.h
 <div class="summary">
 <ul class="blockList">
 <li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.InvalidWALDataException.html#serialVersionUID">serialVersionUID</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
 <!-- ======== CONSTRUCTOR SUMMARY ======== -->
 <ul class="blockList">
 <li class="blockList"><a name="constructor.summary">
@@ -187,6 +206,27 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.h
 <div class="details">
 <ul class="blockList">
 <li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="serialVersionUID">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>serialVersionUID</h4>
+<pre>private static final&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.InvalidWALDataException.html#line.59">serialVersionUID</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormat.InvalidWALDataException.serialVersionUID">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
 <ul class="blockList">
 <li class="blockList"><a name="constructor.detail">
@@ -199,7 +239,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.h
 <ul class="blockList">
 <li class="blockList">
 <h4>InvalidWALDataException</h4>
-<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.InvalidWALDataException.html#line.63">InvalidWALDataException</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;s)</pre>
+<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.InvalidWALDataException.html#line.61">InvalidWALDataException</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;s)</pre>
 </li>
 </ul>
 <a name="InvalidWALDataException-java.lang.Throwable-">
@@ -208,7 +248,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>InvalidWALDataException</h4>
-<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.InvalidWALDataException.html#line.67">InvalidWALDataException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;t)</pre>
+<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.InvalidWALDataException.html#line.65">InvalidWALDataException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;t)</pre>
 </li>
 </ul>
 </li>
@@ -265,13 +305,13 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.h
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
 <li>Nested&nbsp;|&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#methods.inherited.from.class.java.lang.Throwable">Method</a></li>
 </ul>
 <ul class="subNavList">
 <li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
 <li>Method</li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.Loader.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.Loader.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.Loader.html
index f209fd4..f55bd74 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.Loader.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.Loader.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static interface <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.72">ProcedureWALFormat.Loader</a>
+<pre>static interface <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.70">ProcedureWALFormat.Loader</a>
 extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureLoader</a></pre>
 </li>
 </ul>
@@ -162,7 +162,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockListLast">
 <li class="blockList">
 <h4>markCorruptedWAL</h4>
-<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.Loader.html#line.73">markCorruptedWAL</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&nbsp;log,
+<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.Loader.html#line.71">markCorruptedWAL</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&nbsp;log,
                       <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>&nbsp;e)</pre>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html
index d4fb18d..a98c739 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html
@@ -110,8 +110,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
- @InterfaceStability.Evolving
-public final class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.49">ProcedureWALFormat</a>
+public final class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.45">ProcedureWALFormat</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">Helper class that contains the WAL serialization utils.</div>
 </li>
@@ -164,26 +163,22 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#HEADER_VERSION">HEADER_VERSION</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private static org.slf4j.Logger</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#LOG">LOG</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
 <td class="colFirst"><code>(package private) static byte</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#LOG_TYPE_COMPACTED">LOG_TYPE_COMPACTED</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) static byte</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#LOG_TYPE_MAX_VALID">LOG_TYPE_MAX_VALID</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) static byte</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#LOG_TYPE_STREAM">LOG_TYPE_STREAM</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) static long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#TRAILER_MAGIC">TRAILER_MAGIC</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) static byte</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#TRAILER_VERSION">TRAILER_VERSION</a></span></code>&nbsp;</td>
 </tr>
@@ -249,15 +244,15 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <tr id="i5" class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#writeDelete-org.apache.hadoop.hbase.procedure2.util.ByteSlot-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">writeDelete</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
-           <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
+           <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
            long[]&nbsp;subprocs)</code>&nbsp;</td>
 </tr>
 <tr id="i6" class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#writeEntry-org.apache.hadoop.hbase.procedure2.util.ByteSlot-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry.Type-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">writeEntry</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
           org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry.Type&nbsp;type,
-          <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
-          <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</code>&nbsp;</td>
+          <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+          <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;subprocs)</code>&nbsp;</td>
 </tr>
 <tr id="i7" class="rowColor">
 <td class="colFirst"><code>static void</code></td>
@@ -267,13 +262,13 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <tr id="i8" class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#writeInsert-org.apache.hadoop.hbase.procedure2.util.ByteSlot-org.apache.hadoop.hbase.procedure2.Procedure-">writeInsert</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
-           <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</code>&nbsp;</td>
+           <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc)</code>&nbsp;</td>
 </tr>
 <tr id="i9" class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#writeInsert-org.apache.hadoop.hbase.procedure2.util.ByteSlot-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">writeInsert</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
-           <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
-           <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</code>&nbsp;</td>
+           <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+           <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;subprocs)</code>&nbsp;</td>
 </tr>
 <tr id="i10" class="altColor">
 <td class="colFirst"><code>static long</code></td>
@@ -283,7 +278,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <tr id="i11" class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#writeUpdate-org.apache.hadoop.hbase.procedure2.util.ByteSlot-org.apache.hadoop.hbase.procedure2.Procedure-">writeUpdate</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
-           <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</code>&nbsp;</td>
+           <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc)</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -307,22 +302,13 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <!--   -->
 </a>
 <h3>Field Detail</h3>
-<a name="LOG">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.50">LOG</a></pre>
-</li>
-</ul>
 <a name="LOG_TYPE_STREAM">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG_TYPE_STREAM</h4>
-<pre>static final&nbsp;byte <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.52">LOG_TYPE_STREAM</a></pre>
+<pre>static final&nbsp;byte <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.47">LOG_TYPE_STREAM</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormat.LOG_TYPE_STREAM">Constant Field Values</a></dd>
@@ -335,7 +321,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG_TYPE_COMPACTED</h4>
-<pre>static final&nbsp;byte <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.53">LOG_TYPE_COMPACTED</a></pre>
+<pre>static final&nbsp;byte <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.48">LOG_TYPE_COMPACTED</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormat.LOG_TYPE_COMPACTED">Constant Field Values</a></dd>
@@ -348,7 +334,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG_TYPE_MAX_VALID</h4>
-<pre>static final&nbsp;byte <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.54">LOG_TYPE_MAX_VALID</a></pre>
+<pre>static final&nbsp;byte <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.49">LOG_TYPE_MAX_VALID</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormat.LOG_TYPE_MAX_VALID">Constant Field Values</a></dd>
@@ -361,7 +347,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>HEADER_VERSION</h4>
-<pre>static final&nbsp;byte <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.56">HEADER_VERSION</a></pre>
+<pre>static final&nbsp;byte <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.51">HEADER_VERSION</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormat.HEADER_VERSION">Constant Field Values</a></dd>
@@ -374,7 +360,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>TRAILER_VERSION</h4>
-<pre>static final&nbsp;byte <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.57">TRAILER_VERSION</a></pre>
+<pre>static final&nbsp;byte <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.52">TRAILER_VERSION</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormat.TRAILER_VERSION">Constant Field Values</a></dd>
@@ -387,7 +373,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>HEADER_MAGIC</h4>
-<pre>static final&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.58">HEADER_MAGIC</a></pre>
+<pre>static final&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.53">HEADER_MAGIC</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormat.HEADER_MAGIC">Constant Field Values</a></dd>
@@ -400,7 +386,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TRAILER_MAGIC</h4>
-<pre>static final&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.59">TRAILER_MAGIC</a></pre>
+<pre>static final&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.54">TRAILER_MAGIC</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormat.TRAILER_MAGIC">Constant Field Values</a></dd>
@@ -421,7 +407,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ProcedureWALFormat</h4>
-<pre>private&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.76">ProcedureWALFormat</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.74">ProcedureWALFormat</a>()</pre>
 </li>
 </ul>
 </li>
@@ -438,7 +424,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>load</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.78">load</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&gt;&nbsp;logs,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.76">load</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&gt;&nbsp;logs,
                         <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker,
                         <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.Loader.html" title="interface in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormat.Loader</a>&nbsp;loader)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -530,8 +516,8 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <h4>writeEntry</h4>
 <pre>public static&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.207">writeEntry</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
                               org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry.Type&nbsp;type,
-                              <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
-                              <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)
+                              <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+                              <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;subprocs)
                        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>
@@ -546,7 +532,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <li class="blockList">
 <h4>writeInsert</h4>
 <pre>public static&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.220">writeInsert</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
-                               <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)
+                               <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc)
                         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>
@@ -561,8 +547,8 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <li class="blockList">
 <h4>writeInsert</h4>
 <pre>public static&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.225">writeInsert</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
-                               <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
-                               <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)
+                               <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+                               <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;subprocs)
                         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>
@@ -577,7 +563,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <li class="blockList">
 <h4>writeUpdate</h4>
 <pre>public static&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.230">writeUpdate</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
-                               <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)
+                               <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc)
                         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 +593,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <li class="blockList">
 <h4>writeDelete</h4>
 <pre>public static&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.243">writeDelete</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
-                               <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
+                               <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
                                long[]&nbsp;subprocs)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html
deleted file mode 100644
index eb914bd..0000000
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html
+++ /dev/null
@@ -1,503 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ProcedureWALFormatReader.Entry (Apache HBase 3.0.0-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ProcedureWALFormatReader.Entry (Apache HBase 3.0.0-SNAPSHOT API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/ProcedureWALFormatReader.Entry.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" target="_top">Frames</a></li>
-<li><a href="ProcedureWALFormatReader.Entry.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">org.apache.hadoop.hbase.procedure2.store.wal</div>
-<h2 title="Class ProcedureWALFormatReader.Entry" class="title">Class ProcedureWALFormatReader.Entry</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
-<li>
-<ul class="inheritance">
-<li>org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<dl>
-<dt>Enclosing class:</dt>
-<dd><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader</a></dd>
-</dl>
-<hr>
-<br>
-<pre>private static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.309">ProcedureWALFormatReader.Entry</a>
-extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>protected <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#childHead">childHead</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>protected <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#hashNext">hashNext</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>protected <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#linkNext">linkNext</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>protected <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#linkPrev">linkPrev</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>protected <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#procedure">procedure</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>protected org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#proto">proto</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>protected boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#ready">ready</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>protected <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#replayNext">replayNext</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>protected <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#replayPrev">replayPrev</a></span></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#Entry-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">Entry</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;hashNext)</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#convert--">convert</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#getParentId--">getParentId</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i2" class="altColor">
-<td class="colFirst"><code>long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#getProcId--">getProcId</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i3" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#hasParent--">hasParent</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i4" class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#isFinished--">isFinished</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i5" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#isReady--">isReady</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i6" 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/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#toString--">toString</a></span>()</code>&nbsp;</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
-<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.detail">
-<!--   -->
-</a>
-<h3>Field Detail</h3>
-<a name="hashNext">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>hashNext</h4>
-<pre>protected&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.311">hashNext</a></pre>
-</li>
-</ul>
-<a name="childHead">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>childHead</h4>
-<pre>protected&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.313">childHead</a></pre>
-</li>
-</ul>
-<a name="linkNext">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>linkNext</h4>
-<pre>protected&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.315">linkNext</a></pre>
-</li>
-</ul>
-<a name="linkPrev">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>linkPrev</h4>
-<pre>protected&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.316">linkPrev</a></pre>
-</li>
-</ul>
-<a name="replayNext">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>replayNext</h4>
-<pre>protected&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.318">replayNext</a></pre>
-</li>
-</ul>
-<a name="replayPrev">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>replayPrev</h4>
-<pre>protected&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.319">replayPrev</a></pre>
-</li>
-</ul>
-<a name="procedure">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>procedure</h4>
-<pre>protected&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.321">procedure</a></pre>
-</li>
-</ul>
-<a name="proto">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>proto</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.322">proto</a></pre>
-</li>
-</ul>
-<a name="ready">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>ready</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.323">ready</a></pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="Entry-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>Entry</h4>
-<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.325">Entry</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;hashNext)</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!--   -->
-</a>
-<h3>Method Detail</h3>
-<a name="getProcId--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getProcId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.329">getProcId</a>()</pre>
-</li>
-</ul>
-<a name="getParentId--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getParentId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.333">getParentId</a>()</pre>
-</li>
-</ul>
-<a name="hasParent--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>hasParent</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.337">hasParent</a>()</pre>
-</li>
-</ul>
-<a name="isReady--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>isReady</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.341">isReady</a>()</pre>
-</li>
-</ul>
-<a name="isFinished--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>isFinished</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.345">isFinished</a>()</pre>
-</li>
-</ul>
-<a name="convert--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>convert</h4>
-<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.360">convert</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>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="toString--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<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/store/wal/ProcedureWALFormatReader.Entry.html#line.368">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/Object.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/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/ProcedureWALFormatReader.Entry.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" target="_top">Frames</a></li>
-<li><a href="ProcedureWALFormatReader.Entry.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>


[37/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html
deleted file mode 100644
index f8649c3..0000000
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html
+++ /dev/null
@@ -1,429 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ProcedureWALFormatReader.EntryIterator (Apache HBase 3.0.0-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ProcedureWALFormatReader.EntryIterator (Apache HBase 3.0.0-SNAPSHOT API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/ProcedureWALFormatReader.EntryIterator.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" target="_top">Frames</a></li>
-<li><a href="ProcedureWALFormatReader.EntryIterator.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">org.apache.hadoop.hbase.procedure2.store.wal</div>
-<h2 title="Class ProcedureWALFormatReader.EntryIterator" class="title">Class ProcedureWALFormatReader.EntryIterator</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
-<li>
-<ul class="inheritance">
-<li>org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.EntryIterator</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<dl>
-<dt>All Implemented Interfaces:</dt>
-<dd><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></dd>
-</dl>
-<dl>
-<dt>Enclosing class:</dt>
-<dd><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader</a></dd>
-</dl>
-<hr>
-<br>
-<pre>private static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.381">ProcedureWALFormatReader.EntryIterator</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/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#current">current</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#replayHead">replayHead</a></span></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#EntryIterator-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">EntryIterator</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;replayHead)</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#hasNext--">hasNext</a></span>()</code>
-<div class="block">Returns true if the iterator has more elements.</div>
-</td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#isNextFinished--">isNextFinished</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i2" class="altColor">
-<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#next--">next</a></span>()</code>
-<div class="block">Returns the next procedure in the iteration.</div>
-</td>
-</tr>
-<tr id="i3" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#reset--">reset</a></span>()</code>
-<div class="block">Reset the Iterator by seeking to the beginning of the list.</div>
-</td>
-</tr>
-<tr id="i4" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#skipNext--">skipNext</a></span>()</code>
-<div class="block">Skip the next procedure</div>
-</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
-<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.detail">
-<!--   -->
-</a>
-<h3>Field Detail</h3>
-<a name="replayHead">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>replayHead</h4>
-<pre>private final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.382">replayHead</a></pre>
-</li>
-</ul>
-<a name="current">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>current</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.383">current</a></pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="EntryIterator-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>EntryIterator</h4>
-<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.385">EntryIterator</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;replayHead)</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!--   -->
-</a>
-<h3>Method Detail</h3>
-<a name="reset--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>reset</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.391">reset</a>()</pre>
-<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#reset--">ProcedureStore.ProcedureIterator</a></code></span></div>
-<div class="block">Reset the Iterator by seeking to the beginning of the list.</div>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#reset--">reset</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="hasNext--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>hasNext</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.396">hasNext</a>()</pre>
-<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#hasNext--">ProcedureStore.ProcedureIterator</a></code></span></div>
-<div class="block">Returns true if the iterator has more elements.
- (In other words, returns true if next() would return a Procedure
- rather than throwing an exception.)</div>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#hasNext--">hasNext</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></code></dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>true if the iterator has more procedures</dd>
-</dl>
-</li>
-</ul>
-<a name="isNextFinished--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>isNextFinished</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.401">isNextFinished</a>()</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#isNextFinished--">isNextFinished</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></code></dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>true if the iterator next element is a completed procedure.</dd>
-</dl>
-</li>
-</ul>
-<a name="skipNext--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>skipNext</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.406">skipNext</a>()</pre>
-<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#skipNext--">ProcedureStore.ProcedureIterator</a></code></span></div>
-<div class="block">Skip the next procedure</div>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#skipNext--">skipNext</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="next--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>next</h4>
-<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.411">next</a>()
-               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
-<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#next--">ProcedureStore.ProcedureIterator</a></code></span></div>
-<div class="block">Returns the next procedure in the iteration.</div>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#next--">next</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></code></dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>the next procedure in the iteration.</dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - if there was an error fetching/deserializing the procedure</dd>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/ProcedureWALFormatReader.EntryIterator.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" target="_top">Frames</a></li>
-<li><a href="ProcedureWALFormatReader.EntryIterator.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html
deleted file mode 100644
index 9cd1601..0000000
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html
+++ /dev/null
@@ -1,716 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ProcedureWALFormatReader.WalProcedureMap (Apache HBase 3.0.0-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ProcedureWALFormatReader.WalProcedureMap (Apache HBase 3.0.0-SNAPSHOT API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":9,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10};
-var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/ProcedureWALFormatReader.WalProcedureMap.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" target="_top">Frames</a></li>
-<li><a href="ProcedureWALFormatReader.WalProcedureMap.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">org.apache.hadoop.hbase.procedure2.store.wal</div>
-<h2 title="Class ProcedureWALFormatReader.WalProcedureMap" class="title">Class ProcedureWALFormatReader.WalProcedureMap</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
-<li>
-<ul class="inheritance">
-<li>org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.WalProcedureMap</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<dl>
-<dt>Enclosing class:</dt>
-<dd><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader</a></dd>
-</dl>
-<hr>
-<br>
-<pre>private static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.420">ProcedureWALFormatReader.WalProcedureMap</a>
-extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#childUnlinkedHead">childUnlinkedHead</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#maxProcId">maxProcId</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#minProcId">minProcId</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>[]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#procedureMap">procedureMap</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#replayOrderHead">replayOrderHead</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#replayOrderTail">replayOrderTail</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#rootHead">rootHead</a></span></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#WalProcedureMap-int-">WalProcedureMap</a></span>(int&nbsp;size)</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#add-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure-">add</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure&nbsp;procProto)</code>&nbsp;</td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#addToLinkList-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">addToLinkList</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry,
-             <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;linkHead)</code>&nbsp;</td>
-</tr>
-<tr id="i2" class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#addToMap-long-boolean-">addToMap</a></span>(long&nbsp;procId,
-        boolean&nbsp;hasParent)</code>&nbsp;</td>
-</tr>
-<tr id="i3" class="rowColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#addToReplayList-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">addToReplayList</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry)</code>&nbsp;</td>
-</tr>
-<tr id="i4" class="altColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#buildGraph--">buildGraph</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i5" class="rowColor">
-<td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#checkReadyToRun-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">checkReadyToRun</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;rootEntry)</code>&nbsp;</td>
-</tr>
-<tr id="i6" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#clear--">clear</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i7" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#contains-long-">contains</a></span>(long&nbsp;procId)</code>&nbsp;</td>
-</tr>
-<tr id="i8" class="altColor">
-<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#fetchAll--">fetchAll</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i9" class="rowColor">
-<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#fetchReady--">fetchReady</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i10" class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#findLinkListTail-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">findLinkListTail</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;linkHead)</code>&nbsp;</td>
-</tr>
-<tr id="i11" class="rowColor">
-<td class="colFirst"><code>private int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#getMapSlot-long-">getMapSlot</a></span>(long&nbsp;procId)</code>&nbsp;</td>
-</tr>
-<tr id="i12" class="altColor">
-<td class="colFirst"><code>long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#getMaxProcId--">getMaxProcId</a></span>()</code>&nbsp;</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/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#getMinProcId--">getMinProcId</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i14" class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#getProcedure-int-long-">getProcedure</a></span>(int&nbsp;slotIndex,
-            long&nbsp;procId)</code>&nbsp;</td>
-</tr>
-<tr id="i15" class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#getProcedure-long-">getProcedure</a></span>(long&nbsp;procId)</code>&nbsp;</td>
-</tr>
-<tr id="i16" class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#getRootProcedure-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">getRootProcedure</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry)</code>&nbsp;</td>
-</tr>
-<tr id="i17" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#isEmpty--">isEmpty</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i18" class="altColor">
-<td class="colFirst"><code>private static boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#isIncreasing-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure-">isIncreasing</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure&nbsp;current,
-            org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure&nbsp;candidate)</code>&nbsp;</td>
-</tr>
-<tr id="i19" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#mergeTail-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.WalProcedureMap-">mergeTail</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a>&nbsp;other)</code>&nbsp;</td>
-</tr>
-<tr id="i20" class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#remove-long-">remove</a></span>(long&nbsp;procId)</code>&nbsp;</td>
-</tr>
-<tr id="i21" class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#removeFromMap-long-">removeFromMap</a></span>(long&nbsp;procId)</code>&nbsp;</td>
-</tr>
-<tr id="i22" class="altColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#trackProcIds-long-">trackProcIds</a></span>(long&nbsp;procId)</code>&nbsp;</td>
-</tr>
-<tr id="i23" class="rowColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#unlinkFromLinkList-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">unlinkFromLinkList</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry)</code>&nbsp;</td>
-</tr>
-<tr id="i24" class="altColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#unlinkFromReplayList-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">unlinkFromReplayList</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry)</code>&nbsp;</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
-<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.detail">
-<!--   -->
-</a>
-<h3>Field Detail</h3>
-<a name="procedureMap">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>procedureMap</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>[] <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.422">procedureMap</a></pre>
-</li>
-</ul>
-<a name="replayOrderHead">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>replayOrderHead</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.425">replayOrderHead</a></pre>
-</li>
-</ul>
-<a name="replayOrderTail">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>replayOrderTail</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.426">replayOrderTail</a></pre>
-</li>
-</ul>
-<a name="rootHead">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>rootHead</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.429">rootHead</a></pre>
-</li>
-</ul>
-<a name="childUnlinkedHead">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>childUnlinkedHead</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.432">childUnlinkedHead</a></pre>
-</li>
-</ul>
-<a name="minProcId">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>minProcId</h4>
-<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.435">minProcId</a></pre>
-</li>
-</ul>
-<a name="maxProcId">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>maxProcId</h4>
-<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.436">maxProcId</a></pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="WalProcedureMap-int-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>WalProcedureMap</h4>
-<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.438">WalProcedureMap</a>(int&nbsp;size)</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!--   -->
-</a>
-<h3>Method Detail</h3>
-<a name="add-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>add</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.446">add</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure&nbsp;procProto)</pre>
-</li>
-</ul>
-<a name="isIncreasing-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>isIncreasing</h4>
-<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.473">isIncreasing</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure&nbsp;current,
-                                    org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure&nbsp;candidate)</pre>
-<dl>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>True if this new procedure is 'richer' than the current one else
- false and we log this incidence where it appears that the WAL has older entries
- appended after newer ones. See HBASE-18152.</dd>
-</dl>
-</li>
-</ul>
-<a name="remove-long-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>remove</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.487">remove</a>(long&nbsp;procId)</pre>
-</li>
-</ul>
-<a name="trackProcIds-long-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>trackProcIds</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.498">trackProcIds</a>(long&nbsp;procId)</pre>
-</li>
-</ul>
-<a name="getMinProcId--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getMinProcId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.503">getMinProcId</a>()</pre>
-</li>
-</ul>
-<a name="getMaxProcId--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getMaxProcId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.507">getMaxProcId</a>()</pre>
-</li>
-</ul>
-<a name="contains-long-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>contains</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.511">contains</a>(long&nbsp;procId)</pre>
-</li>
-</ul>
-<a name="isEmpty--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>isEmpty</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.515">isEmpty</a>()</pre>
-</li>
-</ul>
-<a name="clear--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>clear</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.519">clear</a>()</pre>
-</li>
-</ul>
-<a name="mergeTail-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.WalProcedureMap-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>mergeTail</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.541">mergeTail</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a>&nbsp;other)</pre>
-</li>
-</ul>
-<a name="fetchReady--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>fetchReady</h4>
-<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.592">fetchReady</a>()</pre>
-</li>
-</ul>
-<a name="fetchAll--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>fetchAll</h4>
-<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.626">fetchAll</a>()</pre>
-</li>
-</ul>
-<a name="buildGraph--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>buildGraph</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.641">buildGraph</a>()</pre>
-</li>
-</ul>
-<a name="getRootProcedure-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getRootProcedure</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.657">getRootProcedure</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry)</pre>
-</li>
-</ul>
-<a name="checkReadyToRun-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>checkReadyToRun</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.703">checkReadyToRun</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;rootEntry)</pre>
-</li>
-</ul>
-<a name="unlinkFromReplayList-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>unlinkFromReplayList</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.756">unlinkFromReplayList</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry)</pre>
-</li>
-</ul>
-<a name="addToReplayList-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>addToReplayList</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.771">addToReplayList</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry)</pre>
-</li>
-</ul>
-<a name="unlinkFromLinkList-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>unlinkFromLinkList</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.783">unlinkFromLinkList</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry)</pre>
-</li>
-</ul>
-<a name="addToLinkList-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>addToLinkList</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.797">addToLinkList</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry,
-                                                     <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;linkHead)</pre>
-</li>
-</ul>
-<a name="findLinkListTail-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>findLinkListTail</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.807">findLinkListTail</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;linkHead)</pre>
-</li>
-</ul>
-<a name="addToMap-long-boolean-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>addToMap</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.815">addToMap</a>(long&nbsp;procId,
-                                                boolean&nbsp;hasParent)</pre>
-</li>
-</ul>
-<a name="removeFromMap-long-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>removeFromMap</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.825">removeFromMap</a>(long&nbsp;procId)</pre>
-</li>
-</ul>
-<a name="getProcedure-long-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getProcedure</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.845">getProcedure</a>(long&nbsp;procId)</pre>
-</li>
-</ul>
-<a name="getProcedure-int-long-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getProcedure</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.849">getProcedure</a>(int&nbsp;slotIndex,
-                                                    long&nbsp;procId)</pre>
-</li>
-</ul>
-<a name="getMapSlot-long-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>getMapSlot</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.860">getMapSlot</a>(long&nbsp;procId)</pre>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/ProcedureWALFormatReader.WalProcedureMap.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" target="_top">Frames</a></li>
-<li><a href="ProcedureWALFormatReader.WalProcedureMap.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>


[26/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html
index 9d378e8..bd1b3f6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html
@@ -61,738 +61,400 @@
 <span class="sourceLineNo">053</span>   * It's set to true only when recovering from old logs. See {@link #isDeleted(long)} docs to<a name="line.53"></a>
 <span class="sourceLineNo">054</span>   * understand it's real use.<a name="line.54"></a>
 <span class="sourceLineNo">055</span>   */<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private boolean partial = false;<a name="line.56"></a>
+<span class="sourceLineNo">056</span>  boolean partial = false;<a name="line.56"></a>
 <span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  private long minUpdatedProcId = Long.MAX_VALUE;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  private long maxUpdatedProcId = Long.MIN_VALUE;<a name="line.59"></a>
+<span class="sourceLineNo">058</span>  private long minModifiedProcId = Long.MAX_VALUE;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  private long maxModifiedProcId = Long.MIN_VALUE;<a name="line.59"></a>
 <span class="sourceLineNo">060</span><a name="line.60"></a>
 <span class="sourceLineNo">061</span>  public enum DeleteState { YES, NO, MAYBE }<a name="line.61"></a>
 <span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span>  /**<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   * A bitmap which can grow/merge with other {@link BitSetNode} (if certain conditions are met).<a name="line.64"></a>
-<span class="sourceLineNo">065</span>   * Boundaries of bitmap are aligned to multiples of {@link BitSetNode#BITS_PER_WORD}. So the<a name="line.65"></a>
-<span class="sourceLineNo">066</span>   * range of a {@link BitSetNode} is from [x * K, y * K) where x and y are integers, y &gt; x and K<a name="line.66"></a>
-<span class="sourceLineNo">067</span>   * is BITS_PER_WORD.<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  public static class BitSetNode {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    private final static long WORD_MASK = 0xffffffffffffffffL;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    private final static int ADDRESS_BITS_PER_WORD = 6;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    private final static int BITS_PER_WORD = 1 &lt;&lt; ADDRESS_BITS_PER_WORD;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    private final static int MAX_NODE_SIZE = 1 &lt;&lt; ADDRESS_BITS_PER_WORD;<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>     * Mimics {@link ProcedureStoreTracker#partial}.<a name="line.76"></a>
-<span class="sourceLineNo">077</span>     */<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    private final boolean partial;<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>    /* ----------------------<a name="line.80"></a>
-<span class="sourceLineNo">081</span>     * |  updated | deleted |  meaning<a name="line.81"></a>
-<span class="sourceLineNo">082</span>     * |     0    |   0     |  proc exists, but hasn't been updated since last resetUpdates().<a name="line.82"></a>
-<span class="sourceLineNo">083</span>     * |     1    |   0     |  proc was updated (but not deleted).<a name="line.83"></a>
-<span class="sourceLineNo">084</span>     * |     1    |   1     |  proc was deleted.<a name="line.84"></a>
-<span class="sourceLineNo">085</span>     * |     0    |   1     |  proc doesn't exist (maybe never created, maybe deleted in past).<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    /* ----------------------<a name="line.86"></a>
-<span class="sourceLineNo">087</span>     */<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>    /**<a name="line.89"></a>
-<span class="sourceLineNo">090</span>     * Set of procedures which have been updated since last {@link #resetUpdates()}.<a name="line.90"></a>
-<span class="sourceLineNo">091</span>     * Useful to track procedures which have been updated since last WAL write.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>     */<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    private long[] updated;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    /**<a name="line.94"></a>
-<span class="sourceLineNo">095</span>     * Keeps track of procedure ids which belong to this bitmap's range and have been deleted.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>     * This represents global state since it's not reset on WAL rolls.<a name="line.96"></a>
-<span class="sourceLineNo">097</span>     */<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    private long[] deleted;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    /**<a name="line.99"></a>
-<span class="sourceLineNo">100</span>     * Offset of bitmap i.e. procedure id corresponding to first bit.<a name="line.100"></a>
-<span class="sourceLineNo">101</span>     */<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    private long start;<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>    public void dump() {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      System.out.printf("%06d:%06d min=%d max=%d%n", getStart(), getEnd(),<a name="line.105"></a>
-<span class="sourceLineNo">106</span>        getActiveMinProcId(), getActiveMaxProcId());<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      System.out.println("Update:");<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      for (int i = 0; i &lt; updated.length; ++i) {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>        for (int j = 0; j &lt; BITS_PER_WORD; ++j) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>          System.out.print((updated[i] &amp; (1L &lt;&lt; j)) != 0 ? "1" : "0");<a name="line.110"></a>
-<span class="sourceLineNo">111</span>        }<a name="line.111"></a>
-<span class="sourceLineNo">112</span>        System.out.println(" " + i);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      }<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      System.out.println();<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      System.out.println("Delete:");<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      for (int i = 0; i &lt; deleted.length; ++i) {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        for (int j = 0; j &lt; BITS_PER_WORD; ++j) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>          System.out.print((deleted[i] &amp; (1L &lt;&lt; j)) != 0 ? "1" : "0");<a name="line.118"></a>
-<span class="sourceLineNo">119</span>        }<a name="line.119"></a>
-<span class="sourceLineNo">120</span>        System.out.println(" " + i);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      System.out.println();<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    }<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>    public BitSetNode(final long procId, final boolean partial) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      start = alignDown(procId);<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>      int count = 1;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      updated = new long[count];<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      deleted = new long[count];<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      for (int i = 0; i &lt; count; ++i) {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        updated[i] = 0;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>        deleted[i] = partial ? 0 : WORD_MASK;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      }<a name="line.134"></a>
+<span class="sourceLineNo">063</span>  public void resetToProto(ProcedureProtos.ProcedureStoreTracker trackerProtoBuf) {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    reset();<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    for (ProcedureProtos.ProcedureStoreTracker.TrackerNode protoNode: trackerProtoBuf.getNodeList()) {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>      final BitSetNode node = new BitSetNode(protoNode);<a name="line.66"></a>
+<span class="sourceLineNo">067</span>      map.put(node.getStart(), node);<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    }<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  }<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>  /**<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   * Resets internal state to same as given {@code tracker}. Does deep copy of the bitmap.<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   */<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  public void resetTo(ProcedureStoreTracker tracker) {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    resetTo(tracker, false);<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>  /**<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   * Resets internal state to same as given {@code tracker}, and change the deleted flag according<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   * to the modified flag if {@code resetDelete} is true. Does deep copy of the bitmap.<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * &lt;p/&gt;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * The {@code resetDelete} will be set to true when building cleanup tracker, please see the<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   * comments in {@link BitSetNode#BitSetNode(BitSetNode, boolean)} to learn how we change the<a name="line.83"></a>
+<span class="sourceLineNo">084</span>   * deleted flag if {@code resetDelete} is true.<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   */<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  public void resetTo(ProcedureStoreTracker tracker, boolean resetDelete) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    reset();<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    this.partial = tracker.partial;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    this.minModifiedProcId = tracker.minModifiedProcId;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    this.maxModifiedProcId = tracker.maxModifiedProcId;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    this.keepDeletes = tracker.keepDeletes;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : tracker.map.entrySet()) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      map.put(entry.getKey(), new BitSetNode(entry.getValue(), resetDelete));<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    }<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public void insert(long procId) {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    insert(null, procId);<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>  public void insert(long[] procIds) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      insert(procIds[i]);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    }<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  }<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>  public void insert(long procId, long[] subProcIds) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    BitSetNode node = update(null, procId);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    for (int i = 0; i &lt; subProcIds.length; ++i) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      node = insert(node, subProcIds[i]);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    }<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  }<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>  private BitSetNode insert(BitSetNode node, long procId) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    if (node == null || !node.contains(procId)) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      node = getOrCreateNode(procId);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    node.insertOrUpdate(procId);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    trackProcIds(procId);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    return node;<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>  public void update(long procId) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    update(null, procId);<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>  private BitSetNode update(BitSetNode node, long procId) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    node = lookupClosestNode(node, procId);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    assert node != null : "expected node to update procId=" + procId;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    assert node.contains(procId) : "expected procId=" + procId + " in the node";<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    node.insertOrUpdate(procId);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    trackProcIds(procId);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    return node;<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>      this.partial = partial;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      updateState(procId, false);<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
+<span class="sourceLineNo">136</span>  public void delete(long procId) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    delete(null, procId);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  }<a name="line.138"></a>
 <span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    protected BitSetNode(final long start, final long[] updated, final long[] deleted) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      this.start = start;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      this.updated = updated;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      this.deleted = deleted;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      this.partial = false;<a name="line.144"></a>
+<span class="sourceLineNo">140</span>  public void delete(final long[] procIds) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    Arrays.sort(procIds);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    BitSetNode node = null;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      node = delete(node, procIds[i]);<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>    public BitSetNode(ProcedureProtos.ProcedureStoreTracker.TrackerNode data) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      start = data.getStartId();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      int size = data.getUpdatedCount();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      updated = new long[size];<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      deleted = new long[size];<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      for (int i = 0; i &lt; size; ++i) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        updated[i] = data.getUpdated(i);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        deleted[i] = data.getDeleted(i);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      partial = false;<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>    public BitSetNode(final BitSetNode other, final boolean resetDelete) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      this.start = other.start;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      this.partial = other.partial;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      this.updated = other.updated.clone();<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      if (resetDelete) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        this.deleted = new long[other.deleted.length];<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        for (int i = 0; i &lt; this.deleted.length; ++i) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>          this.deleted[i] = ~(other.updated[i]);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      } else {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>        this.deleted = other.deleted.clone();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    }<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>    public void update(final long procId) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      updateState(procId, false);<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>    public void delete(final long procId) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      updateState(procId, true);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    }<a name="line.179"></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>  private BitSetNode delete(BitSetNode node, long procId) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    node = lookupClosestNode(node, procId);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    assert node != null : "expected node to delete procId=" + procId;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    assert node.contains(procId) : "expected procId=" + procId + " in the node";<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    node.delete(procId);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    if (!keepDeletes &amp;&amp; node.isEmpty()) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      // TODO: RESET if (map.size() == 1)<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      map.remove(node.getStart());<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>    trackProcIds(procId);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    return node;<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>   * Will be called when restarting where we need to rebuild the ProcedureStoreTracker.<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   */<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  public void setMinMaxModifiedProcIds(long min, long max) {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    this.minModifiedProcId = min;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    this.maxModifiedProcId = max;<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>   * This method is used when restarting where we need to rebuild the ProcedureStoreTracker. The<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * {@link #delete(long)} method above assume that the {@link BitSetNode} exists, but when restart<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * this is not true, as we will read the wal files in reverse order so a delete may come first.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   */<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public void setDeleted(long procId, boolean isDeleted) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    BitSetNode node = getOrCreateNode(procId);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    assert node.contains(procId) : "expected procId=" + procId + " in the node=" + node;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    node.updateState(procId, isDeleted);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    trackProcIds(procId);<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>    public long getStart() {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      return start;<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>    public long getEnd() {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      return start + (updated.length &lt;&lt; ADDRESS_BITS_PER_WORD) - 1;<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>    public boolean contains(final long procId) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      return start &lt;= procId &amp;&amp; procId &lt;= getEnd();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    public DeleteState isDeleted(final long procId) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      int bitmapIndex = getBitmapIndex(procId);<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      int wordIndex = bitmapIndex &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      if (wordIndex &gt;= deleted.length) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        return DeleteState.MAYBE;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      return (deleted[wordIndex] &amp; (1L &lt;&lt; bitmapIndex)) != 0 ? DeleteState.YES : DeleteState.NO;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    private boolean isUpdated(final long procId) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      int bitmapIndex = getBitmapIndex(procId);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      int wordIndex = bitmapIndex &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      if (wordIndex &gt;= updated.length) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        return false;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      }<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      return (updated[wordIndex] &amp; (1L &lt;&lt; bitmapIndex)) != 0;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>    public boolean isUpdated() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      // TODO: cache the value<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      for (int i = 0; i &lt; updated.length; ++i) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        if ((updated[i] | deleted[i]) != WORD_MASK) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          return false;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        }<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      }<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      return true;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>    /**<a name="line.221"></a>
-<span class="sourceLineNo">222</span>     * @return true, if there are no active procedures in this BitSetNode, else false.<a name="line.222"></a>
-<span class="sourceLineNo">223</span>     */<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    public boolean isEmpty() {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      // TODO: cache the value<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      for (int i = 0; i &lt; deleted.length; ++i) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        if (deleted[i] != WORD_MASK) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>          return false;<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>      return true;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    }<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>    public void resetUpdates() {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      for (int i = 0; i &lt; updated.length; ++i) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        updated[i] = 0;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      }<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>     * Clears the {@link #deleted} bitmaps.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>     */<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    public void undeleteAll() {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      for (int i = 0; i &lt; updated.length; ++i) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        deleted[i] = 0;<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">181</span>  /**<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * Set the given bit for the procId to delete if it was modified before.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * &lt;p/&gt;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * This method is used to test whether a procedure wal file can be safely deleted, as if all the<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   * procedures in the given procedure wal file has been modified in the new procedure wal files,<a name="line.185"></a>
+<span class="sourceLineNo">186</span>   * then we can delete it.<a name="line.186"></a>
+<span class="sourceLineNo">187</span>   */<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  public void setDeletedIfModified(long... procId) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    BitSetNode node = null;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    for (int i = 0; i &lt; procId.length; ++i) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      node = lookupClosestNode(node, procId[i]);<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      if (node != null &amp;&amp; node.isModified(procId[i])) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        node.delete(procId[i]);<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>  }<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>   * Similar with {@link #setDeletedIfModified(long...)}, but here the {@code procId} are given by<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   * the {@code tracker}. If a procedure is modified by us, and also by the given {@code tracker},<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * then we mark it as deleted.<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   * @see #setDeletedIfModified(long...)<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   */<a name="line.203"></a>
+<span class="sourceLineNo">204</span>  public void setDeletedIfModifiedInBoth(ProcedureStoreTracker tracker) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    BitSetNode trackerNode = null;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    for (BitSetNode node : map.values()) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      final long minProcId = node.getStart();<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      final long maxProcId = node.getEnd();<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      for (long procId = minProcId; procId &lt;= maxProcId; ++procId) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        if (!node.isModified(procId)) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>          continue;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        }<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>        trackerNode = tracker.lookupClosestNode(trackerNode, procId);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        if (trackerNode == null || !trackerNode.contains(procId) ||<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          trackerNode.isModified(procId)) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          // the procedure was removed or modified<a name="line.217"></a>
+<span class="sourceLineNo">218</span>          node.delete(procId);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      }<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    }<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>  /**<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * lookup the node containing the specified procId.<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * @param node cached node to check before doing a lookup<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @param procId the procId to lookup<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * @return the node that may contains the procId or null<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   */<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  private BitSetNode lookupClosestNode(final BitSetNode node, final long procId) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    if (node != null &amp;&amp; node.contains(procId)) return node;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    final Map.Entry&lt;Long, BitSetNode&gt; entry = map.floorEntry(procId);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    return entry != null ? entry.getValue() : null;<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>  private void trackProcIds(long procId) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    minModifiedProcId = Math.min(minModifiedProcId, procId);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    maxModifiedProcId = Math.max(maxModifiedProcId, procId);<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>  public long getModifiedMinProcId() {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return minModifiedProcId;<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>  public long getModifiedMaxProcId() {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    return maxModifiedProcId;<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>    public void unsetPartialFlag() {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      for (int i = 0; i &lt; updated.length; ++i) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        for (int j = 0; j &lt; BITS_PER_WORD; ++j) {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          if ((updated[i] &amp; (1L &lt;&lt; j)) == 0) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>            deleted[i] |= (1L &lt;&lt; j);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          }<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    }<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>     * Convert to<a name="line.260"></a>
-<span class="sourceLineNo">261</span>     * org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode<a name="line.261"></a>
-<span class="sourceLineNo">262</span>     * protobuf.<a name="line.262"></a>
-<span class="sourceLineNo">263</span>     */<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    public ProcedureProtos.ProcedureStoreTracker.TrackerNode convert() {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      ProcedureProtos.ProcedureStoreTracker.TrackerNode.Builder builder =<a name="line.265"></a>
-<span class="sourceLineNo">266</span>        ProcedureProtos.ProcedureStoreTracker.TrackerNode.newBuilder();<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      builder.setStartId(start);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>      for (int i = 0; i &lt; updated.length; ++i) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        builder.addUpdated(updated[i]);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        builder.addDeleted(deleted[i]);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      }<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      return builder.build();<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>    // ========================================================================<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    //  Grow/Merge Helpers<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    // ========================================================================<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    public boolean canGrow(final long procId) {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      return Math.abs(procId - start) &lt; MAX_NODE_SIZE;<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>    public boolean canMerge(final BitSetNode rightNode) {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      // Can just compare 'starts' since boundaries are aligned to multiples of BITS_PER_WORD.<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      assert start &lt; rightNode.start;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      return (rightNode.getEnd() - start) &lt; MAX_NODE_SIZE;<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>    public void grow(final long procId) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      int delta, offset;<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>      if (procId &lt; start) {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>        // add to head<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        long newStart = alignDown(procId);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        delta = (int)(start - newStart) &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        offset = delta;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        start = newStart;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      } else {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        // Add to tail<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        long newEnd = alignUp(procId + 1);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        delta = (int)(newEnd - getEnd()) &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        offset = 0;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">249</span>  public void reset() {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    this.keepDeletes = false;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    this.partial = false;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    this.map.clear();<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    resetModified();<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>  public boolean isModified(long procId) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    final Map.Entry&lt;Long, BitSetNode&gt; entry = map.floorEntry(procId);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    return entry != null &amp;&amp; entry.getValue().contains(procId) &amp;&amp;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      entry.getValue().isModified(procId);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>  }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span>  /**<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   * If {@link #partial} is false, returns state from the bitmap. If no state is found for<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   * {@code procId}, returns YES.<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   * If partial is true, tracker doesn't have complete view of system state, so it returns MAYBE<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * if there is no update for the procedure or if it doesn't have a state in bitmap. Otherwise,<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   * returns state from the bitmap.<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   */<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  public DeleteState isDeleted(long procId) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    Map.Entry&lt;Long, BitSetNode&gt; entry = map.floorEntry(procId);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    if (entry != null &amp;&amp; entry.getValue().contains(procId)) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      BitSetNode node = entry.getValue();<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      DeleteState state = node.isDeleted(procId);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      return partial &amp;&amp; !node.isModified(procId) ? DeleteState.MAYBE : state;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    return partial ? DeleteState.MAYBE : DeleteState.YES;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  }<a name="line.277"></a>
+<span class="sourceLineNo">278</span><a name="line.278"></a>
+<span class="sourceLineNo">279</span>  public long getActiveMinProcId() {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    // TODO: Cache?<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    Map.Entry&lt;Long, BitSetNode&gt; entry = map.firstEntry();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    return entry == null ? 0 : entry.getValue().getActiveMinProcId();<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>  public void setKeepDeletes(boolean keepDeletes) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    this.keepDeletes = keepDeletes;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    // If not to keep deletes, remove the BitSetNodes which are empty (i.e. contains ids of deleted<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    // procedures).<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    if (!keepDeletes) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      Iterator&lt;Map.Entry&lt;Long, BitSetNode&gt;&gt; it = map.entrySet().iterator();<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      while (it.hasNext()) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>        Map.Entry&lt;Long, BitSetNode&gt; entry = it.next();<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        if (entry.getValue().isEmpty()) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>          it.remove();<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        }<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  }<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>  public boolean isPartial() {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    return partial;<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>      long[] newBitmap;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      int oldSize = updated.length;<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span>      newBitmap = new long[oldSize + delta];<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      for (int i = 0; i &lt; newBitmap.length; ++i) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        newBitmap[i] = 0;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      System.arraycopy(updated, 0, newBitmap, offset, oldSize);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      updated = newBitmap;<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>      newBitmap = new long[deleted.length + delta];<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      for (int i = 0; i &lt; newBitmap.length; ++i) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        newBitmap[i] = partial ? 0 : WORD_MASK;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      System.arraycopy(deleted, 0, newBitmap, offset, oldSize);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      deleted = newBitmap;<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 void merge(final BitSetNode rightNode) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      int delta = (int)(rightNode.getEnd() - getEnd()) &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.323"></a>
+<span class="sourceLineNo">304</span>  public void setPartialFlag(boolean isPartial) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    if (this.partial &amp;&amp; !isPartial) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        entry.getValue().unsetPartialFlag();<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>    this.partial = isPartial;<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>   * @return true, if no procedure is active, else false.<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   */<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  public boolean isEmpty() {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      if (!entry.getValue().isEmpty()) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        return false;<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>    return true;<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>      long[] newBitmap;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      int oldSize = updated.length;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      int newSize = (delta - rightNode.updated.length);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      int offset = oldSize + newSize;<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>      newBitmap = new long[oldSize + delta];<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      System.arraycopy(updated, 0, newBitmap, 0, oldSize);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      System.arraycopy(rightNode.updated, 0, newBitmap, offset, rightNode.updated.length);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      updated = newBitmap;<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>      newBitmap = new long[oldSize + delta];<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      System.arraycopy(deleted, 0, newBitmap, 0, oldSize);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      System.arraycopy(rightNode.deleted, 0, newBitmap, offset, rightNode.deleted.length);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      deleted = newBitmap;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>      for (int i = 0; i &lt; newSize; ++i) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        updated[offset + i] = 0;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        deleted[offset + i] = partial ? 0 : WORD_MASK;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>    @Override<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    public String toString() {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      return "BitSetNode(" + getStart() + "-" + getEnd() + ")";<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    }<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>    //  Min/Max Helpers<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    // ========================================================================<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    public long getActiveMinProcId() {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      long minProcId = start;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      for (int i = 0; i &lt; deleted.length; ++i) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        if (deleted[i] == 0) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>          return(minProcId);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        }<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>        if (deleted[i] != WORD_MASK) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          for (int j = 0; j &lt; BITS_PER_WORD; ++j) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>            if ((deleted[i] &amp; (1L &lt;&lt; j)) != 0) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>              return minProcId + j;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>            }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          }<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>        minProcId += BITS_PER_WORD;<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      return minProcId;<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 long getActiveMaxProcId() {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      long maxProcId = getEnd();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      for (int i = deleted.length - 1; i &gt;= 0; --i) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        if (deleted[i] == 0) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          return maxProcId;<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>        if (deleted[i] != WORD_MASK) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>          for (int j = BITS_PER_WORD - 1; j &gt;= 0; --j) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>            if ((deleted[i] &amp; (1L &lt;&lt; j)) == 0) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>              return maxProcId - (BITS_PER_WORD - 1 - j);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>            }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>          }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        maxProcId -= BITS_PER_WORD;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      return maxProcId;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>    // ========================================================================<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    //  Bitmap Helpers<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    // ========================================================================<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    private int getBitmapIndex(final long procId) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      return (int)(procId - start);<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>    private void updateState(final long procId, final boolean isDeleted) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      int bitmapIndex = getBitmapIndex(procId);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      int wordIndex = bitmapIndex &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      long value = (1L &lt;&lt; bitmapIndex);<a name="line.403"></a>
-<span class="sourceLineNo">404</span><a name="line.404"></a>
-<span class="sourceLineNo">405</span>      updated[wordIndex] |= value;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      if (isDeleted) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        deleted[wordIndex] |= value;<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      } else {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        deleted[wordIndex] &amp;= ~value;<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      }<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
+<span class="sourceLineNo">325</span>  /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * @return true if all procedure was modified or deleted since last call to<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   *         {@link #resetModified()}.<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   */<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  public boolean isAllModified() {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      if (!entry.getValue().isAllModified()) {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        return false;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      }<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    }<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    return true;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>  }<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span>  /**<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   * Clears the list of updated procedure ids. This doesn't affect global list of active<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * procedure ids.<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   */<a name="line.341"></a>
+<span class="sourceLineNo">342</span>  public void resetModified() {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      entry.getValue().resetModified();<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    minModifiedProcId = Long.MAX_VALUE;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    maxModifiedProcId = Long.MIN_VALUE;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>  }<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span>  private BitSetNode getOrCreateNode(long procId) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    // If procId can fit in left node (directly or by growing it)<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    BitSetNode leftNode = null;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    boolean leftCanGrow = false;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    Map.Entry&lt;Long, BitSetNode&gt; leftEntry = map.floorEntry(procId);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    if (leftEntry != null) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      leftNode = leftEntry.getValue();<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      if (leftNode.contains(procId)) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        return leftNode;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      }<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      leftCanGrow = leftNode.canGrow(procId);<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>    // If procId can fit in right node (directly or by growing it)<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    BitSetNode rightNode = null;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    boolean rightCanGrow = false;<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    Map.Entry&lt;Long, BitSetNode&gt; rightEntry = map.ceilingEntry(procId);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    if (rightEntry != null) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      rightNode = rightEntry.getValue();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      rightCanGrow = rightNode.canGrow(procId);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      if (leftNode != null) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>        if (leftNode.canMerge(rightNode)) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          // merge left and right node<a name="line.372"></a>
+<span class="sourceLineNo">373</span>          return mergeNodes(leftNode, rightNode);<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>        // If left and right nodes can not merge, decide which one to grow.<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        if (leftCanGrow &amp;&amp; rightCanGrow) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>          if ((procId - leftNode.getEnd()) &lt;= (rightNode.getStart() - procId)) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>            return growNode(leftNode, procId);<a name="line.379"></a>
+<span class="sourceLineNo">380</span>          }<a name="line.380"></a>
+<span class="sourceLineNo">381</span>          return growNode(rightNode, procId);<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>    }<a name="line.384"></a>
+<span class="sourceLineNo">385</span><a name="line.385"></a>
+<span class="sourceLineNo">386</span>    // grow the left node<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    if (leftCanGrow) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      return growNode(leftNode, procId);<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>    // grow the right node<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    if (rightCanGrow) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      return growNode(rightNode, procId);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>    // add new node if there are no left/right nodes which can be used.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    BitSetNode node = new BitSetNode(procId, partial);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    map.put(node.getStart(), node);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    return node;<a name="line.399"></a>
+<span class="sourceLineNo">400</span>  }<a name="line.400"></a>
+<span class="sourceLineNo">401</span><a name="line.401"></a>
+<span class="sourceLineNo">402</span>  /**<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * Grows {@code node} to contain {@code procId} and updates the map.<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   * @return {@link BitSetNode} instance which contains {@code procId}.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   */<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  private BitSetNode growNode(BitSetNode node, long procId) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    map.remove(node.getStart());<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    node.grow(procId);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    map.put(node.getStart(), node);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    return node;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  }<a name="line.411"></a>
 <span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>    // ========================================================================<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    //  Helpers<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    // ========================================================================<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    /**<a name="line.417"></a>
-<span class="sourceLineNo">418</span>     * @return upper boundary (aligned to multiple of BITS_PER_WORD) of bitmap range x belongs to.<a name="line.418"></a>
-<span class="sourceLineNo">419</span>     */<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    private static long alignUp(final long x) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      return (x + (BITS_PER_WORD - 1)) &amp; -BITS_PER_WORD;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    }<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>     * @return lower boundary (aligned to multiple of BITS_PER_WORD) of bitmap range x belongs to.<a name="line.425"></a>
-<span class="sourceLineNo">426</span>     */<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    private static long alignDown(final long x) {<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      return x &amp; -BITS_PER_WORD;<a name="line.428"></a>
+<span class="sourceLineNo">413</span>  /**<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   * Merges {@code leftNode} &amp; {@code rightNode} and updates the map.<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   */<a name="line.415"></a>
+<span class="sourceLineNo">416</span>  private BitSetNode mergeNodes(BitSetNode leftNode, BitSetNode rightNode) {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    assert leftNode.getStart() &lt; rightNode.getStart();<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    leftNode.merge(rightNode);<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    map.remove(rightNode.getStart());<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    return leftNode;<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>  public void dump() {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    System.out.println("map " + map.size());<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    System.out.println("isAllModified " + isAllModified());<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    System.out.println("isEmpty " + isEmpty());<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.427"></a>
+<span class="sourceLineNo">428</span>      entry.getValue().dump();<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><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  public void resetToProto(final ProcedureProtos.ProcedureStoreTracker trackerProtoBuf) {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    reset();<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    for (ProcedureProtos.ProcedureStoreTracker.TrackerNode protoNode: trackerProtoBuf.getNodeList()) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      final BitSetNode node = new BitSetNode(protoNode);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      map.put(node.getStart(), node);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  /**<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   * Resets internal state to same as given {@code tracker}. Does deep copy of the bitmap.<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   */<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  public void resetTo(final ProcedureStoreTracker tracker) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    resetTo(tracker, false);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>  }<a name="line.445"></a>
-<span class="sourceLineNo">446</span><a name="line.446"></a>
-<span class="sourceLineNo">447</span>  public void resetTo(final ProcedureStoreTracker tracker, final boolean resetDelete) {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    this.partial = tracker.partial;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    this.minUpdatedProcId = tracker.minUpdatedProcId;<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    this.maxUpdatedProcId = tracker.maxUpdatedProcId;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    this.keepDeletes = tracker.keepDeletes;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : tracker.map.entrySet()) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      map.put(entry.getKey(), new BitSetNode(entry.getValue(), resetDelete));<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>  public void insert(long procId) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    insert(null, procId);<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>  public void insert(final long[] procIds) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      insert(procIds[i]);<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>  public void insert(final long procId, final long[] subProcIds) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    BitSetNode node = null;<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    node = update(node, procId);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    for (int i = 0; i &lt; subProcIds.length; ++i) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      node = insert(node, subProcIds[i]);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>  }<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span>  private BitSetNode insert(BitSetNode node, final long procId) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    if (node == null || !node.contains(procId)) {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      node = getOrCreateNode(procId);<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    node.update(procId);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    trackProcIds(procId);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    return node;<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>  public void update(long procId) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    update(null, procId);<a name="line.485"></a>
-<span class="sourceLineNo">486</span>  }<a name="line.486"></a>
-<span class="sourceLineNo">487</span><a name="line.487"></a>
-<span class="sourceLineNo">488</span>  private BitSetNode update(BitSetNode node, final long procId) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    node = lookupClosestNode(node, procId);<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    assert node != null : "expected node to update procId=" + procId;<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    assert node.contains(procId) : "expected procId=" + procId + " in the node";<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    node.update(procId);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    trackProcIds(procId);<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    return node;<a name="line.494"></a>
-<span class="sourceLineNo">495</span>  }<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>  public void delete(long procId) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    delete(null, procId);<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span>  public void delete(final long[] procIds) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    Arrays.sort(procIds);<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    BitSetNode node = null;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      node = delete(node, procIds[i]);<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
-<span class="sourceLineNo">507</span>  }<a name="line.507"></a>
-<span class="sourceLineNo">508</span><a name="line.508"></a>
-<span class="sourceLineNo">509</span>  private BitSetNode delete(BitSetNode node, final long procId) {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    node = lookupClosestNode(node, procId);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    assert node != null : "expected node to delete procId=" + procId;<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    assert node.contains(procId) : "expected procId=" + procId + " in the node";<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    node.delete(procId);<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    if (!keepDeletes &amp;&amp; node.isEmpty()) {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      // TODO: RESET if (map.size() == 1)<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      map.remove(node.getStart());<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span>    trackProcIds(procId);<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    return node;<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>  @InterfaceAudience.Private<a name="line.523"></a>
-<span class="sourceLineNo">524</span>  public void setDeleted(final long procId, final boolean isDeleted) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    BitSetNode node = getOrCreateNode(procId);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    assert node.contains(procId) : "expected procId=" + procId + " in the node=" + node;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    node.updateState(procId, isDeleted);<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    trackProcIds(procId);<a name="line.528"></a>
-<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>  public void setDeletedIfSet(final long... procId) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    BitSetNode node = null;<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    for (int i = 0; i &lt; procId.length; ++i) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      node = lookupClosestNode(node, procId[i]);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (node != null &amp;&amp; node.isUpdated(procId[i])) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        node.delete(procId[i]);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      }<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>  }<a name="line.539"></a>
-<span class="sourceLineNo">540</span><a name="line.540"></a>
-<span class="sourceLineNo">541</span>  public void setDeletedIfSet(final ProcedureStoreTracker tracker) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    BitSetNode trackerNode = null;<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    for (BitSetNode node: map.values()) {<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      final long minProcId = node.getStart();<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      final long maxProcId = node.getEnd();<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      for (long procId = minProcId; procId &lt;= maxProcId; ++procId) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>        if (!node.isUpdated(procId)) continue;<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>        trackerNode = tracker.lookupClosestNode(trackerNode, procId);<a name="line.549"></a>
-<span class="sourceLineNo">550</span>        if (trackerNode == null || !trackerNode.contains(procId) || trackerNode.isUpdated(procId)) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>          // the procedure was removed or updated<a name="line.551"></a>
-<span class="sourceLineNo">552</span>          node.delete(procId);<a name="line.552"></a>
-<span class="sourceLineNo">553</span>        }<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      }<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    }<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  }<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>   * lookup the node containing the specified procId.<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * @param node cached node to check before doing a lookup<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * @param procId the procId to lookup<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * @return the node that may contains the procId or null<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   */<a name="line.563"></a>
-<span class="sourceLineNo">564</span>  private BitSetNode lookupClosestNode(final BitSetNode node, final long procId) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    if (node != null &amp;&amp; node.contains(procId)) return node;<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    final Map.Entry&lt;Long, BitSetNode&gt; entry = map.floorEntry(procId);<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    return entry != null ? entry.getValue() : null;<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>  private void trackProcIds(long procId) {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    minUpdatedProcId = Math.min(minUpdatedProcId, procId);<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    maxUpdatedProcId = Math.max(maxUpdatedProcId, procId);<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  }<a name="line.573"></a>
-<span class="sourceLineNo">574</span><a name="line.574"></a>
-<span class="sourceLineNo">575</span>  public long getUpdatedMinProcId() {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    return minUpdatedProcId;<a name="line.576"></a>
-<span class="sourceLineNo">577</span>  }<a name="line.577"></a>
-<span class="sourceLineNo">578</span><a name="line.578"></a>
-<span class="sourceLineNo">579</span>  public long getUpdatedMaxProcId() {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    return maxUpdatedProcId;<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>  public void reset() {<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    this.keepDeletes = false;<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    this.partial = false;<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    this.map.clear();<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    resetUpdates();<a name="line.587"></a>
-<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>  public boolean isUpdated(long procId) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    final Map.Entry&lt;Long, BitSetNode&gt; entry = map.floorEntry(procId);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return entry != null &amp;&amp; entry.getValue().contains(procId) &amp;&amp; entry.getValue().isUpdated(procId);<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>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * If {@link #partial} is false, returns state from the bitmap. If no state is found for<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * {@code procId}, returns YES.<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   * If partial is true, tracker doesn't have complete view of system state, so it returns MAYBE<a name="line.598"></a>
-<span class="sourceLineNo">599</span>   * if there is no update for the procedure or if it doesn't have a state in bitmap. Otherwise,<a name="line.599"></a>
-<span class="sourceLineNo">600</span>   * returns state from the bitmap.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>   */<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  public DeleteState isDeleted(long procId) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    Map.Entry&lt;Long, BitSetNode&gt; entry = map.floorEntry(procId);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    if (entry != null &amp;&amp; entry.getValue().contains(procId)) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      BitSetNode node = entry.getValue();<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      DeleteState state = node.isDeleted(procId);<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      return partial &amp;&amp; !node.isUpdated(procId) ? DeleteState.MAYBE : state;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    return partial ? DeleteState.MAYBE : DeleteState.YES;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>  }<a name="line.610"></a>
-<span class="sourceLineNo">611</span><a name="line.611"></a>
-<span class="sourceLineNo">612</span>  public long getActiveMinProcId() {<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    // TODO: Cache?<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    Map.Entry&lt;Long, BitSetNode&gt; entry = map.firstEntry();<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    return entry == null ? 0 : entry.getValue().getActiveMinProcId();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>  }<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>  public void setKeepDeletes(boolean keepDeletes) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    this.keepDeletes = keepDeletes;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    // If not to keep deletes, remove the BitSetNodes which are empty (i.e. contains ids of deleted<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    // procedures).<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    if (!keepDeletes) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      Iterator&lt;Map.Entry&lt;Long, BitSetNode&gt;&gt; it = map.entrySet().iterator();<a name="line.623"></a>
-<span class="sourceLineNo">624</span>      while (it.hasNext()) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        Map.Entry&lt;Long, BitSetNode&gt; entry = it.next();<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        if (entry.getValue().isEmpty()) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>          it.remove();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        }<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>  public boolean isPartial() {<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    return partial;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  }<a name="line.635"></a>
-<span class="sourceLineNo">636</span><a name="line.636"></a>
-<span class="sourceLineNo">637</span>  public void setPartialFlag

<TRUNCATED>

[14/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html
index d27bef3..e1b183b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html
@@ -23,603 +23,603 @@
 <span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
 <span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
-<span class="sourceLineNo">018</span><a name="line.18"></a>
-<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.procedure2.store.wal;<a name="line.19"></a>
-<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.io.FileNotFoundException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.ArrayList;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.Arrays;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.Collections;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Comparator;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.HashSet;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Iterator;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.LinkedList;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.Set;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.LinkedTransferQueue;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.TimeUnit;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.locks.Condition;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.fs.FileAlreadyExistsException;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.fs.FileStatus;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.fs.FileSystem;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.fs.Path;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.fs.PathFilter;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.HConstants;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreBase;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.procedure2.util.ByteSlot;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.procedure2.util.StringUtils;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.slf4j.Logger;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.slf4j.LoggerFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hbase.thirdparty.org.apache.commons.collections4.queue.CircularFifoQueue;<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>/**<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * WAL implementation of the ProcedureStore.<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * @see ProcedureWALPrettyPrinter for printing content of a single WAL.<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * @see #main(String[]) to parse a directory of MasterWALProcs.<a name="line.70"></a>
-<span class="sourceLineNo">071</span> */<a name="line.71"></a>
-<span class="sourceLineNo">072</span>@InterfaceAudience.Private<a name="line.72"></a>
-<span class="sourceLineNo">073</span>@InterfaceStability.Evolving<a name="line.73"></a>
-<span class="sourceLineNo">074</span>public class WALProcedureStore extends ProcedureStoreBase {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private static final Logger LOG = LoggerFactory.getLogger(WALProcedureStore.class);<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  public static final String LOG_PREFIX = "pv2-";<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  /** Used to construct the name of the log directory for master procedures */<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  public static final String MASTER_PROCEDURE_LOGDIR = "MasterProcWALs";<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  public interface LeaseRecovery {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    void recoverFileLease(FileSystem fs, Path path) throws IOException;<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>  public static final String WAL_COUNT_WARN_THRESHOLD_CONF_KEY =<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    "hbase.procedure.store.wal.warn.threshold";<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private static final int DEFAULT_WAL_COUNT_WARN_THRESHOLD = 64;<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  public static final String EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY =<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    "hbase.procedure.store.wal.exec.cleanup.on.load";<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private static final boolean DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY = true;<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  public static final String MAX_RETRIES_BEFORE_ROLL_CONF_KEY =<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    "hbase.procedure.store.wal.max.retries.before.roll";<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private static final int DEFAULT_MAX_RETRIES_BEFORE_ROLL = 3;<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  public static final String WAIT_BEFORE_ROLL_CONF_KEY =<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    "hbase.procedure.store.wal.wait.before.roll";<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private static final int DEFAULT_WAIT_BEFORE_ROLL = 500;<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  public static final String ROLL_RETRIES_CONF_KEY =<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    "hbase.procedure.store.wal.max.roll.retries";<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  private static final int DEFAULT_ROLL_RETRIES = 3;<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  public static final String MAX_SYNC_FAILURE_ROLL_CONF_KEY =<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    "hbase.procedure.store.wal.sync.failure.roll.max";<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  private static final int DEFAULT_MAX_SYNC_FAILURE_ROLL = 3;<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  public static final String PERIODIC_ROLL_CONF_KEY =<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    "hbase.procedure.store.wal.periodic.roll.msec";<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  private static final int DEFAULT_PERIODIC_ROLL = 60 * 60 * 1000; // 1h<a name="line.111"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.procedure2.store.wal;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.FileNotFoundException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.ArrayList;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.Arrays;<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.HashSet;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.Iterator;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.LinkedList;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.Set;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.concurrent.LinkedTransferQueue;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.concurrent.TimeUnit;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.locks.Condition;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.conf.Configuration;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.fs.FileAlreadyExistsException;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.fs.FileStatus;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.fs.FileSystem;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.fs.Path;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.fs.PathFilter;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HConstants;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreBase;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.procedure2.util.ByteSlot;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.procedure2.util.StringUtils;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.slf4j.Logger;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.slf4j.LoggerFactory;<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hbase.thirdparty.org.apache.commons.collections4.queue.CircularFifoQueue;<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader;<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>/**<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * WAL implementation of the ProcedureStore.<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * &lt;p/&gt;<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * When starting, the upper layer will first call {@link #start(int)}, then {@link #recoverLease()},<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * then {@link #load(ProcedureLoader)}.<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * &lt;p/&gt;<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * In {@link #recoverLease()}, we will get the lease by closing all the existing wal files(by<a name="line.70"></a>
+<span class="sourceLineNo">071</span> * calling recoverFileLease), and creating a new wal writer. And we will also get the list of all<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * the old wal files.<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * &lt;p/&gt;<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * FIXME: notice that the current recover lease implementation is problematic, it can not deal with<a name="line.74"></a>
+<span class="sourceLineNo">075</span> * the races if there are two master both wants to acquire the lease...<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * &lt;p/&gt;<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * In {@link #load(ProcedureLoader)} method, we will load all the active procedures. See the<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * comments of this method for more details.<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * &lt;p/&gt;<a name="line.79"></a>
+<span class="sourceLineNo">080</span> * The actual logging way is a bit like our FileSystem based WAL implementation as RS side. There is<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * a {@link #slots}, which is more like the ring buffer, and in the insert, update and delete<a name="line.81"></a>
+<span class="sourceLineNo">082</span> * methods we will put thing into the {@link #slots} and wait. And there is a background sync<a name="line.82"></a>
+<span class="sourceLineNo">083</span> * thread(see the {@link #syncLoop()} method) which get data from the {@link #slots} and write them<a name="line.83"></a>
+<span class="sourceLineNo">084</span> * to the FileSystem, and notify the caller that we have finished.<a name="line.84"></a>
+<span class="sourceLineNo">085</span> * &lt;p/&gt;<a name="line.85"></a>
+<span class="sourceLineNo">086</span> * TODO: try using disruptor to increase performance and simplify the logic?<a name="line.86"></a>
+<span class="sourceLineNo">087</span> * &lt;p/&gt;<a name="line.87"></a>
+<span class="sourceLineNo">088</span> * The {@link #storeTracker} keeps track of the modified procedures in the newest wal file, which is<a name="line.88"></a>
+<span class="sourceLineNo">089</span> * also the one being written currently. And the deleted bits in it are for all the procedures, not<a name="line.89"></a>
+<span class="sourceLineNo">090</span> * only the ones in the newest wal file. And when rolling a log, we will first store it in the<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * trailer of the current wal file, and then reset its modified bits, so that it can start to track<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * the modified procedures for the new wal file.<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * &lt;p/&gt;<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * The {@link #holdingCleanupTracker} is used to test whether we are safe to delete the oldest wal<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * file. When there are log rolling and there are more than 1 wal files, we will make use of it. It<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * will first be initialized to the oldest file's tracker(which is stored in the trailer), using the<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * method {@link ProcedureStoreTracker#resetTo(ProcedureStoreTracker, boolean)}, and then merge it<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * with the tracker of every newer wal files, using the<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * {@link ProcedureStoreTracker#setDeletedIfModifiedInBoth(ProcedureStoreTracker)}. If we find out<a name="line.99"></a>
+<span class="sourceLineNo">100</span> * that all the modified procedures for the oldest wal file are modified or deleted in newer wal<a name="line.100"></a>
+<span class="sourceLineNo">101</span> * files, then we can delete it.<a name="line.101"></a>
+<span class="sourceLineNo">102</span> * @see ProcedureWALPrettyPrinter for printing content of a single WAL.<a name="line.102"></a>
+<span class="sourceLineNo">103</span> * @see #main(String[]) to parse a directory of MasterWALProcs.<a name="line.103"></a>
+<span class="sourceLineNo">104</span> */<a name="line.104"></a>
+<span class="sourceLineNo">105</span>@InterfaceAudience.Private<a name="line.105"></a>
+<span class="sourceLineNo">106</span>public class WALProcedureStore extends ProcedureStoreBase {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  private static final Logger LOG = LoggerFactory.getLogger(WALProcedureStore.class);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  public static final String LOG_PREFIX = "pv2-";<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  /** Used to construct the name of the log directory for master procedures */<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  public static final String MASTER_PROCEDURE_LOGDIR = "MasterProcWALs";<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
 <span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public static final String SYNC_WAIT_MSEC_CONF_KEY = "hbase.procedure.store.wal.sync.wait.msec";<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  private static final int DEFAULT_SYNC_WAIT_MSEC = 100;<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span>  public static final String USE_HSYNC_CONF_KEY = "hbase.procedure.store.wal.use.hsync";<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  private static final boolean DEFAULT_USE_HSYNC = true;<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  public static final String ROLL_THRESHOLD_CONF_KEY = "hbase.procedure.store.wal.roll.threshold";<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  private static final long DEFAULT_ROLL_THRESHOLD = 32 * 1024 * 1024; // 32M<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public static final String STORE_WAL_SYNC_STATS_COUNT =<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      "hbase.procedure.store.wal.sync.stats.count";<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  private static final int DEFAULT_SYNC_STATS_COUNT = 10;<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>  private final LinkedList&lt;ProcedureWALFile&gt; logs = new LinkedList&lt;&gt;();<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  private final ProcedureStoreTracker holdingCleanupTracker = new ProcedureStoreTracker();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  private final ProcedureStoreTracker storeTracker = new ProcedureStoreTracker();<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  private final ReentrantLock lock = new ReentrantLock();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  private final Condition waitCond = lock.newCondition();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  private final Condition slotCond = lock.newCondition();<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  private final Condition syncCond = lock.newCondition();<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>  private final LeaseRecovery leaseRecovery;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  private final Configuration conf;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  private final FileSystem fs;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  private final Path walDir;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  private final Path walArchiveDir;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  private final boolean enforceStreamCapability;<a name="line.139"></a>
+<span class="sourceLineNo">113</span>  public interface LeaseRecovery {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    void recoverFileLease(FileSystem fs, Path path) throws IOException;<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>  public static final String WAL_COUNT_WARN_THRESHOLD_CONF_KEY =<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    "hbase.procedure.store.wal.warn.threshold";<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  private static final int DEFAULT_WAL_COUNT_WARN_THRESHOLD = 64;<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public static final String EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY =<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    "hbase.procedure.store.wal.exec.cleanup.on.load";<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private static final boolean DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY = true;<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span>  public static final String MAX_RETRIES_BEFORE_ROLL_CONF_KEY =<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    "hbase.procedure.store.wal.max.retries.before.roll";<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  private static final int DEFAULT_MAX_RETRIES_BEFORE_ROLL = 3;<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>  public static final String WAIT_BEFORE_ROLL_CONF_KEY =<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    "hbase.procedure.store.wal.wait.before.roll";<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  private static final int DEFAULT_WAIT_BEFORE_ROLL = 500;<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>  public static final String ROLL_RETRIES_CONF_KEY =<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    "hbase.procedure.store.wal.max.roll.retries";<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  private static final int DEFAULT_ROLL_RETRIES = 3;<a name="line.135"></a>
+<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">137</span>  public static final String MAX_SYNC_FAILURE_ROLL_CONF_KEY =<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    "hbase.procedure.store.wal.sync.failure.roll.max";<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  private static final int DEFAULT_MAX_SYNC_FAILURE_ROLL = 3;<a name="line.139"></a>
 <span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  private final AtomicReference&lt;Throwable&gt; syncException = new AtomicReference&lt;&gt;();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private final AtomicBoolean loading = new AtomicBoolean(true);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  private final AtomicBoolean inSync = new AtomicBoolean(false);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private final AtomicLong totalSynced = new AtomicLong(0);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  private final AtomicLong lastRollTs = new AtomicLong(0);<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  private final AtomicLong syncId = new AtomicLong(0);<a name="line.146"></a>
+<span class="sourceLineNo">141</span>  public static final String PERIODIC_ROLL_CONF_KEY =<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    "hbase.procedure.store.wal.periodic.roll.msec";<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  private static final int DEFAULT_PERIODIC_ROLL = 60 * 60 * 1000; // 1h<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>  public static final String SYNC_WAIT_MSEC_CONF_KEY = "hbase.procedure.store.wal.sync.wait.msec";<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  private static final int DEFAULT_SYNC_WAIT_MSEC = 100;<a name="line.146"></a>
 <span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private LinkedTransferQueue&lt;ByteSlot&gt; slotsCache = null;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  private Set&lt;ProcedureWALFile&gt; corruptedLogs = null;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  private FSDataOutputStream stream = null;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  private int runningProcCount = 1;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  private long flushLogId = 0;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  private int syncMaxSlot = 1;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  private int slotIndex = 0;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  private Thread syncThread;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  private ByteSlot[] slots;<a name="line.156"></a>
+<span class="sourceLineNo">148</span>  public static final String USE_HSYNC_CONF_KEY = "hbase.procedure.store.wal.use.hsync";<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private static final boolean DEFAULT_USE_HSYNC = true;<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public static final String ROLL_THRESHOLD_CONF_KEY = "hbase.procedure.store.wal.roll.threshold";<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  private static final long DEFAULT_ROLL_THRESHOLD = 32 * 1024 * 1024; // 32M<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>  public static final String STORE_WAL_SYNC_STATS_COUNT =<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      "hbase.procedure.store.wal.sync.stats.count";<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  private static final int DEFAULT_SYNC_STATS_COUNT = 10;<a name="line.156"></a>
 <span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>  private int walCountWarnThreshold;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  private int maxRetriesBeforeRoll;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  private int maxSyncFailureRoll;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  private int waitBeforeRoll;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  private int rollRetries;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  private int periodicRollMsec;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  private long rollThreshold;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>  private boolean useHsync;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  private int syncWaitMsec;<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>  // Variables used for UI display<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  private CircularFifoQueue syncMetricsQueue;<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>  public static class SyncMetrics {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private long timestamp;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    private long syncWaitMs;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    private long totalSyncedBytes;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    private int syncedEntries;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    private float syncedPerSec;<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>    public long getTimestamp() {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      return timestamp;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>    public long getSyncWaitMs() {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      return syncWaitMs;<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>    public long getTotalSyncedBytes() {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      return totalSyncedBytes;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
+<span class="sourceLineNo">158</span>  private final LinkedList&lt;ProcedureWALFile&gt; logs = new LinkedList&lt;&gt;();<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  private final ProcedureStoreTracker holdingCleanupTracker = new ProcedureStoreTracker();<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  private final ProcedureStoreTracker storeTracker = new ProcedureStoreTracker();<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  private final ReentrantLock lock = new ReentrantLock();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  private final Condition waitCond = lock.newCondition();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  private final Condition slotCond = lock.newCondition();<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  private final Condition syncCond = lock.newCondition();<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>  private final LeaseRecovery leaseRecovery;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  private final Configuration conf;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  private final FileSystem fs;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  private final Path walDir;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  private final Path walArchiveDir;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  private final boolean enforceStreamCapability;<a name="line.171"></a>
+<span class="sourceLineNo">172</span><a name="line.172"></a>
+<span class="sourceLineNo">173</span>  private final AtomicReference&lt;Throwable&gt; syncException = new AtomicReference&lt;&gt;();<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  private final AtomicBoolean loading = new AtomicBoolean(true);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  private final AtomicBoolean inSync = new AtomicBoolean(false);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  private final AtomicLong totalSynced = new AtomicLong(0);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  private final AtomicLong lastRollTs = new AtomicLong(0);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  private final AtomicLong syncId = new AtomicLong(0);<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span>  private LinkedTransferQueue&lt;ByteSlot&gt; slotsCache = null;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>  private Set&lt;ProcedureWALFile&gt; corruptedLogs = null;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  private FSDataOutputStream stream = null;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  private int runningProcCount = 1;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  private long flushLogId = 0;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  private int syncMaxSlot = 1;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  private int slotIndex = 0;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  private Thread syncThread;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  private ByteSlot[] slots;<a name="line.188"></a>
 <span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>    public long getSyncedEntries() {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      return syncedEntries;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    }<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>    public float getSyncedPerSec() {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      return syncedPerSec;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  }<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>  public WALProcedureStore(final Configuration conf, final LeaseRecovery leaseRecovery)<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      throws IOException {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    this(conf,<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        new Path(CommonFSUtils.getWALRootDir(conf), MASTER_PROCEDURE_LOGDIR),<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        new Path(CommonFSUtils.getWALRootDir(conf), HConstants.HREGION_OLDLOGDIR_NAME),<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        leaseRecovery);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  @VisibleForTesting<a name="line.207"></a>
-<span class="sourceLineNo">208</span>  public WALProcedureStore(final Configuration conf, final Path walDir, final Path walArchiveDir,<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      final LeaseRecovery leaseRecovery) throws IOException {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    this.conf = conf;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    this.leaseRecovery = leaseRecovery;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    this.walDir = walDir;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    this.walArchiveDir = walArchiveDir;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    this.fs = walDir.getFileSystem(conf);<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    this.enforceStreamCapability = conf.getBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE, true);<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>    // Create the log directory for the procedure store<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    if (!fs.exists(walDir)) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      if (!fs.mkdirs(walDir)) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        throw new IOException("Unable to mkdir " + walDir);<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>    // Now that it exists, set the log policy<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    String storagePolicy =<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        conf.get(HConstants.WAL_STORAGE_POLICY, HConstants.DEFAULT_WAL_STORAGE_POLICY);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    CommonFSUtils.setStoragePolicy(fs, walDir, storagePolicy);<a name="line.226"></a>
-<span class="sourceLineNo">227</span><a name="line.227"></a>
-<span class="sourceLineNo">228</span>    // Create archive dir up front. Rename won't work w/o it up on HDFS.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    if (this.walArchiveDir != null &amp;&amp; !this.fs.exists(this.walArchiveDir)) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      if (this.fs.mkdirs(this.walArchiveDir)) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        if (LOG.isDebugEnabled()) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          LOG.debug("Created Procedure Store WAL archive dir " + this.walArchiveDir);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        }<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      } else {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        LOG.warn("Failed create of " + this.walArchiveDir);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    }<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  }<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>  @Override<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  public void start(int numSlots) throws IOException {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    if (!setRunning(true)) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      return;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
-<span class="sourceLineNo">245</span><a name="line.245"></a>
-<span class="sourceLineNo">246</span>    // Init buffer slots<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    loading.set(true);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    runningProcCount = numSlots;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    syncMaxSlot = numSlots;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    slots = new ByteSlot[numSlots];<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    slotsCache = new LinkedTransferQueue();<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    while (slotsCache.size() &lt; numSlots) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      slotsCache.offer(new ByteSlot());<a name="line.253"></a>
+<span class="sourceLineNo">190</span>  private int walCountWarnThreshold;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  private int maxRetriesBeforeRoll;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  private int maxSyncFailureRoll;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  private int waitBeforeRoll;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  private int rollRetries;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  private int periodicRollMsec;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>  private long rollThreshold;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  private boolean useHsync;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>  private int syncWaitMsec;<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>  // Variables used for UI display<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  private CircularFifoQueue&lt;SyncMetrics&gt; syncMetricsQueue;<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>  public static class SyncMetrics {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    private long timestamp;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    private long syncWaitMs;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    private long totalSyncedBytes;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    private int syncedEntries;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    private float syncedPerSec;<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public long getTimestamp() {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return timestamp;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>    public long getSyncWaitMs() {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      return syncWaitMs;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span>    public long getTotalSyncedBytes() {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      return totalSyncedBytes;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>    public long getSyncedEntries() {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      return syncedEntries;<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>    public float getSyncedPerSec() {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      return syncedPerSec;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>  public WALProcedureStore(final Configuration conf, final LeaseRecovery leaseRecovery)<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      throws IOException {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    this(conf,<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        new Path(CommonFSUtils.getWALRootDir(conf), MASTER_PROCEDURE_LOGDIR),<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        new Path(CommonFSUtils.getWALRootDir(conf), HConstants.HREGION_OLDLOGDIR_NAME),<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        leaseRecovery);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  }<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>  @VisibleForTesting<a name="line.239"></a>
+<span class="sourceLineNo">240</span>  public WALProcedureStore(final Configuration conf, final Path walDir, final Path walArchiveDir,<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      final LeaseRecovery leaseRecovery) throws IOException {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    this.conf = conf;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    this.leaseRecovery = leaseRecovery;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    this.walDir = walDir;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    this.walArchiveDir = walArchiveDir;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    this.fs = walDir.getFileSystem(conf);<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    this.enforceStreamCapability = conf.getBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE, true);<a name="line.247"></a>
+<span class="sourceLineNo">248</span><a name="line.248"></a>
+<span class="sourceLineNo">249</span>    // Create the log directory for the procedure store<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    if (!fs.exists(walDir)) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      if (!fs.mkdirs(walDir)) {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        throw new IOException("Unable to mkdir " + walDir);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      }<a name="line.253"></a>
 <span class="sourceLineNo">254</span>    }<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span>    // Tunings<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    walCountWarnThreshold =<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      conf.getInt(WAL_COUNT_WARN_THRESHOLD_CONF_KEY, DEFAULT_WAL_COUNT_WARN_THRESHOLD);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    maxRetriesBeforeRoll =<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      conf.getInt(MAX_RETRIES_BEFORE_ROLL_CONF_KEY, DEFAULT_MAX_RETRIES_BEFORE_ROLL);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    maxSyncFailureRoll = conf.getInt(MAX_SYNC_FAILURE_ROLL_CONF_KEY, DEFAULT_MAX_SYNC_FAILURE_ROLL);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    waitBeforeRoll = conf.getInt(WAIT_BEFORE_ROLL_CONF_KEY, DEFAULT_WAIT_BEFORE_ROLL);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    rollRetries = conf.getInt(ROLL_RETRIES_CONF_KEY, DEFAULT_ROLL_RETRIES);<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    rollThreshold = conf.getLong(ROLL_THRESHOLD_CONF_KEY, DEFAULT_ROLL_THRESHOLD);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    periodicRollMsec = conf.getInt(PERIODIC_ROLL_CONF_KEY, DEFAULT_PERIODIC_ROLL);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    syncWaitMsec = conf.getInt(SYNC_WAIT_MSEC_CONF_KEY, DEFAULT_SYNC_WAIT_MSEC);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    useHsync = conf.getBoolean(USE_HSYNC_CONF_KEY, DEFAULT_USE_HSYNC);<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>    // WebUI<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    syncMetricsQueue = new CircularFifoQueue(<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      conf.getInt(STORE_WAL_SYNC_STATS_COUNT, DEFAULT_SYNC_STATS_COUNT));<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>    // Init sync thread<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    syncThread = new Thread("WALProcedureStoreSyncThread") {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      @Override<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      public void run() {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        try {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>          syncLoop();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        } catch (Throwable e) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>          LOG.error("Got an exception from the sync-loop", e);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>          if (!isSyncAborted()) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>            sendAbortProcessSignal();<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>    };<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    syncThread.start();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  }<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span>  @Override<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  public void stop(final boolean abort) {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    if (!setRunning(false)) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      return;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    }<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>    LOG.info("Stopping the WAL Procedure Store, isAbort=" + abort +<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      (isSyncAborted() ? " (self aborting)" : ""));<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    sendStopSignal();<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    if (!isSyncAborted()) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      try {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        while (syncThread.isAlive()) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>          sendStopSignal();<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          syncThread.join(250);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        }<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      } catch (InterruptedException e) {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        LOG.warn("join interrupted", e);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        Thread.currentThread().interrupt();<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><a name="line.310"></a>
-<span class="sourceLineNo">311</span>    // Close the writer<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    closeCurrentLogStream();<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>    // Close the old logs<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    // they should be already closed, this is just in case the load fails<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    // and we call start() and then stop()<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    for (ProcedureWALFile log: logs) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      log.close();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    logs.clear();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    loading.set(true);<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>  private void sendStopSignal() {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    if (lock.tryLock()) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      try {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>        waitCond.signalAll();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        syncCond.signalAll();<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      } finally {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        lock.unlock();<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><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  @Override<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  public int getNumThreads() {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    return slots == null ? 0 : slots.length;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>  @Override<a name="line.340"></a>
-<span class="sourceLineNo">341</span>  public int setRunningProcedureCount(final int count) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    this.runningProcCount = count &gt; 0 ? Math.min(count, slots.length) : slots.length;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    return this.runningProcCount;<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>  public ProcedureStoreTracker getStoreTracker() {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    return storeTracker;<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  }<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span>  public ArrayList&lt;ProcedureWALFile&gt; getActiveLogs() {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    lock.lock();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    try {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      return new ArrayList&lt;&gt;(logs);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    } finally {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      lock.unlock();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  public Set&lt;ProcedureWALFile&gt; getCorruptedLogs() {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return corruptedLogs;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  @Override<a name="line.363"></a>
-<span class="sourceLineNo">364</span>  public void recoverLease() throws IOException {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    lock.lock();<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    try {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      LOG.trace("Starting WAL Procedure Store lease recovery");<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      boolean afterFirstAttempt = false;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      while (isRunning()) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        // Don't sleep before first attempt<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        if (afterFirstAttempt) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          LOG.trace("Sleep {} ms after first lease recovery attempt.",<a name="line.372"></a>
-<span class="sourceLineNo">373</span>              waitBeforeRoll);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          Threads.sleepWithoutInterrupt(waitBeforeRoll);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        } else {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          afterFirstAttempt = true;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>        FileStatus[] oldLogs = getLogFiles();<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        // Get Log-MaxID and recover lease on old logs<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        try {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>          flushLogId = initOldLogs(oldLogs);<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        } catch (FileNotFoundException e) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>          LOG.warn("Someone else is active and deleted logs. retrying.", e);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>          continue;<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>        // Create new state-log<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        if (!rollWriter(flushLogId + 1)) {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>          // someone else has already created this log<a name="line.389"></a>
-<span class="sourceLineNo">390</span>          LOG.debug("Someone else has already created log {}. Retrying.", flushLogId);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>          continue;<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>        // We have the lease on the log<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        oldLogs = getLogFiles();<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        if (getMaxLogId(oldLogs) &gt; flushLogId) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          if (LOG.isDebugEnabled()) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>            LOG.debug("Someone else created new logs. Expected maxLogId &lt; " + flushLogId);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>          logs.getLast().removeFile(this.walArchiveDir);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>          continue;<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>        LOG.trace("Lease acquired for flushLogId={}", flushLogId);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        break;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    } finally {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      lock.unlock();<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span>  public void load(final ProcedureLoader loader) throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    lock.lock();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    try {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      if (logs.isEmpty()) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        throw new RuntimeException("recoverLease() must be called before loading data");<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>      // Nothing to do, If we have only the current log.<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      if (logs.size() == 1) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        LOG.trace("No state logs to replay.");<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        loader.setMaxProcId(0);<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        return;<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      }<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span>      // Load the old logs<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      final Iterator&lt;ProcedureWALFile&gt; it = logs.descendingIterator();<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      it.next(); // Skip the current log<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>      ProcedureWALFormat.load(it, storeTracker, new ProcedureWALFormat.Loader() {<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span>        @Override<a name="line.433"></a>
-<span class="sourceLineNo">434</span>        public void setMaxProcId(long maxProcId) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          loader.setMaxProcId(maxProcId);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>        @Override<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        public void load(ProcedureIterator procIter) throws IOException {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>          loader.load(procIter);<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>        @Override<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>          loader.handleCorrupted(procIter);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        }<a name="line.446"></a>
+<span class="sourceLineNo">255</span>    // Now that it exists, set the log policy<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    String storagePolicy =<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        conf.get(HConstants.WAL_STORAGE_POLICY, HConstants.DEFAULT_WAL_STORAGE_POLICY);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    CommonFSUtils.setStoragePolicy(fs, walDir, storagePolicy);<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>    // Create archive dir up front. Rename won't work w/o it up on HDFS.<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    if (this.walArchiveDir != null &amp;&amp; !this.fs.exists(this.walArchiveDir)) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      if (this.fs.mkdirs(this.walArchiveDir)) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>        LOG.debug("Created Procedure Store WAL archive dir {}", this.walArchiveDir);<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      } else {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>        LOG.warn("Failed create of {}", this.walArchiveDir);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  @Override<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  public void start(int numSlots) throws IOException {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    if (!setRunning(true)) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      return;<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>    // Init buffer slots<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    loading.set(true);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    runningProcCount = numSlots;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    syncMaxSlot = numSlots;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    slots = new ByteSlot[numSlots];<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    slotsCache = new LinkedTransferQueue&lt;&gt;();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    while (slotsCache.size() &lt; numSlots) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      slotsCache.offer(new ByteSlot());<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>    // Tunings<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    walCountWarnThreshold =<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      conf.getInt(WAL_COUNT_WARN_THRESHOLD_CONF_KEY, DEFAULT_WAL_COUNT_WARN_THRESHOLD);<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    maxRetriesBeforeRoll =<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      conf.getInt(MAX_RETRIES_BEFORE_ROLL_CONF_KEY, DEFAULT_MAX_RETRIES_BEFORE_ROLL);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    maxSyncFailureRoll = conf.getInt(MAX_SYNC_FAILURE_ROLL_CONF_KEY, DEFAULT_MAX_SYNC_FAILURE_ROLL);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    waitBeforeRoll = conf.getInt(WAIT_BEFORE_ROLL_CONF_KEY, DEFAULT_WAIT_BEFORE_ROLL);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    rollRetries = conf.getInt(ROLL_RETRIES_CONF_KEY, DEFAULT_ROLL_RETRIES);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    rollThreshold = conf.getLong(ROLL_THRESHOLD_CONF_KEY, DEFAULT_ROLL_THRESHOLD);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    periodicRollMsec = conf.getInt(PERIODIC_ROLL_CONF_KEY, DEFAULT_PERIODIC_ROLL);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    syncWaitMsec = conf.getInt(SYNC_WAIT_MSEC_CONF_KEY, DEFAULT_SYNC_WAIT_MSEC);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    useHsync = conf.getBoolean(USE_HSYNC_CONF_KEY, DEFAULT_USE_HSYNC);<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>    // WebUI<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    syncMetricsQueue = new CircularFifoQueue&lt;&gt;(<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      conf.getInt(STORE_WAL_SYNC_STATS_COUNT, DEFAULT_SYNC_STATS_COUNT));<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>    // Init sync thread<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    syncThread = new Thread("WALProcedureStoreSyncThread") {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      @Override<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      public void run() {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        try {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>          syncLoop();<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        } catch (Throwable e) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>          LOG.error("Got an exception from the sync-loop", e);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>          if (!isSyncAborted()) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>            sendAbortProcessSignal();<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>    };<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    syncThread.start();<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>  @Override<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  public void stop(final boolean abort) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    if (!setRunning(false)) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      return;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span>    LOG.info("Stopping the WAL Procedure Store, isAbort=" + abort +<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      (isSyncAborted() ? " (self aborting)" : ""));<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    sendStopSignal();<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    if (!isSyncAborted()) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      try {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        while (syncThread.isAlive()) {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>          sendStopSignal();<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          syncThread.join(250);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        }<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      } catch (InterruptedException e) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        LOG.warn("join interrupted", e);<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        Thread.currentThread().interrupt();<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><a name="line.340"></a>
+<span class="sourceLineNo">341</span>    // Close the writer<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    closeCurrentLogStream();<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>    // Close the old logs<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    // they should be already closed, this is just in case the load fails<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    // and we call start() and then stop()<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    for (ProcedureWALFile log: logs) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      log.close();<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    }<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    logs.clear();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    loading.set(true);<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>  private void sendStopSignal() {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    if (lock.tryLock()) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      try {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        waitCond.signalAll();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        syncCond.signalAll();<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      } finally {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        lock.unlock();<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>  @Override<a name="line.365"></a>
+<span class="sourceLineNo">366</span>  public int getNumThreads() {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    return slots == null ? 0 : slots.length;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>  }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span>  @Override<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  public int setRunningProcedureCount(final int count) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    this.runningProcCount = count &gt; 0 ? Math.min(count, slots.length) : slots.length;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    return this.runningProcCount;<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>  public ProcedureStoreTracker getStoreTracker() {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    return storeTracker;<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>  public ArrayList&lt;ProcedureWALFile&gt; getActiveLogs() {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    lock.lock();<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    try {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      return new ArrayList&lt;&gt;(logs);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    } finally {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      lock.unlock();<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    }<a name="line.386"></a>
+<span class="sourceLineNo">387</span>  }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span>  public Set&lt;ProcedureWALFile&gt; getCorruptedLogs() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    return corruptedLogs;<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span>  @Override<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  public void recoverLease() throws IOException {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    lock.lock();<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    try {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      LOG.trace("Starting WAL Procedure Store lease recovery");<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      boolean afterFirstAttempt = false;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      while (isRunning()) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>        // Don't sleep before first attempt<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        if (afterFirstAttempt) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          LOG.trace("Sleep {} ms after first lease recovery attempt.",<a name="line.402"></a>
+<span class="sourceLineNo">403</span>              waitBeforeRoll);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          Threads.sleepWithoutInterrupt(waitBeforeRoll);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        } else {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          afterFirstAttempt = true;<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        }<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        FileStatus[] oldLogs = getLogFiles();<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        // Get Log-MaxID and recover lease on old logs<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        try {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>          flushLogId = initOldLogs(oldLogs);<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        } catch (FileNotFoundException e) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>          LOG.warn("Someone else is active and deleted logs. retrying.", e);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>          continue;<a name="line.414"></a>
+<span class="sourceLineNo">415</span>        }<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span>        // Create new state-log<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        if (!rollWriter(flushLogId + 1)) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>          // someone else has already created this log<a name="line.419"></a>
+<span class="sourceLineNo">420</span>          LOG.debug("Someone else has already created log {}. Retrying.", flushLogId);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>          continue;<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        }<a name="line.422"></a>
+<span class="sourceLineNo">423</span><a name="line.423"></a>
+<span class="sourceLineNo">424</span>        // We have the lease on the log<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        oldLogs = getLogFiles();<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        if (getMaxLogId(oldLogs) &gt; flushLogId) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          LOG.debug("Someone else created new logs. Expected maxLogId &lt; {}", flushLogId);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          logs.getLast().removeFile(this.walArchiveDir);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>          continue;<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>        LOG.trace("Lease acquired for flushLogId={}", flushLogId);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        break;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      }<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    } finally {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      lock.unlock();<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    }<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  }<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span>  @Override<a name="line.440"></a>
+<span class="sourceLineNo">441</span>  public void load(ProcedureLoader loader) throws IOException {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    lock.lock();<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    try {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      if (logs.isEmpty()) {<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        throw new RuntimeException("recoverLease() must be called before loading data");<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      }<a name="line.446"></a>
 <span class="sourceLineNo">447</span><a name="line.447"></a>
-<span class="sourceLineNo">448</span>        @Override<a name="line.448"></a>
-<span class="sourceLineNo">449</span>        public void markCorruptedWAL(ProcedureWALFile log, IOException e) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>          if (corruptedLogs == null) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>            corruptedLogs = new HashSet&lt;&gt;();<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          }<a name="line.452"></a>
-<span class="sourceLineNo">453</span>          corruptedLogs.add(log);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          // TODO: sideline corrupted log<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>    } finally {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      try {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        // try to cleanup inactive wals and complete the operation<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        buildHoldingCleanupTracker();<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        tryCleanupLogsOnLoad();<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        loading.set(false);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      } finally {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>        lock.unlock();<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    }<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  }<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>  private void tryCleanupLogsOnLoad() {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    // nothing to cleanup.<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    if (logs.size() &lt;= 1) return;<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>    // the config says to not cleanup wals on load.<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    if (!conf.getBoolean(EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY,<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY)) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      LOG.debug("WALs cleanup on load is not enabled: " + getActiveLogs());<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      return;<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>    try {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      periodicRoll();<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    } catch (IOException e) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      LOG.warn("Unable to cleanup logs on load: " + e.getMessage(), e);<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>  @Override<a name="line.487"></a>
-<span class="sourceLineNo">488</span>  public void insert(final Procedure proc, final Procedure[] subprocs) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    if (LOG.isTraceEnabled()) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      LOG.trace("Insert " + proc + ", subproc=" + Arrays.toString(subprocs));<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>    ByteSlot slot = acquireSlot();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    try {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      // Serialize the insert<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      long[] subProcIds = null;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      if (subprocs != null) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        ProcedureWALFormat.writeInsert(slot, proc, subprocs);<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        subProcIds = new long[subprocs.length];<a name="line.499"></a>
-<span class="sourceLineNo">500</span>        for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>          subProcIds[i] = subprocs[i].getProcId();<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      } else {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>        assert !proc.hasParent();<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        ProcedureWALFormat.writeInsert(slot, proc);<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      }<a name="line.506"></a>
+<span class="sourceLineNo">448</span>      // Nothing to do, If we have only the current log.<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      if (logs.size() == 1) {<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        LOG.trace("No state logs to replay.");<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        loade

<TRUNCATED>

[13/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html
index d27bef3..e1b183b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html
@@ -23,603 +23,603 @@
 <span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
 <span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
-<span class="sourceLineNo">018</span><a name="line.18"></a>
-<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.procedure2.store.wal;<a name="line.19"></a>
-<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.io.FileNotFoundException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.ArrayList;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.Arrays;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.Collections;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Comparator;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.HashSet;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.Iterator;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.LinkedList;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.Set;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.LinkedTransferQueue;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.TimeUnit;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.locks.Condition;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.conf.Configuration;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.fs.FileAlreadyExistsException;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.fs.FileStatus;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.fs.FileSystem;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.fs.Path;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.fs.PathFilter;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.HConstants;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreBase;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.procedure2.util.ByteSlot;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.procedure2.util.StringUtils;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.slf4j.Logger;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.slf4j.LoggerFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hbase.thirdparty.org.apache.commons.collections4.queue.CircularFifoQueue;<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>/**<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * WAL implementation of the ProcedureStore.<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * @see ProcedureWALPrettyPrinter for printing content of a single WAL.<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * @see #main(String[]) to parse a directory of MasterWALProcs.<a name="line.70"></a>
-<span class="sourceLineNo">071</span> */<a name="line.71"></a>
-<span class="sourceLineNo">072</span>@InterfaceAudience.Private<a name="line.72"></a>
-<span class="sourceLineNo">073</span>@InterfaceStability.Evolving<a name="line.73"></a>
-<span class="sourceLineNo">074</span>public class WALProcedureStore extends ProcedureStoreBase {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private static final Logger LOG = LoggerFactory.getLogger(WALProcedureStore.class);<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  public static final String LOG_PREFIX = "pv2-";<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  /** Used to construct the name of the log directory for master procedures */<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  public static final String MASTER_PROCEDURE_LOGDIR = "MasterProcWALs";<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  public interface LeaseRecovery {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    void recoverFileLease(FileSystem fs, Path path) throws IOException;<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>  public static final String WAL_COUNT_WARN_THRESHOLD_CONF_KEY =<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    "hbase.procedure.store.wal.warn.threshold";<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private static final int DEFAULT_WAL_COUNT_WARN_THRESHOLD = 64;<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>  public static final String EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY =<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    "hbase.procedure.store.wal.exec.cleanup.on.load";<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private static final boolean DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY = true;<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>  public static final String MAX_RETRIES_BEFORE_ROLL_CONF_KEY =<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    "hbase.procedure.store.wal.max.retries.before.roll";<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private static final int DEFAULT_MAX_RETRIES_BEFORE_ROLL = 3;<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  public static final String WAIT_BEFORE_ROLL_CONF_KEY =<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    "hbase.procedure.store.wal.wait.before.roll";<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private static final int DEFAULT_WAIT_BEFORE_ROLL = 500;<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  public static final String ROLL_RETRIES_CONF_KEY =<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    "hbase.procedure.store.wal.max.roll.retries";<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  private static final int DEFAULT_ROLL_RETRIES = 3;<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  public static final String MAX_SYNC_FAILURE_ROLL_CONF_KEY =<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    "hbase.procedure.store.wal.sync.failure.roll.max";<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  private static final int DEFAULT_MAX_SYNC_FAILURE_ROLL = 3;<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  public static final String PERIODIC_ROLL_CONF_KEY =<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    "hbase.procedure.store.wal.periodic.roll.msec";<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  private static final int DEFAULT_PERIODIC_ROLL = 60 * 60 * 1000; // 1h<a name="line.111"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.procedure2.store.wal;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.FileNotFoundException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.ArrayList;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.Arrays;<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.HashSet;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.Iterator;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.LinkedList;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.Set;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.concurrent.LinkedTransferQueue;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.concurrent.TimeUnit;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.atomic.AtomicReference;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.locks.Condition;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.conf.Configuration;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.fs.FileAlreadyExistsException;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.fs.FileStatus;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.fs.FileSystem;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.fs.Path;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.fs.PathFilter;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HConstants;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreBase;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.procedure2.util.ByteSlot;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.procedure2.util.StringUtils;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.slf4j.Logger;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.slf4j.LoggerFactory;<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hbase.thirdparty.org.apache.commons.collections4.queue.CircularFifoQueue;<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader;<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>/**<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * WAL implementation of the ProcedureStore.<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * &lt;p/&gt;<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * When starting, the upper layer will first call {@link #start(int)}, then {@link #recoverLease()},<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * then {@link #load(ProcedureLoader)}.<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * &lt;p/&gt;<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * In {@link #recoverLease()}, we will get the lease by closing all the existing wal files(by<a name="line.70"></a>
+<span class="sourceLineNo">071</span> * calling recoverFileLease), and creating a new wal writer. And we will also get the list of all<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * the old wal files.<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * &lt;p/&gt;<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * FIXME: notice that the current recover lease implementation is problematic, it can not deal with<a name="line.74"></a>
+<span class="sourceLineNo">075</span> * the races if there are two master both wants to acquire the lease...<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * &lt;p/&gt;<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * In {@link #load(ProcedureLoader)} method, we will load all the active procedures. See the<a name="line.77"></a>
+<span class="sourceLineNo">078</span> * comments of this method for more details.<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * &lt;p/&gt;<a name="line.79"></a>
+<span class="sourceLineNo">080</span> * The actual logging way is a bit like our FileSystem based WAL implementation as RS side. There is<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * a {@link #slots}, which is more like the ring buffer, and in the insert, update and delete<a name="line.81"></a>
+<span class="sourceLineNo">082</span> * methods we will put thing into the {@link #slots} and wait. And there is a background sync<a name="line.82"></a>
+<span class="sourceLineNo">083</span> * thread(see the {@link #syncLoop()} method) which get data from the {@link #slots} and write them<a name="line.83"></a>
+<span class="sourceLineNo">084</span> * to the FileSystem, and notify the caller that we have finished.<a name="line.84"></a>
+<span class="sourceLineNo">085</span> * &lt;p/&gt;<a name="line.85"></a>
+<span class="sourceLineNo">086</span> * TODO: try using disruptor to increase performance and simplify the logic?<a name="line.86"></a>
+<span class="sourceLineNo">087</span> * &lt;p/&gt;<a name="line.87"></a>
+<span class="sourceLineNo">088</span> * The {@link #storeTracker} keeps track of the modified procedures in the newest wal file, which is<a name="line.88"></a>
+<span class="sourceLineNo">089</span> * also the one being written currently. And the deleted bits in it are for all the procedures, not<a name="line.89"></a>
+<span class="sourceLineNo">090</span> * only the ones in the newest wal file. And when rolling a log, we will first store it in the<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * trailer of the current wal file, and then reset its modified bits, so that it can start to track<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * the modified procedures for the new wal file.<a name="line.92"></a>
+<span class="sourceLineNo">093</span> * &lt;p/&gt;<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * The {@link #holdingCleanupTracker} is used to test whether we are safe to delete the oldest wal<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * file. When there are log rolling and there are more than 1 wal files, we will make use of it. It<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * will first be initialized to the oldest file's tracker(which is stored in the trailer), using the<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * method {@link ProcedureStoreTracker#resetTo(ProcedureStoreTracker, boolean)}, and then merge it<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * with the tracker of every newer wal files, using the<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * {@link ProcedureStoreTracker#setDeletedIfModifiedInBoth(ProcedureStoreTracker)}. If we find out<a name="line.99"></a>
+<span class="sourceLineNo">100</span> * that all the modified procedures for the oldest wal file are modified or deleted in newer wal<a name="line.100"></a>
+<span class="sourceLineNo">101</span> * files, then we can delete it.<a name="line.101"></a>
+<span class="sourceLineNo">102</span> * @see ProcedureWALPrettyPrinter for printing content of a single WAL.<a name="line.102"></a>
+<span class="sourceLineNo">103</span> * @see #main(String[]) to parse a directory of MasterWALProcs.<a name="line.103"></a>
+<span class="sourceLineNo">104</span> */<a name="line.104"></a>
+<span class="sourceLineNo">105</span>@InterfaceAudience.Private<a name="line.105"></a>
+<span class="sourceLineNo">106</span>public class WALProcedureStore extends ProcedureStoreBase {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  private static final Logger LOG = LoggerFactory.getLogger(WALProcedureStore.class);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  public static final String LOG_PREFIX = "pv2-";<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  /** Used to construct the name of the log directory for master procedures */<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  public static final String MASTER_PROCEDURE_LOGDIR = "MasterProcWALs";<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
 <span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public static final String SYNC_WAIT_MSEC_CONF_KEY = "hbase.procedure.store.wal.sync.wait.msec";<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  private static final int DEFAULT_SYNC_WAIT_MSEC = 100;<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span>  public static final String USE_HSYNC_CONF_KEY = "hbase.procedure.store.wal.use.hsync";<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  private static final boolean DEFAULT_USE_HSYNC = true;<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  public static final String ROLL_THRESHOLD_CONF_KEY = "hbase.procedure.store.wal.roll.threshold";<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  private static final long DEFAULT_ROLL_THRESHOLD = 32 * 1024 * 1024; // 32M<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>  public static final String STORE_WAL_SYNC_STATS_COUNT =<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      "hbase.procedure.store.wal.sync.stats.count";<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  private static final int DEFAULT_SYNC_STATS_COUNT = 10;<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>  private final LinkedList&lt;ProcedureWALFile&gt; logs = new LinkedList&lt;&gt;();<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  private final ProcedureStoreTracker holdingCleanupTracker = new ProcedureStoreTracker();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  private final ProcedureStoreTracker storeTracker = new ProcedureStoreTracker();<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  private final ReentrantLock lock = new ReentrantLock();<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  private final Condition waitCond = lock.newCondition();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  private final Condition slotCond = lock.newCondition();<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  private final Condition syncCond = lock.newCondition();<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span>  private final LeaseRecovery leaseRecovery;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  private final Configuration conf;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  private final FileSystem fs;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  private final Path walDir;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  private final Path walArchiveDir;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  private final boolean enforceStreamCapability;<a name="line.139"></a>
+<span class="sourceLineNo">113</span>  public interface LeaseRecovery {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    void recoverFileLease(FileSystem fs, Path path) throws IOException;<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>  public static final String WAL_COUNT_WARN_THRESHOLD_CONF_KEY =<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    "hbase.procedure.store.wal.warn.threshold";<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  private static final int DEFAULT_WAL_COUNT_WARN_THRESHOLD = 64;<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public static final String EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY =<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    "hbase.procedure.store.wal.exec.cleanup.on.load";<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private static final boolean DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY = true;<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span>  public static final String MAX_RETRIES_BEFORE_ROLL_CONF_KEY =<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    "hbase.procedure.store.wal.max.retries.before.roll";<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  private static final int DEFAULT_MAX_RETRIES_BEFORE_ROLL = 3;<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>  public static final String WAIT_BEFORE_ROLL_CONF_KEY =<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    "hbase.procedure.store.wal.wait.before.roll";<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  private static final int DEFAULT_WAIT_BEFORE_ROLL = 500;<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>  public static final String ROLL_RETRIES_CONF_KEY =<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    "hbase.procedure.store.wal.max.roll.retries";<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  private static final int DEFAULT_ROLL_RETRIES = 3;<a name="line.135"></a>
+<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">137</span>  public static final String MAX_SYNC_FAILURE_ROLL_CONF_KEY =<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    "hbase.procedure.store.wal.sync.failure.roll.max";<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  private static final int DEFAULT_MAX_SYNC_FAILURE_ROLL = 3;<a name="line.139"></a>
 <span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  private final AtomicReference&lt;Throwable&gt; syncException = new AtomicReference&lt;&gt;();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private final AtomicBoolean loading = new AtomicBoolean(true);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  private final AtomicBoolean inSync = new AtomicBoolean(false);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private final AtomicLong totalSynced = new AtomicLong(0);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  private final AtomicLong lastRollTs = new AtomicLong(0);<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  private final AtomicLong syncId = new AtomicLong(0);<a name="line.146"></a>
+<span class="sourceLineNo">141</span>  public static final String PERIODIC_ROLL_CONF_KEY =<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    "hbase.procedure.store.wal.periodic.roll.msec";<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  private static final int DEFAULT_PERIODIC_ROLL = 60 * 60 * 1000; // 1h<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>  public static final String SYNC_WAIT_MSEC_CONF_KEY = "hbase.procedure.store.wal.sync.wait.msec";<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  private static final int DEFAULT_SYNC_WAIT_MSEC = 100;<a name="line.146"></a>
 <span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>  private LinkedTransferQueue&lt;ByteSlot&gt; slotsCache = null;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  private Set&lt;ProcedureWALFile&gt; corruptedLogs = null;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  private FSDataOutputStream stream = null;<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  private int runningProcCount = 1;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  private long flushLogId = 0;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  private int syncMaxSlot = 1;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  private int slotIndex = 0;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  private Thread syncThread;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  private ByteSlot[] slots;<a name="line.156"></a>
+<span class="sourceLineNo">148</span>  public static final String USE_HSYNC_CONF_KEY = "hbase.procedure.store.wal.use.hsync";<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  private static final boolean DEFAULT_USE_HSYNC = true;<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public static final String ROLL_THRESHOLD_CONF_KEY = "hbase.procedure.store.wal.roll.threshold";<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  private static final long DEFAULT_ROLL_THRESHOLD = 32 * 1024 * 1024; // 32M<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>  public static final String STORE_WAL_SYNC_STATS_COUNT =<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      "hbase.procedure.store.wal.sync.stats.count";<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  private static final int DEFAULT_SYNC_STATS_COUNT = 10;<a name="line.156"></a>
 <span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>  private int walCountWarnThreshold;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  private int maxRetriesBeforeRoll;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  private int maxSyncFailureRoll;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  private int waitBeforeRoll;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  private int rollRetries;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  private int periodicRollMsec;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  private long rollThreshold;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>  private boolean useHsync;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  private int syncWaitMsec;<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>  // Variables used for UI display<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  private CircularFifoQueue syncMetricsQueue;<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>  public static class SyncMetrics {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private long timestamp;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    private long syncWaitMs;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    private long totalSyncedBytes;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    private int syncedEntries;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    private float syncedPerSec;<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>    public long getTimestamp() {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      return timestamp;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>    public long getSyncWaitMs() {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      return syncWaitMs;<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>    public long getTotalSyncedBytes() {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      return totalSyncedBytes;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
+<span class="sourceLineNo">158</span>  private final LinkedList&lt;ProcedureWALFile&gt; logs = new LinkedList&lt;&gt;();<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  private final ProcedureStoreTracker holdingCleanupTracker = new ProcedureStoreTracker();<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  private final ProcedureStoreTracker storeTracker = new ProcedureStoreTracker();<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  private final ReentrantLock lock = new ReentrantLock();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  private final Condition waitCond = lock.newCondition();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  private final Condition slotCond = lock.newCondition();<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  private final Condition syncCond = lock.newCondition();<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>  private final LeaseRecovery leaseRecovery;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  private final Configuration conf;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  private final FileSystem fs;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  private final Path walDir;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  private final Path walArchiveDir;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  private final boolean enforceStreamCapability;<a name="line.171"></a>
+<span class="sourceLineNo">172</span><a name="line.172"></a>
+<span class="sourceLineNo">173</span>  private final AtomicReference&lt;Throwable&gt; syncException = new AtomicReference&lt;&gt;();<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  private final AtomicBoolean loading = new AtomicBoolean(true);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  private final AtomicBoolean inSync = new AtomicBoolean(false);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  private final AtomicLong totalSynced = new AtomicLong(0);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  private final AtomicLong lastRollTs = new AtomicLong(0);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  private final AtomicLong syncId = new AtomicLong(0);<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span>  private LinkedTransferQueue&lt;ByteSlot&gt; slotsCache = null;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>  private Set&lt;ProcedureWALFile&gt; corruptedLogs = null;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  private FSDataOutputStream stream = null;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  private int runningProcCount = 1;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  private long flushLogId = 0;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  private int syncMaxSlot = 1;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  private int slotIndex = 0;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  private Thread syncThread;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  private ByteSlot[] slots;<a name="line.188"></a>
 <span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>    public long getSyncedEntries() {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      return syncedEntries;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    }<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>    public float getSyncedPerSec() {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      return syncedPerSec;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  }<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>  public WALProcedureStore(final Configuration conf, final LeaseRecovery leaseRecovery)<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      throws IOException {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    this(conf,<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        new Path(CommonFSUtils.getWALRootDir(conf), MASTER_PROCEDURE_LOGDIR),<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        new Path(CommonFSUtils.getWALRootDir(conf), HConstants.HREGION_OLDLOGDIR_NAME),<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        leaseRecovery);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  @VisibleForTesting<a name="line.207"></a>
-<span class="sourceLineNo">208</span>  public WALProcedureStore(final Configuration conf, final Path walDir, final Path walArchiveDir,<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      final LeaseRecovery leaseRecovery) throws IOException {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    this.conf = conf;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    this.leaseRecovery = leaseRecovery;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    this.walDir = walDir;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    this.walArchiveDir = walArchiveDir;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    this.fs = walDir.getFileSystem(conf);<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    this.enforceStreamCapability = conf.getBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE, true);<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span>    // Create the log directory for the procedure store<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    if (!fs.exists(walDir)) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      if (!fs.mkdirs(walDir)) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        throw new IOException("Unable to mkdir " + walDir);<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>    // Now that it exists, set the log policy<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    String storagePolicy =<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        conf.get(HConstants.WAL_STORAGE_POLICY, HConstants.DEFAULT_WAL_STORAGE_POLICY);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    CommonFSUtils.setStoragePolicy(fs, walDir, storagePolicy);<a name="line.226"></a>
-<span class="sourceLineNo">227</span><a name="line.227"></a>
-<span class="sourceLineNo">228</span>    // Create archive dir up front. Rename won't work w/o it up on HDFS.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    if (this.walArchiveDir != null &amp;&amp; !this.fs.exists(this.walArchiveDir)) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      if (this.fs.mkdirs(this.walArchiveDir)) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        if (LOG.isDebugEnabled()) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          LOG.debug("Created Procedure Store WAL archive dir " + this.walArchiveDir);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        }<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      } else {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        LOG.warn("Failed create of " + this.walArchiveDir);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    }<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  }<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>  @Override<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  public void start(int numSlots) throws IOException {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    if (!setRunning(true)) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      return;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
-<span class="sourceLineNo">245</span><a name="line.245"></a>
-<span class="sourceLineNo">246</span>    // Init buffer slots<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    loading.set(true);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    runningProcCount = numSlots;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    syncMaxSlot = numSlots;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    slots = new ByteSlot[numSlots];<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    slotsCache = new LinkedTransferQueue();<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    while (slotsCache.size() &lt; numSlots) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      slotsCache.offer(new ByteSlot());<a name="line.253"></a>
+<span class="sourceLineNo">190</span>  private int walCountWarnThreshold;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>  private int maxRetriesBeforeRoll;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  private int maxSyncFailureRoll;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  private int waitBeforeRoll;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  private int rollRetries;<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  private int periodicRollMsec;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>  private long rollThreshold;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  private boolean useHsync;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>  private int syncWaitMsec;<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>  // Variables used for UI display<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  private CircularFifoQueue&lt;SyncMetrics&gt; syncMetricsQueue;<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>  public static class SyncMetrics {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    private long timestamp;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    private long syncWaitMs;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    private long totalSyncedBytes;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    private int syncedEntries;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    private float syncedPerSec;<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public long getTimestamp() {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      return timestamp;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>    public long getSyncWaitMs() {<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      return syncWaitMs;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span>    public long getTotalSyncedBytes() {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      return totalSyncedBytes;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>    public long getSyncedEntries() {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      return syncedEntries;<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>    public float getSyncedPerSec() {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      return syncedPerSec;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>  public WALProcedureStore(final Configuration conf, final LeaseRecovery leaseRecovery)<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      throws IOException {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    this(conf,<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        new Path(CommonFSUtils.getWALRootDir(conf), MASTER_PROCEDURE_LOGDIR),<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        new Path(CommonFSUtils.getWALRootDir(conf), HConstants.HREGION_OLDLOGDIR_NAME),<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        leaseRecovery);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  }<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>  @VisibleForTesting<a name="line.239"></a>
+<span class="sourceLineNo">240</span>  public WALProcedureStore(final Configuration conf, final Path walDir, final Path walArchiveDir,<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      final LeaseRecovery leaseRecovery) throws IOException {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    this.conf = conf;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    this.leaseRecovery = leaseRecovery;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    this.walDir = walDir;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    this.walArchiveDir = walArchiveDir;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    this.fs = walDir.getFileSystem(conf);<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    this.enforceStreamCapability = conf.getBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE, true);<a name="line.247"></a>
+<span class="sourceLineNo">248</span><a name="line.248"></a>
+<span class="sourceLineNo">249</span>    // Create the log directory for the procedure store<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    if (!fs.exists(walDir)) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      if (!fs.mkdirs(walDir)) {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        throw new IOException("Unable to mkdir " + walDir);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      }<a name="line.253"></a>
 <span class="sourceLineNo">254</span>    }<a name="line.254"></a>
-<span class="sourceLineNo">255</span><a name="line.255"></a>
-<span class="sourceLineNo">256</span>    // Tunings<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    walCountWarnThreshold =<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      conf.getInt(WAL_COUNT_WARN_THRESHOLD_CONF_KEY, DEFAULT_WAL_COUNT_WARN_THRESHOLD);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    maxRetriesBeforeRoll =<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      conf.getInt(MAX_RETRIES_BEFORE_ROLL_CONF_KEY, DEFAULT_MAX_RETRIES_BEFORE_ROLL);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    maxSyncFailureRoll = conf.getInt(MAX_SYNC_FAILURE_ROLL_CONF_KEY, DEFAULT_MAX_SYNC_FAILURE_ROLL);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    waitBeforeRoll = conf.getInt(WAIT_BEFORE_ROLL_CONF_KEY, DEFAULT_WAIT_BEFORE_ROLL);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    rollRetries = conf.getInt(ROLL_RETRIES_CONF_KEY, DEFAULT_ROLL_RETRIES);<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    rollThreshold = conf.getLong(ROLL_THRESHOLD_CONF_KEY, DEFAULT_ROLL_THRESHOLD);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    periodicRollMsec = conf.getInt(PERIODIC_ROLL_CONF_KEY, DEFAULT_PERIODIC_ROLL);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    syncWaitMsec = conf.getInt(SYNC_WAIT_MSEC_CONF_KEY, DEFAULT_SYNC_WAIT_MSEC);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    useHsync = conf.getBoolean(USE_HSYNC_CONF_KEY, DEFAULT_USE_HSYNC);<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>    // WebUI<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    syncMetricsQueue = new CircularFifoQueue(<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      conf.getInt(STORE_WAL_SYNC_STATS_COUNT, DEFAULT_SYNC_STATS_COUNT));<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>    // Init sync thread<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    syncThread = new Thread("WALProcedureStoreSyncThread") {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      @Override<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      public void run() {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        try {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>          syncLoop();<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        } catch (Throwable e) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>          LOG.error("Got an exception from the sync-loop", e);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>          if (!isSyncAborted()) {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>            sendAbortProcessSignal();<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>    };<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    syncThread.start();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  }<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span>  @Override<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  public void stop(final boolean abort) {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    if (!setRunning(false)) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      return;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    }<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>    LOG.info("Stopping the WAL Procedure Store, isAbort=" + abort +<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      (isSyncAborted() ? " (self aborting)" : ""));<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    sendStopSignal();<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    if (!isSyncAborted()) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      try {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        while (syncThread.isAlive()) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>          sendStopSignal();<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          syncThread.join(250);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        }<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      } catch (InterruptedException e) {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        LOG.warn("join interrupted", e);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        Thread.currentThread().interrupt();<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><a name="line.310"></a>
-<span class="sourceLineNo">311</span>    // Close the writer<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    closeCurrentLogStream();<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>    // Close the old logs<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    // they should be already closed, this is just in case the load fails<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    // and we call start() and then stop()<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    for (ProcedureWALFile log: logs) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      log.close();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    logs.clear();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    loading.set(true);<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>  private void sendStopSignal() {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    if (lock.tryLock()) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      try {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>        waitCond.signalAll();<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        syncCond.signalAll();<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      } finally {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        lock.unlock();<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><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  @Override<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  public int getNumThreads() {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    return slots == null ? 0 : slots.length;<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>  @Override<a name="line.340"></a>
-<span class="sourceLineNo">341</span>  public int setRunningProcedureCount(final int count) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    this.runningProcCount = count &gt; 0 ? Math.min(count, slots.length) : slots.length;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    return this.runningProcCount;<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>  public ProcedureStoreTracker getStoreTracker() {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    return storeTracker;<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  }<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span>  public ArrayList&lt;ProcedureWALFile&gt; getActiveLogs() {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    lock.lock();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    try {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      return new ArrayList&lt;&gt;(logs);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    } finally {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      lock.unlock();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  public Set&lt;ProcedureWALFile&gt; getCorruptedLogs() {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return corruptedLogs;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  @Override<a name="line.363"></a>
-<span class="sourceLineNo">364</span>  public void recoverLease() throws IOException {<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    lock.lock();<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    try {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      LOG.trace("Starting WAL Procedure Store lease recovery");<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      boolean afterFirstAttempt = false;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      while (isRunning()) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        // Don't sleep before first attempt<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        if (afterFirstAttempt) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          LOG.trace("Sleep {} ms after first lease recovery attempt.",<a name="line.372"></a>
-<span class="sourceLineNo">373</span>              waitBeforeRoll);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          Threads.sleepWithoutInterrupt(waitBeforeRoll);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        } else {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          afterFirstAttempt = true;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>        FileStatus[] oldLogs = getLogFiles();<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        // Get Log-MaxID and recover lease on old logs<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        try {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>          flushLogId = initOldLogs(oldLogs);<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        } catch (FileNotFoundException e) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>          LOG.warn("Someone else is active and deleted logs. retrying.", e);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>          continue;<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>        // Create new state-log<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        if (!rollWriter(flushLogId + 1)) {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>          // someone else has already created this log<a name="line.389"></a>
-<span class="sourceLineNo">390</span>          LOG.debug("Someone else has already created log {}. Retrying.", flushLogId);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>          continue;<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>        // We have the lease on the log<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        oldLogs = getLogFiles();<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        if (getMaxLogId(oldLogs) &gt; flushLogId) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          if (LOG.isDebugEnabled()) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>            LOG.debug("Someone else created new logs. Expected maxLogId &lt; " + flushLogId);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          }<a name="line.399"></a>
-<span class="sourceLineNo">400</span>          logs.getLast().removeFile(this.walArchiveDir);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>          continue;<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>        LOG.trace("Lease acquired for flushLogId={}", flushLogId);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        break;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    } finally {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      lock.unlock();<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span>  public void load(final ProcedureLoader loader) throws IOException {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    lock.lock();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    try {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      if (logs.isEmpty()) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        throw new RuntimeException("recoverLease() must be called before loading data");<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>      // Nothing to do, If we have only the current log.<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      if (logs.size() == 1) {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        LOG.trace("No state logs to replay.");<a name="line.422"></a>
-<span class="sourceLineNo">423</span>        loader.setMaxProcId(0);<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        return;<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      }<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span>      // Load the old logs<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      final Iterator&lt;ProcedureWALFile&gt; it = logs.descendingIterator();<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      it.next(); // Skip the current log<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>      ProcedureWALFormat.load(it, storeTracker, new ProcedureWALFormat.Loader() {<a name="line.431"></a>
-<span class="sourceLineNo">432</span><a name="line.432"></a>
-<span class="sourceLineNo">433</span>        @Override<a name="line.433"></a>
-<span class="sourceLineNo">434</span>        public void setMaxProcId(long maxProcId) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          loader.setMaxProcId(maxProcId);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>        @Override<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        public void load(ProcedureIterator procIter) throws IOException {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>          loader.load(procIter);<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>        @Override<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>          loader.handleCorrupted(procIter);<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        }<a name="line.446"></a>
+<span class="sourceLineNo">255</span>    // Now that it exists, set the log policy<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    String storagePolicy =<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        conf.get(HConstants.WAL_STORAGE_POLICY, HConstants.DEFAULT_WAL_STORAGE_POLICY);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    CommonFSUtils.setStoragePolicy(fs, walDir, storagePolicy);<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>    // Create archive dir up front. Rename won't work w/o it up on HDFS.<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    if (this.walArchiveDir != null &amp;&amp; !this.fs.exists(this.walArchiveDir)) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      if (this.fs.mkdirs(this.walArchiveDir)) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>        LOG.debug("Created Procedure Store WAL archive dir {}", this.walArchiveDir);<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      } else {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>        LOG.warn("Failed create of {}", this.walArchiveDir);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  @Override<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  public void start(int numSlots) throws IOException {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    if (!setRunning(true)) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      return;<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>    // Init buffer slots<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    loading.set(true);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    runningProcCount = numSlots;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    syncMaxSlot = numSlots;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    slots = new ByteSlot[numSlots];<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    slotsCache = new LinkedTransferQueue&lt;&gt;();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    while (slotsCache.size() &lt; numSlots) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      slotsCache.offer(new ByteSlot());<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>    // Tunings<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    walCountWarnThreshold =<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      conf.getInt(WAL_COUNT_WARN_THRESHOLD_CONF_KEY, DEFAULT_WAL_COUNT_WARN_THRESHOLD);<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    maxRetriesBeforeRoll =<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      conf.getInt(MAX_RETRIES_BEFORE_ROLL_CONF_KEY, DEFAULT_MAX_RETRIES_BEFORE_ROLL);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    maxSyncFailureRoll = conf.getInt(MAX_SYNC_FAILURE_ROLL_CONF_KEY, DEFAULT_MAX_SYNC_FAILURE_ROLL);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    waitBeforeRoll = conf.getInt(WAIT_BEFORE_ROLL_CONF_KEY, DEFAULT_WAIT_BEFORE_ROLL);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    rollRetries = conf.getInt(ROLL_RETRIES_CONF_KEY, DEFAULT_ROLL_RETRIES);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    rollThreshold = conf.getLong(ROLL_THRESHOLD_CONF_KEY, DEFAULT_ROLL_THRESHOLD);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    periodicRollMsec = conf.getInt(PERIODIC_ROLL_CONF_KEY, DEFAULT_PERIODIC_ROLL);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    syncWaitMsec = conf.getInt(SYNC_WAIT_MSEC_CONF_KEY, DEFAULT_SYNC_WAIT_MSEC);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    useHsync = conf.getBoolean(USE_HSYNC_CONF_KEY, DEFAULT_USE_HSYNC);<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>    // WebUI<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    syncMetricsQueue = new CircularFifoQueue&lt;&gt;(<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      conf.getInt(STORE_WAL_SYNC_STATS_COUNT, DEFAULT_SYNC_STATS_COUNT));<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>    // Init sync thread<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    syncThread = new Thread("WALProcedureStoreSyncThread") {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      @Override<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      public void run() {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        try {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>          syncLoop();<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        } catch (Throwable e) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>          LOG.error("Got an exception from the sync-loop", e);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>          if (!isSyncAborted()) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>            sendAbortProcessSignal();<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>    };<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    syncThread.start();<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>  @Override<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  public void stop(final boolean abort) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    if (!setRunning(false)) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      return;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span>    LOG.info("Stopping the WAL Procedure Store, isAbort=" + abort +<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      (isSyncAborted() ? " (self aborting)" : ""));<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    sendStopSignal();<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    if (!isSyncAborted()) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      try {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        while (syncThread.isAlive()) {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>          sendStopSignal();<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          syncThread.join(250);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        }<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      } catch (InterruptedException e) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        LOG.warn("join interrupted", e);<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        Thread.currentThread().interrupt();<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><a name="line.340"></a>
+<span class="sourceLineNo">341</span>    // Close the writer<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    closeCurrentLogStream();<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>    // Close the old logs<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    // they should be already closed, this is just in case the load fails<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    // and we call start() and then stop()<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    for (ProcedureWALFile log: logs) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      log.close();<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    }<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    logs.clear();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    loading.set(true);<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>  private void sendStopSignal() {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    if (lock.tryLock()) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      try {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        waitCond.signalAll();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        syncCond.signalAll();<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      } finally {<a name="line.359"></a>
+<span class="sourceLineNo">360</span>        lock.unlock();<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>  @Override<a name="line.365"></a>
+<span class="sourceLineNo">366</span>  public int getNumThreads() {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    return slots == null ? 0 : slots.length;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>  }<a name="line.368"></a>
+<span class="sourceLineNo">369</span><a name="line.369"></a>
+<span class="sourceLineNo">370</span>  @Override<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  public int setRunningProcedureCount(final int count) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    this.runningProcCount = count &gt; 0 ? Math.min(count, slots.length) : slots.length;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    return this.runningProcCount;<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>  public ProcedureStoreTracker getStoreTracker() {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    return storeTracker;<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>  public ArrayList&lt;ProcedureWALFile&gt; getActiveLogs() {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    lock.lock();<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    try {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      return new ArrayList&lt;&gt;(logs);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    } finally {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      lock.unlock();<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    }<a name="line.386"></a>
+<span class="sourceLineNo">387</span>  }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span>  public Set&lt;ProcedureWALFile&gt; getCorruptedLogs() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    return corruptedLogs;<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span>  @Override<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  public void recoverLease() throws IOException {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    lock.lock();<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    try {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>      LOG.trace("Starting WAL Procedure Store lease recovery");<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      boolean afterFirstAttempt = false;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      while (isRunning()) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>        // Don't sleep before first attempt<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        if (afterFirstAttempt) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          LOG.trace("Sleep {} ms after first lease recovery attempt.",<a name="line.402"></a>
+<span class="sourceLineNo">403</span>              waitBeforeRoll);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          Threads.sleepWithoutInterrupt(waitBeforeRoll);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        } else {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          afterFirstAttempt = true;<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        }<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        FileStatus[] oldLogs = getLogFiles();<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        // Get Log-MaxID and recover lease on old logs<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        try {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>          flushLogId = initOldLogs(oldLogs);<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        } catch (FileNotFoundException e) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>          LOG.warn("Someone else is active and deleted logs. retrying.", e);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>          continue;<a name="line.414"></a>
+<span class="sourceLineNo">415</span>        }<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span>        // Create new state-log<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        if (!rollWriter(flushLogId + 1)) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>          // someone else has already created this log<a name="line.419"></a>
+<span class="sourceLineNo">420</span>          LOG.debug("Someone else has already created log {}. Retrying.", flushLogId);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>          continue;<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        }<a name="line.422"></a>
+<span class="sourceLineNo">423</span><a name="line.423"></a>
+<span class="sourceLineNo">424</span>        // We have the lease on the log<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        oldLogs = getLogFiles();<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        if (getMaxLogId(oldLogs) &gt; flushLogId) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          LOG.debug("Someone else created new logs. Expected maxLogId &lt; {}", flushLogId);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          logs.getLast().removeFile(this.walArchiveDir);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>          continue;<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>        LOG.trace("Lease acquired for flushLogId={}", flushLogId);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        break;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      }<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    } finally {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      lock.unlock();<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    }<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  }<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span>  @Override<a name="line.440"></a>
+<span class="sourceLineNo">441</span>  public void load(ProcedureLoader loader) throws IOException {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    lock.lock();<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    try {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      if (logs.isEmpty()) {<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        throw new RuntimeException("recoverLease() must be called before loading data");<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      }<a name="line.446"></a>
 <span class="sourceLineNo">447</span><a name="line.447"></a>
-<span class="sourceLineNo">448</span>        @Override<a name="line.448"></a>
-<span class="sourceLineNo">449</span>        public void markCorruptedWAL(ProcedureWALFile log, IOException e) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>          if (corruptedLogs == null) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>            corruptedLogs = new HashSet&lt;&gt;();<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          }<a name="line.452"></a>
-<span class="sourceLineNo">453</span>          corruptedLogs.add(log);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          // TODO: sideline corrupted log<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>    } finally {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      try {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        // try to cleanup inactive wals and complete the operation<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        buildHoldingCleanupTracker();<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        tryCleanupLogsOnLoad();<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        loading.set(false);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      } finally {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>        lock.unlock();<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    }<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  }<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>  private void tryCleanupLogsOnLoad() {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    // nothing to cleanup.<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    if (logs.size() &lt;= 1) return;<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>    // the config says to not cleanup wals on load.<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    if (!conf.getBoolean(EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY,<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY)) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      LOG.debug("WALs cleanup on load is not enabled: " + getActiveLogs());<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      return;<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>    try {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      periodicRoll();<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    } catch (IOException e) {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      LOG.warn("Unable to cleanup logs on load: " + e.getMessage(), e);<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>  @Override<a name="line.487"></a>
-<span class="sourceLineNo">488</span>  public void insert(final Procedure proc, final Procedure[] subprocs) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    if (LOG.isTraceEnabled()) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      LOG.trace("Insert " + proc + ", subproc=" + Arrays.toString(subprocs));<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>    ByteSlot slot = acquireSlot();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    try {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      // Serialize the insert<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      long[] subProcIds = null;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      if (subprocs != null) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        ProcedureWALFormat.writeInsert(slot, proc, subprocs);<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        subProcIds = new long[subprocs.length];<a name="line.499"></a>
-<span class="sourceLineNo">500</span>        for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>          subProcIds[i] = subprocs[i].getProcId();<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      } else {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>        assert !proc.hasParent();<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        ProcedureWALFormat.writeInsert(slot, proc);<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      }<a name="line.506"></a>
+<span class="sourceLineNo">448</span>      // Nothing to do, If we have only the current log.<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      if (logs.size() == 1) {<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        LOG.trace("No state logs to replay.");<a name="line.450"></a>
+<span class="sourceLineNo">451</spa

<TRUNCATED>

[16/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html
new file mode 100644
index 0000000..a281f12
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html
@@ -0,0 +1,679 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.procedure2.store.wal;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureIterator;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.slf4j.Logger;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.slf4j.LoggerFactory;<a name="line.25"></a>
+<span class="sourceLineNo">026</span><a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.27"></a>
+<span class="sourceLineNo">028</span><a name="line.28"></a>
+<span class="sourceLineNo">029</span>/**<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * We keep an in-memory map of the procedures sorted by replay order. (see the details in the<a name="line.30"></a>
+<span class="sourceLineNo">031</span> * beginning of {@link ProcedureWALFormatReader}).<a name="line.31"></a>
+<span class="sourceLineNo">032</span> *<a name="line.32"></a>
+<span class="sourceLineNo">033</span> * &lt;pre&gt;<a name="line.33"></a>
+<span class="sourceLineNo">034</span> *      procedureMap = | A |   | E |   | C |   |   |   |   | G |   |   |<a name="line.34"></a>
+<span class="sourceLineNo">035</span> *                       D               B<a name="line.35"></a>
+<span class="sourceLineNo">036</span> *      replayOrderHead = C &lt;-&gt; B &lt;-&gt; E &lt;-&gt; D &lt;-&gt; A &lt;-&gt; G<a name="line.36"></a>
+<span class="sourceLineNo">037</span> *<a name="line.37"></a>
+<span class="sourceLineNo">038</span> *  We also have a lazy grouping by "root procedure", and a list of<a name="line.38"></a>
+<span class="sourceLineNo">039</span> *  unlinked procedures. If after reading all the WALs we have unlinked<a name="line.39"></a>
+<span class="sourceLineNo">040</span> *  procedures it means that we had a missing WAL or a corruption.<a name="line.40"></a>
+<span class="sourceLineNo">041</span> *      rootHead = A &lt;-&gt; D &lt;-&gt; G<a name="line.41"></a>
+<span class="sourceLineNo">042</span> *                 B     E<a name="line.42"></a>
+<span class="sourceLineNo">043</span> *                 C<a name="line.43"></a>
+<span class="sourceLineNo">044</span> *      unlinkFromLinkList = None<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * &lt;/pre&gt;<a name="line.45"></a>
+<span class="sourceLineNo">046</span> */<a name="line.46"></a>
+<span class="sourceLineNo">047</span>class WALProcedureMap {<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private static final Logger LOG = LoggerFactory.getLogger(WALProcedureMap.class);<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  private static class Entry {<a name="line.51"></a>
+<span class="sourceLineNo">052</span>    // For bucketed linked lists in hash-table.<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    private Entry hashNext;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    // child head<a name="line.54"></a>
+<span class="sourceLineNo">055</span>    private Entry childHead;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    // double-link for rootHead or childHead<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    private Entry linkNext;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    private Entry linkPrev;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    // replay double-linked-list<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    private Entry replayNext;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    private Entry replayPrev;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    // procedure-infos<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    private Procedure&lt;?&gt; procedure;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    private ProcedureProtos.Procedure proto;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    private boolean ready = false;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>    public Entry(Entry hashNext) {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>      this.hashNext = hashNext;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    }<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>    public long getProcId() {<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      return proto.getProcId();<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    }<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>    public long getParentId() {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      return proto.getParentId();<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    }<a name="line.77"></a>
+<span class="sourceLineNo">078</span><a name="line.78"></a>
+<span class="sourceLineNo">079</span>    public boolean hasParent() {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      return proto.hasParentId();<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    }<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>    public boolean isReady() {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      return ready;<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>    public boolean isFinished() {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      if (!hasParent()) {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>        // we only consider 'root' procedures. because for the user 'finished'<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        // means when everything up to the 'root' is finished.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        switch (proto.getState()) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>          case ROLLEDBACK:<a name="line.92"></a>
+<span class="sourceLineNo">093</span>          case SUCCESS:<a name="line.93"></a>
+<span class="sourceLineNo">094</span>            return true;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>          default:<a name="line.95"></a>
+<span class="sourceLineNo">096</span>            break;<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>      return false;<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 Procedure&lt;?&gt; convert() throws IOException {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      if (procedure == null) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>        procedure = ProcedureUtil.convertToProcedure(proto);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      return procedure;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    }<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>    @Override<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    public String toString() {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      final StringBuilder sb = new StringBuilder();<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      sb.append("Entry(");<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      sb.append(getProcId());<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      sb.append(", parentId=");<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      sb.append(getParentId());<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      sb.append(", class=");<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      sb.append(proto.getClassName());<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      sb.append(")");<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      return sb.toString();<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><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private static class EntryIterator implements ProcedureIterator {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    private final Entry replayHead;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    private Entry current;<a name="line.125"></a>
+<span class="sourceLineNo">126</span><a name="line.126"></a>
+<span class="sourceLineNo">127</span>    public EntryIterator(Entry replayHead) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      this.replayHead = replayHead;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      this.current = replayHead;<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>    @Override<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    public void reset() {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      this.current = replayHead;<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>    @Override<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    public boolean hasNext() {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      return current != null;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>    @Override<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    public boolean isNextFinished() {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      return current != null &amp;&amp; current.isFinished();<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>    @Override<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    public void skipNext() {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      current = current.replayNext;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    }<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>    @Override<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    public Procedure&lt;?&gt; next() throws IOException {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      try {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>        return current.convert();<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      } finally {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>        current = current.replayNext;<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>  }<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>  // procedure hash table<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  private Entry[] procedureMap;<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>  // replay-order double-linked-list<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  private Entry replayOrderHead;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  private Entry replayOrderTail;<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>  // root linked-list<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  private Entry rootHead;<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>  // pending unlinked children (root not present yet)<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  private Entry childUnlinkedHead;<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>  // Track ProcId range<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  private long minModifiedProcId = Long.MAX_VALUE;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  private long maxModifiedProcId = Long.MIN_VALUE;<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>  public WALProcedureMap(int size) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    procedureMap = new Entry[size];<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    replayOrderHead = null;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    replayOrderTail = null;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    rootHead = null;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    childUnlinkedHead = null;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>  public void add(ProcedureProtos.Procedure procProto) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    trackProcIds(procProto.getProcId());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    Entry entry = addToMap(procProto.getProcId(), procProto.hasParentId());<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    boolean newEntry = entry.proto == null;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    // We have seen procedure WALs where the entries are out of order; see HBASE-18152.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    // To compensate, only replace the Entry procedure if for sure this new procedure<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    // is indeed an entry that came later.<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    // TODO: Fix the writing of procedure info so it does not violate basic expectation, that WALs<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    // contain procedure changes goingfrom start to finish in sequence.<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    if (newEntry || isIncreasing(entry.proto, procProto)) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      entry.proto = procProto;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    }<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    addToReplayList(entry);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    if (newEntry) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      if (procProto.hasParentId()) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        childUnlinkedHead = addToLinkList(entry, childUnlinkedHead);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      } else {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        rootHead = addToLinkList(entry, rootHead);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      }<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  }<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>   * @return True if this new procedure is 'richer' than the current one else false and we log this<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   *         incidence where it appears that the WAL has older entries appended after newer ones.<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   *         See HBASE-18152.<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   */<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  private static boolean isIncreasing(ProcedureProtos.Procedure current,<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      ProcedureProtos.Procedure candidate) {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    // Check that the procedures we see are 'increasing'. We used to compare<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    // procedure id first and then update time but it can legitimately go backwards if the<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    // procedure is failed or rolled back so that was unreliable. Was going to compare<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    // state but lets see if comparing update time enough (unfortunately this issue only<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    // seen under load...)<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    boolean increasing = current.getLastUpdate() &lt;= candidate.getLastUpdate();<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    if (!increasing) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      LOG.warn("NOT INCREASING! current=" + current + ", candidate=" + candidate);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    }<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    return increasing;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  }<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span>  public boolean remove(long procId) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    trackProcIds(procId);<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    Entry entry = removeFromMap(procId);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    if (entry != null) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      unlinkFromReplayList(entry);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      unlinkFromLinkList(entry);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      return true;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    }<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    return false;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  }<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>  private void trackProcIds(long procId) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    minModifiedProcId = Math.min(minModifiedProcId, procId);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    maxModifiedProcId = Math.max(maxModifiedProcId, procId);<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>  public long getMinModifiedProcId() {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    return minModifiedProcId;<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>  public long getMaxModifiedProcId() {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    return maxModifiedProcId;<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>  public boolean contains(long procId) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    return getProcedure(procId) != null;<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>  public boolean isEmpty() {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    return replayOrderHead == null;<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>  public void clear() {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      procedureMap[i] = null;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    replayOrderHead = null;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    replayOrderTail = null;<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    rootHead = null;<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    childUnlinkedHead = null;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    minModifiedProcId = Long.MAX_VALUE;<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    maxModifiedProcId = Long.MIN_VALUE;<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>  /*<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   * Merges two WalProcedureMap, the target is the "global" map, the source is the "local" map. -<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   * The entries in the hashtables are guaranteed to be unique. On replay we don't load procedures<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * that already exist in the "global" map (the one we are merging the "local" in to). - The<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * replayOrderList of the "local" nao will be appended to the "global" map replay list. - The<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   * "local" map will be cleared at the end of the operation.<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   */<a name="line.278"></a>
+<span class="sourceLineNo">279</span>  public void mergeTail(WALProcedureMap other) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    for (Entry p = other.replayOrderHead; p != null; p = p.replayNext) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      int slotIndex = getMapSlot(p.getProcId());<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      p.hashNext = procedureMap[slotIndex];<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      procedureMap[slotIndex] = p;<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>    if (replayOrderHead == null) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      replayOrderHead = other.replayOrderHead;<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      replayOrderTail = other.replayOrderTail;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      rootHead = other.rootHead;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      childUnlinkedHead = other.childUnlinkedHead;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    } else {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      // append replay list<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      assert replayOrderTail.replayNext == null;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      assert other.replayOrderHead.replayPrev == null;<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      replayOrderTail.replayNext = other.replayOrderHead;<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      other.replayOrderHead.replayPrev = replayOrderTail;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      replayOrderTail = other.replayOrderTail;<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>      // merge rootHead<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      if (rootHead == null) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        rootHead = other.rootHead;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      } else if (other.rootHead != null) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>        Entry otherTail = findLinkListTail(other.rootHead);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>        otherTail.linkNext = rootHead;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        rootHead.linkPrev = otherTail;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        rootHead = other.rootHead;<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>      // merge childUnlinkedHead<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      if (childUnlinkedHead == null) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        childUnlinkedHead = other.childUnlinkedHead;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      } else if (other.childUnlinkedHead != null) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        Entry otherTail = findLinkListTail(other.childUnlinkedHead);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        otherTail.linkNext = childUnlinkedHead;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        childUnlinkedHead.linkPrev = otherTail;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        childUnlinkedHead = other.childUnlinkedHead;<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>    maxModifiedProcId = Math.max(maxModifiedProcId, other.maxModifiedProcId);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    minModifiedProcId = Math.max(minModifiedProcId, other.minModifiedProcId);<a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>    other.clear();<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>  /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * Returns an EntryIterator with the list of procedures ready to be added to the executor. A<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   * Procedure is ready if its children and parent are ready.<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   */<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  public ProcedureIterator fetchReady() {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    buildGraph();<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    Entry readyHead = null;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    Entry readyTail = null;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    Entry p = replayOrderHead;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    while (p != null) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      Entry next = p.replayNext;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      if (p.isReady()) {<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        unlinkFromReplayList(p);<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        if (readyTail != null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>          readyTail.replayNext = p;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>          p.replayPrev = readyTail;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        } else {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>          p.replayPrev = null;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>          readyHead = p;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        readyTail = p;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        p.replayNext = null;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      }<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      p = next;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    // we need the hash-table lookups for parents, so this must be done<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    // out of the loop where we check isReadyToRun()<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    for (p = readyHead; p != null; p = p.replayNext) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      removeFromMap(p.getProcId());<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      unlinkFromLinkList(p);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    return readyHead != null ? new EntryIterator(readyHead) : null;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>  /**<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * Drain this map and return all procedures in it.<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  public ProcedureIterator fetchAll() {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    Entry head = replayOrderHead;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    for (Entry p = head; p != null; p = p.replayNext) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      removeFromMap(p.getProcId());<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      assert procedureMap[i] == null : "map not empty i=" + i;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    replayOrderHead = null;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    replayOrderTail = null;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    childUnlinkedHead = null;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    rootHead = null;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    return head != null ? new EntryIterator(head) : null;<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>  private void buildGraph() {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    Entry p = childUnlinkedHead;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    while (p != null) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      Entry next = p.linkNext;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      Entry rootProc = getRootProcedure(p);<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      if (rootProc != null) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>        rootProc.childHead = addToLinkList(p, rootProc.childHead);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      }<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      p = next;<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>    for (p = rootHead; p != null; p = p.linkNext) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      checkReadyToRun(p);<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    }<a name="line.391"></a>
+<span class="sourceLineNo">392</span>  }<a name="line.392"></a>
+<span class="sourceLineNo">393</span><a name="line.393"></a>
+<span class="sourceLineNo">394</span>  private Entry getRootProcedure(Entry entry) {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    while (entry != null &amp;&amp; entry.hasParent()) {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      entry = getProcedure(entry.getParentId());<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    }<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    return entry;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span>  /**<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   * (see the comprehensive explanation in the beginning of {@link ProcedureWALFormatReader}). A<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * Procedure is ready when parent and children are ready. "ready" means that we all the<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   * information that we need in-memory.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * &lt;p/&gt;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   * Example-1:&lt;br/&gt;<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   * We have two WALs, we start reading from the newest (wal-2)<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   *<a name="line.408"></a>
+<span class="sourceLineNo">409</span>   * &lt;pre&gt;<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   *    wal-2 | C B |<a name="line.410"></a>
+<span class="sourceLineNo">411</span>   *    wal-1 | A B C |<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * &lt;/pre&gt;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   *<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   * If C and B don't depend on A (A is not the parent), we can start them before reading wal-1. If<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * B is the only one with parent A we can start C. We have to read one more WAL before being able<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   * to start B.<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * &lt;p/&gt;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * How do we know with the only information in B that we are not ready.<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   * &lt;ul&gt;<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * &lt;li&gt;easy case, the parent is missing from the global map&lt;/li&gt;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * &lt;li&gt;more complex case we look at the Stack IDs.&lt;/li&gt;<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * &lt;/ul&gt;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * The Stack-IDs are added to the procedure order as an incremental index tracking how many times<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * that procedure was executed, which is equivalent to the number of times we wrote the procedure<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   * to the WAL. &lt;br/&gt;<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * In the example above:<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   *<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * &lt;pre&gt;<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   *   wal-2: B has stackId = [1, 2]<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   *   wal-1: B has stackId = [1]<a name="line.430"></a>
+<span class="sourceLineNo">431</span>   *   wal-1: A has stackId = [0]<a name="line.431"></a>
+<span class="sourceLineNo">432</span>   * &lt;/pre&gt;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>   *<a name="line.433"></a>
+<span class="sourceLineNo">434</span>   * Since we know that the Stack-IDs are incremental for a Procedure, we notice that there is a gap<a name="line.434"></a>
+<span class="sourceLineNo">435</span>   * in the stackIds of B, so something was executed before.<a name="line.435"></a>
+<span class="sourceLineNo">436</span>   * &lt;p/&gt;<a name="line.436"></a>
+<span class="sourceLineNo">437</span>   * To identify when a Procedure is ready we do the sum of the stackIds of the procedure and the<a name="line.437"></a>
+<span class="sourceLineNo">438</span>   * parent. if the stackIdSum is equal to the sum of {1..maxStackId} then everything we need is<a name="line.438"></a>
+<span class="sourceLineNo">439</span>   * available.<a name="line.439"></a>
+<span class="sourceLineNo">440</span>   * &lt;p/&gt;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>   * Example-2<a name="line.441"></a>
+<span class="sourceLineNo">442</span>   *<a name="line.442"></a>
+<span class="sourceLineNo">443</span>   * &lt;pre&gt;<a name="line.443"></a>
+<span class="sourceLineNo">444</span>   *    wal-2 | A |              A stackIds = [0, 2]<a name="line.444"></a>
+<span class="sourceLineNo">445</span>   *    wal-1 | A B |            B stackIds = [1]<a name="line.445"></a>
+<span class="sourceLineNo">446</span>   * &lt;/pre&gt;<a name="line.446"></a>
+<span class="sourceLineNo">447</span>   *<a name="line.447"></a>
+<span class="sourceLineNo">448</span>   * There is a gap between A stackIds so something was executed in between.<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   */<a name="line.449"></a>
+<span class="sourceLineNo">450</span>  private boolean checkReadyToRun(Entry rootEntry) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    assert !rootEntry.hasParent() : "expected root procedure, got " + rootEntry;<a name="line.451"></a>
+<span class="sourceLineNo">452</span><a name="line.452"></a>
+<span class="sourceLineNo">453</span>    if (rootEntry.isFinished()) {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      // If the root procedure is finished, sub-procedures should be gone<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      if (rootEntry.childHead != null) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>        LOG.error("unexpected active children for root-procedure: {}", rootEntry);<a name="line.456"></a>
+<span class="sourceLineNo">457</span>        for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>          LOG.error("unexpected active children: {}", p);<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>      assert rootEntry.childHead == null : "unexpected children on root completion. " + rootEntry;<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      rootEntry.ready = true;<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      return true;<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>    int stackIdSum = 0;<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    int maxStackId = 0;<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    for (int i = 0; i &lt; rootEntry.proto.getStackIdCount(); ++i) {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      int stackId = 1 + rootEntry.proto.getStackId(i);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      maxStackId = Math.max(maxStackId, stackId);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      stackIdSum += stackId;<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      LOG.trace("stackId={} stackIdSum={} maxStackid={} {}", stackId, stackIdSum, maxStackId,<a name="line.473"></a>
+<span class="sourceLineNo">474</span>        rootEntry);<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>    for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.477"></a>
+<span class="sourceLineNo">478</span>      for (int i = 0; i &lt; p.proto.getStackIdCount(); ++i) {<a name="line.478"></a>
+<span class="sourceLineNo">479</span>        int stackId = 1 + p.proto.getStackId(i);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>        maxStackId = Math.max(maxStackId, stackId);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>        stackIdSum += stackId;<a name="line.481"></a>
+<span class="sourceLineNo">482</span>        LOG.trace("stackId={} stackIdSum={} maxStackid={} {}", stackId, stackIdSum, maxStackId, p);<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>    // The cmpStackIdSum is this formula for finding the sum of a series of numbers:<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    // http://www.wikihow.com/Sum-the-Integers-from-1-to-N#/Image:Sum-the-Integers-from-1-to-N-Step-2-Version-3.jpg<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    final int cmpStackIdSum = (maxStackId * (maxStackId + 1) / 2);<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    if (cmpStackIdSum == stackIdSum) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      rootEntry.ready = true;<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        p.ready = true;<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      }<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      return true;<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    }<a name="line.494"></a>
+<span class="sourceLineNo">495</span>    return false;<a name="line.495"></a>
+<span class="sourceLineNo">496</span>  }<a name="line.496"></a>
+<span class="sourceLineNo">497</span><a name="line.497"></a>
+<span class="sourceLineNo">498</span>  private void unlinkFromReplayList(Entry entry) {<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    if (replayOrderHead == entry) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>      replayOrderHead = entry.replayNext;<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    }<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    if (replayOrderTail == entry) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      replayOrderTail = entry.replayPrev;<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    if (entry.replayPrev != null) {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      entry.replayPrev.replayNext = entry.replayNext;<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    }<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    if (entry.replayNext != null) {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      entry.replayNext.replayPrev = entry.replayPrev;<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><a name="line.512"></a>
+<span class="sourceLineNo">513</span>  private void addToReplayList(final Entry entry) {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    unlinkFromReplayList(entry);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    entry.replayNext = replayOrderHead;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    entry.replayPrev = null;<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    if (replayOrderHead != null) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      replayOrderHead.replayPrev = entry;<a name="line.518"></a>
+<span class="sourceLineNo">519</span>    } else {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      replayOrderTail = entry;<a name="line.520"></a>
+<span class="sourceLineNo">521</span>    }<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    replayOrderHead = entry;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>  }<a name="line.523"></a>
+<span class="sourceLineNo">524</span><a name="line.524"></a>
+<span class="sourceLineNo">525</span>  private void unlinkFromLinkList(Entry entry) {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    if (entry == rootHead) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      rootHead = entry.linkNext;<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    } else if (entry == childUnlinkedHead) {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>      childUnlinkedHead = entry.linkNext;<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    if (entry.linkPrev != null) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      entry.linkPrev.linkNext = entry.linkNext;<a name="line.532"></a>
+<span class="sourceLineNo">533</span>    }<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    if (entry.linkNext != null) {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>      entry.linkNext.linkPrev = entry.linkPrev;<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
+<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
+<span class="sourceLineNo">538</span><a name="line.538"></a>
+<span class="sourceLineNo">539</span>  private Entry addToLinkList(Entry entry, Entry linkHead) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    unlinkFromLinkList(entry);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    entry.linkNext = linkHead;<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    entry.linkPrev = null;<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    if (linkHead != null) {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      linkHead.linkPrev = entry;<a name="line.544"></a>
+<span class="sourceLineNo">545</span>    }<a name="line.545"></a>
+<span class="sourceLineNo">546</span>    return entry;<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">549</span>  private Entry findLinkListTail(Entry linkHead) {<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    Entry tail = linkHead;<a name="line.550"></a>
+<span class="sourceLineNo">551</span>    while (tail.linkNext != null) {<a name="line.551"></a>
+<span class="sourceLineNo">552</span>      tail = tail.linkNext;<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    return tail;<a name="line.554"></a>
+<span class="sourceLineNo">555</span>  }<a name="line.555"></a>
+<span class="sourceLineNo">556</span><a name="line.556"></a>
+<span class="sourceLineNo">557</span>  private Entry addToMap(long procId, boolean hasParent) {<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    int slotIndex = getMapSlot(procId);<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    Entry entry = getProcedure(slotIndex, procId);<a name="line.559"></a>
+<span class="sourceLineNo">560</span>    if (entry != null) {<a name="line.560"></a>
+<span class="sourceLineNo">561</span>      return entry;<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>    entry = new Entry(procedureMap[slotIndex]);<a name="line.564"></a>
+<span class="sourceLineNo">565</span>    procedureMap[slotIndex] = entry;<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    return entry;<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>  private Entry removeFromMap(final long procId) {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    int slotIndex = getMapSlot(procId);<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    Entry prev = null;<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    Entry entry = procedureMap[slotIndex];<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    while (entry != null) {<a name="line.573"></a>
+<span class="sourceLineNo">574</span>      if (procId == entry.getProcId()) {<a name="line.574"></a>
+<span class="sourceLineNo">575</span>        if (prev != null) {<a name="line.575"></a>
+<span class="sourceLineNo">576</span>          prev.hashNext = entry.hashNext;<a name="line.576"></a>
+<span class="sourceLineNo">577</span>        } else {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>          procedureMap[slotIndex] = entry.hashNext;<a name="line.578"></a>
+<span class="sourceLineNo">579</span>        }<a name="line.579"></a>
+<span class="sourceLineNo">580</span>        entry.hashNext = null;<a name="line.580"></a>
+<span class="sourceLineNo">581</span>        return entry;<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      }<a name="line.582"></a>
+<span class="sourceLineNo">583</span>      prev = entry;<a name="line.583"></a>
+<span class="sourceLineNo">584</span>      entry = entry.hashNext;<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    }<a name="line.585"></a>
+<span class="sourceLineNo">586</span>    return null;<a name="line.586"></a>
+<span class="sourceLineNo">587</span>  }<a name="line.587"></a>
+<span class="sourceLineNo">588</span><a name="line.588"></a>
+<span class="sourceLineNo">589</span>  private Entry getProcedure(long procId) {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    return getProcedure(getMapSlot(procId), procId);<a name="line.590"></a>
+<span class="sourceLineNo">591</span>  }<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span>  private Entry getProcedure(int slotIndex, long procId) {<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    Entry entry = procedureMap[slotIndex];<a name="line.594"></a>
+<span class="sourceLineNo">595</span>    while (entry != null) {<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      if (procId == entry.getProcId()) {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>        return entry;<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      }<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      entry = entry.hashNext;<a name="line.599"></a>
+<span class="sourceLineNo">600</span>    }<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    return null;<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>  private int getMapSlot(long procId) {<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    return (int) (Procedure.getProcIdHashCode(procId) % procedureMap.length);<a name="line.605"></a>
+<span class="sourceLineNo">606</span>  }<a name="line.606"></a>
+<span class="sourceLineNo">607</span>}<a name="line.607"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[35/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html
new file mode 100644
index 0000000..387ca1a
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html
@@ -0,0 +1,429 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>WALProcedureMap.EntryIterator (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="WALProcedureMap.EntryIterator (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/WALProcedureMap.EntryIterator.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html" target="_top">Frames</a></li>
+<li><a href="WALProcedureMap.EntryIterator.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.procedure2.store.wal</div>
+<h2 title="Class WALProcedureMap.EntryIterator" class="title">Class WALProcedureMap.EntryIterator</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.EntryIterator</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></dd>
+</dl>
+<hr>
+<br>
+<pre>private static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.123">WALProcedureMap.EntryIterator</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/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html#current">current</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html#replayHead">replayHead</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html#EntryIterator-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">EntryIterator</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;replayHead)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html#hasNext--">hasNext</a></span>()</code>
+<div class="block">Returns true if the iterator has more elements.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html#isNextFinished--">isNextFinished</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html#next--">next</a></span>()</code>
+<div class="block">Returns the next procedure in the iteration.</div>
+</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html#reset--">reset</a></span>()</code>
+<div class="block">Reset the Iterator by seeking to the beginning of the list.</div>
+</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html#skipNext--">skipNext</a></span>()</code>
+<div class="block">Skip the next procedure</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="replayHead">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>replayHead</h4>
+<pre>private final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html#line.124">replayHead</a></pre>
+</li>
+</ul>
+<a name="current">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>current</h4>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html#line.125">current</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="EntryIterator-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>EntryIterator</h4>
+<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html#line.127">EntryIterator</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;replayHead)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="reset--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>reset</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html#line.133">reset</a>()</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#reset--">ProcedureStore.ProcedureIterator</a></code></span></div>
+<div class="block">Reset the Iterator by seeking to the beginning of the list.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#reset--">reset</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="hasNext--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>hasNext</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html#line.138">hasNext</a>()</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#hasNext--">ProcedureStore.ProcedureIterator</a></code></span></div>
+<div class="block">Returns true if the iterator has more elements.
+ (In other words, returns true if next() would return a Procedure
+ rather than throwing an exception.)</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#hasNext--">hasNext</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the iterator has more procedures</dd>
+</dl>
+</li>
+</ul>
+<a name="isNextFinished--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isNextFinished</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html#line.143">isNextFinished</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#isNextFinished--">isNextFinished</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if the iterator next element is a completed procedure.</dd>
+</dl>
+</li>
+</ul>
+<a name="skipNext--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>skipNext</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html#line.148">skipNext</a>()</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#skipNext--">ProcedureStore.ProcedureIterator</a></code></span></div>
+<div class="block">Skip the next procedure</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#skipNext--">skipNext</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="next--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>next</h4>
+<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html#line.153">next</a>()
+                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#next--">ProcedureStore.ProcedureIterator</a></code></span></div>
+<div class="block">Returns the next procedure in the iteration.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#next--">next</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>the next procedure in the iteration.</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - if there was an error fetching/deserializing the procedure</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/WALProcedureMap.EntryIterator.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html" target="_top">Frames</a></li>
+<li><a href="WALProcedureMap.EntryIterator.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html
new file mode 100644
index 0000000..6736cf8
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html
@@ -0,0 +1,820 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>WALProcedureMap (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="WALProcedureMap (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":9,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/WALProcedureMap.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" target="_top">Frames</a></li>
+<li><a href="WALProcedureMap.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.procedure2.store.wal</div>
+<h2 title="Class WALProcedureMap" class="title">Class WALProcedureMap</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.47">WALProcedureMap</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">We keep an in-memory map of the procedures sorted by replay order. (see the details in the
+ beginning of <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><code>ProcedureWALFormatReader</code></a>).
+
+ <pre>
+      procedureMap = | A |   | E |   | C |   |   |   |   | G |   |   |
+                       D               B
+      replayOrderHead = C <-> B <-> E <-> D <-> A <-> G
+
+  We also have a lazy grouping by "root procedure", and a list of
+  unlinked procedures. If after reading all the WALs we have unlinked
+  procedures it means that we had a missing WAL or a corruption.
+      rootHead = A <-> D <-> G
+                 B     E
+                 C
+      unlinkFromLinkList = None
+ </pre></div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
+<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.EntryIterator</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#childUnlinkedHead">childUnlinkedHead</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static org.slf4j.Logger</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#LOG">LOG</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#maxModifiedProcId">maxModifiedProcId</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#minModifiedProcId">minModifiedProcId</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#procedureMap">procedureMap</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#replayOrderHead">replayOrderHead</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#replayOrderTail">replayOrderTail</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#rootHead">rootHead</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#WALProcedureMap-int-">WALProcedureMap</a></span>(int&nbsp;size)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#add-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure-">add</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure&nbsp;procProto)</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#addToLinkList-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">addToLinkList</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;entry,
+             <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;linkHead)</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#addToMap-long-boolean-">addToMap</a></span>(long&nbsp;procId,
+        boolean&nbsp;hasParent)</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#addToReplayList-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">addToReplayList</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;entry)</code>&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#buildGraph--">buildGraph</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#checkReadyToRun-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">checkReadyToRun</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;rootEntry)</code>
+<div class="block">(see the comprehensive explanation in the beginning of <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><code>ProcedureWALFormatReader</code></a>).</div>
+</td>
+</tr>
+<tr id="i6" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#clear--">clear</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#contains-long-">contains</a></span>(long&nbsp;procId)</code>&nbsp;</td>
+</tr>
+<tr id="i8" class="altColor">
+<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#fetchAll--">fetchAll</a></span>()</code>
+<div class="block">Drain this map and return all procedures in it.</div>
+</td>
+</tr>
+<tr id="i9" class="rowColor">
+<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#fetchReady--">fetchReady</a></span>()</code>
+<div class="block">Returns an EntryIterator with the list of procedures ready to be added to the executor.</div>
+</td>
+</tr>
+<tr id="i10" class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#findLinkListTail-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">findLinkListTail</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;linkHead)</code>&nbsp;</td>
+</tr>
+<tr id="i11" class="rowColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#getMapSlot-long-">getMapSlot</a></span>(long&nbsp;procId)</code>&nbsp;</td>
+</tr>
+<tr id="i12" class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#getMaxModifiedProcId--">getMaxModifiedProcId</a></span>()</code>&nbsp;</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/procedure2/store/wal/WALProcedureMap.html#getMinModifiedProcId--">getMinModifiedProcId</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i14" class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#getProcedure-int-long-">getProcedure</a></span>(int&nbsp;slotIndex,
+            long&nbsp;procId)</code>&nbsp;</td>
+</tr>
+<tr id="i15" class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#getProcedure-long-">getProcedure</a></span>(long&nbsp;procId)</code>&nbsp;</td>
+</tr>
+<tr id="i16" class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#getRootProcedure-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">getRootProcedure</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;entry)</code>&nbsp;</td>
+</tr>
+<tr id="i17" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#isEmpty--">isEmpty</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i18" class="altColor">
+<td class="colFirst"><code>private static boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#isIncreasing-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure-">isIncreasing</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure&nbsp;current,
+            org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure&nbsp;candidate)</code>&nbsp;</td>
+</tr>
+<tr id="i19" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#mergeTail-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap-">mergeTail</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a>&nbsp;other)</code>&nbsp;</td>
+</tr>
+<tr id="i20" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#remove-long-">remove</a></span>(long&nbsp;procId)</code>&nbsp;</td>
+</tr>
+<tr id="i21" class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#removeFromMap-long-">removeFromMap</a></span>(long&nbsp;procId)</code>&nbsp;</td>
+</tr>
+<tr id="i22" class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#trackProcIds-long-">trackProcIds</a></span>(long&nbsp;procId)</code>&nbsp;</td>
+</tr>
+<tr id="i23" class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#unlinkFromLinkList-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">unlinkFromLinkList</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;entry)</code>&nbsp;</td>
+</tr>
+<tr id="i24" class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#unlinkFromReplayList-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">unlinkFromReplayList</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;entry)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="LOG">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>LOG</h4>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.49">LOG</a></pre>
+</li>
+</ul>
+<a name="procedureMap">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>procedureMap</h4>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>[] <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.163">procedureMap</a></pre>
+</li>
+</ul>
+<a name="replayOrderHead">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>replayOrderHead</h4>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.166">replayOrderHead</a></pre>
+</li>
+</ul>
+<a name="replayOrderTail">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>replayOrderTail</h4>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.167">replayOrderTail</a></pre>
+</li>
+</ul>
+<a name="rootHead">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>rootHead</h4>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.170">rootHead</a></pre>
+</li>
+</ul>
+<a name="childUnlinkedHead">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>childUnlinkedHead</h4>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.173">childUnlinkedHead</a></pre>
+</li>
+</ul>
+<a name="minModifiedProcId">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>minModifiedProcId</h4>
+<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.176">minModifiedProcId</a></pre>
+</li>
+</ul>
+<a name="maxModifiedProcId">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>maxModifiedProcId</h4>
+<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.177">maxModifiedProcId</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="WALProcedureMap-int-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>WALProcedureMap</h4>
+<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.179">WALProcedureMap</a>(int&nbsp;size)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="add-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>add</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.187">add</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure&nbsp;procProto)</pre>
+</li>
+</ul>
+<a name="isIncreasing-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isIncreasing</h4>
+<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.214">isIncreasing</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure&nbsp;current,
+                                    org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure&nbsp;candidate)</pre>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>True if this new procedure is 'richer' than the current one else false and we log this
+         incidence where it appears that the WAL has older entries appended after newer ones.
+         See HBASE-18152.</dd>
+</dl>
+</li>
+</ul>
+<a name="remove-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>remove</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.228">remove</a>(long&nbsp;procId)</pre>
+</li>
+</ul>
+<a name="trackProcIds-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>trackProcIds</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.239">trackProcIds</a>(long&nbsp;procId)</pre>
+</li>
+</ul>
+<a name="getMinModifiedProcId--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getMinModifiedProcId</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.244">getMinModifiedProcId</a>()</pre>
+</li>
+</ul>
+<a name="getMaxModifiedProcId--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getMaxModifiedProcId</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.248">getMaxModifiedProcId</a>()</pre>
+</li>
+</ul>
+<a name="contains-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>contains</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.252">contains</a>(long&nbsp;procId)</pre>
+</li>
+</ul>
+<a name="isEmpty--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isEmpty</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.256">isEmpty</a>()</pre>
+</li>
+</ul>
+<a name="clear--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>clear</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.260">clear</a>()</pre>
+</li>
+</ul>
+<a name="mergeTail-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>mergeTail</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.279">mergeTail</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a>&nbsp;other)</pre>
+</li>
+</ul>
+<a name="fetchReady--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>fetchReady</h4>
+<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.329">fetchReady</a>()</pre>
+<div class="block">Returns an EntryIterator with the list of procedures ready to be added to the executor. A
+ Procedure is ready if its children and parent are ready.</div>
+</li>
+</ul>
+<a name="fetchAll--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>fetchAll</h4>
+<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.363">fetchAll</a>()</pre>
+<div class="block">Drain this map and return all procedures in it.</div>
+</li>
+</ul>
+<a name="buildGraph--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>buildGraph</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.378">buildGraph</a>()</pre>
+</li>
+</ul>
+<a name="getRootProcedure-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getRootProcedure</h4>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.394">getRootProcedure</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;entry)</pre>
+</li>
+</ul>
+<a name="checkReadyToRun-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>checkReadyToRun</h4>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.450">checkReadyToRun</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;rootEntry)</pre>
+<div class="block">(see the comprehensive explanation in the beginning of <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><code>ProcedureWALFormatReader</code></a>). A
+ Procedure is ready when parent and children are ready. "ready" means that we all the
+ information that we need in-memory.
+ <p/>
+ Example-1:<br/>
+ We have two WALs, we start reading from the newest (wal-2)
+
+ <pre>
+    wal-2 | C B |
+    wal-1 | A B C |
+ </pre>
+
+ If C and B don't depend on A (A is not the parent), we can start them before reading wal-1. If
+ B is the only one with parent A we can start C. We have to read one more WAL before being able
+ to start B.
+ <p/>
+ How do we know with the only information in B that we are not ready.
+ <ul>
+ <li>easy case, the parent is missing from the global map</li>
+ <li>more complex case we look at the Stack IDs.</li>
+ </ul>
+ The Stack-IDs are added to the procedure order as an incremental index tracking how many times
+ that procedure was executed, which is equivalent to the number of times we wrote the procedure
+ to the WAL. <br/>
+ In the example above:
+
+ <pre>
+   wal-2: B has stackId = [1, 2]
+   wal-1: B has stackId = [1]
+   wal-1: A has stackId = [0]
+ </pre>
+
+ Since we know that the Stack-IDs are incremental for a Procedure, we notice that there is a gap
+ in the stackIds of B, so something was executed before.
+ <p/>
+ To identify when a Procedure is ready we do the sum of the stackIds of the procedure and the
+ parent. if the stackIdSum is equal to the sum of {1..maxStackId} then everything we need is
+ available.
+ <p/>
+ Example-2
+
+ <pre>
+    wal-2 | A |              A stackIds = [0, 2]
+    wal-1 | A B |            B stackIds = [1]
+ </pre>
+
+ There is a gap between A stackIds so something was executed in between.</div>
+</li>
+</ul>
+<a name="unlinkFromReplayList-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>unlinkFromReplayList</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.498">unlinkFromReplayList</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;entry)</pre>
+</li>
+</ul>
+<a name="addToReplayList-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>addToReplayList</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.513">addToReplayList</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;entry)</pre>
+</li>
+</ul>
+<a name="unlinkFromLinkList-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>unlinkFromLinkList</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.525">unlinkFromLinkList</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;entry)</pre>
+</li>
+</ul>
+<a name="addToLinkList-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>addToLinkList</h4>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.539">addToLinkList</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;entry,
+                                            <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;linkHead)</pre>
+</li>
+</ul>
+<a name="findLinkListTail-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>findLinkListTail</h4>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.549">findLinkListTail</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;linkHead)</pre>
+</li>
+</ul>
+<a name="addToMap-long-boolean-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>addToMap</h4>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.557">addToMap</a>(long&nbsp;procId,
+                                       boolean&nbsp;hasParent)</pre>
+</li>
+</ul>
+<a name="removeFromMap-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>removeFromMap</h4>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.569">removeFromMap</a>(long&nbsp;procId)</pre>
+</li>
+</ul>
+<a name="getProcedure-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getProcedure</h4>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.589">getProcedure</a>(long&nbsp;procId)</pre>
+</li>
+</ul>
+<a name="getProcedure-int-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getProcedure</h4>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.593">getProcedure</a>(int&nbsp;slotIndex,
+                                           long&nbsp;procId)</pre>
+</li>
+</ul>
+<a name="getMapSlot-long-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getMapSlot</h4>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#line.604">getMapSlot</a>(long&nbsp;procId)</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/WALProcedureMap.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" target="_top">Frames</a></li>
+<li><a href="WALProcedureMap.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html
index 1589409..18fbf6c 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static interface <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.81">WALProcedureStore.LeaseRecovery</a></pre>
+<pre>public static interface <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.113">WALProcedureStore.LeaseRecovery</a></pre>
 </li>
 </ul>
 </div>
@@ -154,7 +154,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>recoverFileLease</h4>
-<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html#line.82">recoverFileLease</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html#line.114">recoverFileLease</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                       org.apache.hadoop.fs.Path&nbsp;path)
                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>

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


[06/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/testdevapidocs/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html
index 137f424..2edbb7d 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.36">TestProcedureStoreTracker</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.35">TestProcedureStoreTracker</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -170,7 +170,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
-<td class="colFirst"><code>(package private) org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode</code></td>
+<td class="colFirst"><code>(package private) org.apache.hadoop.hbase.procedure2.store.BitSetNode</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#buildBitSetNode-long:A-long:A-long:A-">buildBitSetNode</a></span>(long[]&nbsp;active,
                long[]&nbsp;updated,
                long[]&nbsp;deleted)</code>&nbsp;</td>
@@ -183,7 +183,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#isDeleted-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">isDeleted</a></span>(org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode&nbsp;n,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#isDeleted-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">isDeleted</a></span>(org.apache.hadoop.hbase.procedure2.store.BitSetNode&nbsp;n,
          long&nbsp;procId)</code>&nbsp;</td>
 </tr>
 <tr id="i3" class="rowColor">
@@ -247,7 +247,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/procedure2/store/TestProcedureStoreTracker.html#line.39">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/procedure2/store/TestProcedureStoreTracker.html#line.38">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="LOG">
@@ -256,7 +256,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.42">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.41">LOG</a></pre>
 </li>
 </ul>
 </li>
@@ -273,7 +273,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestProcedureStoreTracker</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.36">TestProcedureStoreTracker</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.35">TestProcedureStoreTracker</a>()</pre>
 </li>
 </ul>
 </li>
@@ -290,7 +290,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testSeqInsertAndDelete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.45">testSeqInsertAndDelete</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.44">testSeqInsertAndDelete</a>()</pre>
 </li>
 </ul>
 <a name="testPartialTracker--">
@@ -299,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>testPartialTracker</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.83">testPartialTracker</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.82">testPartialTracker</a>()</pre>
 </li>
 </ul>
 <a name="testBasicCRUD--">
@@ -308,7 +308,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testBasicCRUD</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.113">testBasicCRUD</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.112">testBasicCRUD</a>()</pre>
 </li>
 </ul>
 <a name="testRandLoad--">
@@ -317,7 +317,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testRandLoad</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.151">testRandLoad</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.150">testRandLoad</a>()</pre>
 </li>
 </ul>
 <a name="testLoad--">
@@ -326,7 +326,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testLoad</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.175">testLoad</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.174">testLoad</a>()</pre>
 </li>
 </ul>
 <a name="testDelete--">
@@ -335,7 +335,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testDelete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.196">testDelete</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.195">testDelete</a>()</pre>
 </li>
 </ul>
 <a name="isDeleted-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker-long-">
@@ -344,17 +344,17 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isDeleted</h4>
-<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.221">isDeleted</a>(org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker&nbsp;n,
+<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.220">isDeleted</a>(org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker&nbsp;n,
                   long&nbsp;procId)</pre>
 </li>
 </ul>
-<a name="isDeleted-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">
+<a name="isDeleted-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>isDeleted</h4>
-<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.225">isDeleted</a>(org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode&nbsp;n,
+<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.224">isDeleted</a>(org.apache.hadoop.hbase.procedure2.store.BitSetNode&nbsp;n,
                   long&nbsp;procId)</pre>
 </li>
 </ul>
@@ -364,7 +364,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>buildTracker</h4>
-<pre>org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.233">buildTracker</a>(long[]&nbsp;active,
+<pre>org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.232">buildTracker</a>(long[]&nbsp;active,
                                                                             long[]&nbsp;updated,
                                                                             long[]&nbsp;deleted)</pre>
 <dl>
@@ -380,9 +380,9 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>buildBitSetNode</h4>
-<pre>org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.252">buildBitSetNode</a>(long[]&nbsp;active,
-                                                                                          long[]&nbsp;updated,
-                                                                                          long[]&nbsp;deleted)</pre>
+<pre>org.apache.hadoop.hbase.procedure2.store.BitSetNode&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.251">buildBitSetNode</a>(long[]&nbsp;active,
+                                                                    long[]&nbsp;updated,
+                                                                    long[]&nbsp;deleted)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>active</code> - list of active proc ids. To mark them as non-deleted, since by default a proc
@@ -396,7 +396,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testSetDeletedIfSet</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.268">testSetDeletedIfSet</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#line.267">testSetDeletedIfSet</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/testdevapidocs/serialized-form.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/serialized-form.html b/testdevapidocs/serialized-form.html
index 7ffff4b..b362dad 100644
--- a/testdevapidocs/serialized-form.html
+++ b/testdevapidocs/serialized-form.html
@@ -1355,11 +1355,19 @@
 <!--   -->
 </a>
 <h3>Class org.apache.hadoop.hbase.procedure2.store.wal.CorruptedWALProcedureStoreException extends org.apache.hadoop.hbase.HBaseIOException implements Serializable</h3>
+<dl class="nameValue">
+<dt>serialVersionUID:</dt>
+<dd>-3407300445435898074L</dd>
+</dl>
 </li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormat.InvalidWALDataException">
 <!--   -->
 </a>
 <h3>Class org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormat.InvalidWALDataException extends <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> implements Serializable</h3>
+<dl class="nameValue">
+<dt>serialVersionUID:</dt>
+<dd>5471733223070202196L</dd>
+</dl>
 </li>
 </ul>
 </li>


[27/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html
deleted file mode 100644
index 9d378e8..0000000
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html
+++ /dev/null
@@ -1,859 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<title>Source code</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
-</head>
-<body>
-<div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
-<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
-<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
-<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
-<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
-<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
-<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
-<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
-<span class="sourceLineNo">009</span> *<a name="line.9"></a>
-<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
-<span class="sourceLineNo">011</span> *<a name="line.11"></a>
-<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
-<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
-<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
-<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
-<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
-<span class="sourceLineNo">017</span> */<a name="line.17"></a>
-<span class="sourceLineNo">018</span><a name="line.18"></a>
-<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.procedure2.store;<a name="line.19"></a>
-<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.Arrays;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.Iterator;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.Map;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.TreeMap;<a name="line.25"></a>
-<span class="sourceLineNo">026</span><a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
-<span class="sourceLineNo">032</span> * Keeps track of live procedures.<a name="line.32"></a>
-<span class="sourceLineNo">033</span> *<a name="line.33"></a>
-<span class="sourceLineNo">034</span> * It can be used by the ProcedureStore to identify which procedures are already<a name="line.34"></a>
-<span class="sourceLineNo">035</span> * deleted/completed to avoid the deserialization step on restart<a name="line.35"></a>
-<span class="sourceLineNo">036</span> */<a name="line.36"></a>
-<span class="sourceLineNo">037</span>@InterfaceAudience.Private<a name="line.37"></a>
-<span class="sourceLineNo">038</span>@InterfaceStability.Evolving<a name="line.38"></a>
-<span class="sourceLineNo">039</span>public class ProcedureStoreTracker {<a name="line.39"></a>
-<span class="sourceLineNo">040</span>  // Key is procedure id corresponding to first bit of the bitmap.<a name="line.40"></a>
-<span class="sourceLineNo">041</span>  private final TreeMap&lt;Long, BitSetNode&gt; map = new TreeMap&lt;&gt;();<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>  /**<a name="line.43"></a>
-<span class="sourceLineNo">044</span>   * If true, do not remove bits corresponding to deleted procedures. Note that this can result<a name="line.44"></a>
-<span class="sourceLineNo">045</span>   * in huge bitmaps overtime.<a name="line.45"></a>
-<span class="sourceLineNo">046</span>   * Currently, it's set to true only when building tracker state from logs during recovery. During<a name="line.46"></a>
-<span class="sourceLineNo">047</span>   * recovery, if we are sure that a procedure has been deleted, reading its old update entries<a name="line.47"></a>
-<span class="sourceLineNo">048</span>   * can be skipped.<a name="line.48"></a>
-<span class="sourceLineNo">049</span>   */<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private boolean keepDeletes = false;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  /**<a name="line.51"></a>
-<span class="sourceLineNo">052</span>   * If true, it means tracker has incomplete information about the active/deleted procedures.<a name="line.52"></a>
-<span class="sourceLineNo">053</span>   * It's set to true only when recovering from old logs. See {@link #isDeleted(long)} docs to<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   * understand it's real use.<a name="line.54"></a>
-<span class="sourceLineNo">055</span>   */<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private boolean partial = false;<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  private long minUpdatedProcId = Long.MAX_VALUE;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  private long maxUpdatedProcId = Long.MIN_VALUE;<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>  public enum DeleteState { YES, NO, MAYBE }<a name="line.61"></a>
-<span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span>  /**<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   * A bitmap which can grow/merge with other {@link BitSetNode} (if certain conditions are met).<a name="line.64"></a>
-<span class="sourceLineNo">065</span>   * Boundaries of bitmap are aligned to multiples of {@link BitSetNode#BITS_PER_WORD}. So the<a name="line.65"></a>
-<span class="sourceLineNo">066</span>   * range of a {@link BitSetNode} is from [x * K, y * K) where x and y are integers, y &gt; x and K<a name="line.66"></a>
-<span class="sourceLineNo">067</span>   * is BITS_PER_WORD.<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  public static class BitSetNode {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    private final static long WORD_MASK = 0xffffffffffffffffL;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    private final static int ADDRESS_BITS_PER_WORD = 6;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    private final static int BITS_PER_WORD = 1 &lt;&lt; ADDRESS_BITS_PER_WORD;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    private final static int MAX_NODE_SIZE = 1 &lt;&lt; ADDRESS_BITS_PER_WORD;<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>     * Mimics {@link ProcedureStoreTracker#partial}.<a name="line.76"></a>
-<span class="sourceLineNo">077</span>     */<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    private final boolean partial;<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>    /* ----------------------<a name="line.80"></a>
-<span class="sourceLineNo">081</span>     * |  updated | deleted |  meaning<a name="line.81"></a>
-<span class="sourceLineNo">082</span>     * |     0    |   0     |  proc exists, but hasn't been updated since last resetUpdates().<a name="line.82"></a>
-<span class="sourceLineNo">083</span>     * |     1    |   0     |  proc was updated (but not deleted).<a name="line.83"></a>
-<span class="sourceLineNo">084</span>     * |     1    |   1     |  proc was deleted.<a name="line.84"></a>
-<span class="sourceLineNo">085</span>     * |     0    |   1     |  proc doesn't exist (maybe never created, maybe deleted in past).<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    /* ----------------------<a name="line.86"></a>
-<span class="sourceLineNo">087</span>     */<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>    /**<a name="line.89"></a>
-<span class="sourceLineNo">090</span>     * Set of procedures which have been updated since last {@link #resetUpdates()}.<a name="line.90"></a>
-<span class="sourceLineNo">091</span>     * Useful to track procedures which have been updated since last WAL write.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>     */<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    private long[] updated;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    /**<a name="line.94"></a>
-<span class="sourceLineNo">095</span>     * Keeps track of procedure ids which belong to this bitmap's range and have been deleted.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>     * This represents global state since it's not reset on WAL rolls.<a name="line.96"></a>
-<span class="sourceLineNo">097</span>     */<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    private long[] deleted;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    /**<a name="line.99"></a>
-<span class="sourceLineNo">100</span>     * Offset of bitmap i.e. procedure id corresponding to first bit.<a name="line.100"></a>
-<span class="sourceLineNo">101</span>     */<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    private long start;<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>    public void dump() {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      System.out.printf("%06d:%06d min=%d max=%d%n", getStart(), getEnd(),<a name="line.105"></a>
-<span class="sourceLineNo">106</span>        getActiveMinProcId(), getActiveMaxProcId());<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      System.out.println("Update:");<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      for (int i = 0; i &lt; updated.length; ++i) {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>        for (int j = 0; j &lt; BITS_PER_WORD; ++j) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>          System.out.print((updated[i] &amp; (1L &lt;&lt; j)) != 0 ? "1" : "0");<a name="line.110"></a>
-<span class="sourceLineNo">111</span>        }<a name="line.111"></a>
-<span class="sourceLineNo">112</span>        System.out.println(" " + i);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      }<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      System.out.println();<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      System.out.println("Delete:");<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      for (int i = 0; i &lt; deleted.length; ++i) {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        for (int j = 0; j &lt; BITS_PER_WORD; ++j) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>          System.out.print((deleted[i] &amp; (1L &lt;&lt; j)) != 0 ? "1" : "0");<a name="line.118"></a>
-<span class="sourceLineNo">119</span>        }<a name="line.119"></a>
-<span class="sourceLineNo">120</span>        System.out.println(" " + i);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      System.out.println();<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    }<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>    public BitSetNode(final long procId, final boolean partial) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      start = alignDown(procId);<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>      int count = 1;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      updated = new long[count];<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      deleted = new long[count];<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      for (int i = 0; i &lt; count; ++i) {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        updated[i] = 0;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>        deleted[i] = partial ? 0 : WORD_MASK;<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>      this.partial = partial;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      updateState(procId, false);<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    protected BitSetNode(final long start, final long[] updated, final long[] deleted) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      this.start = start;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      this.updated = updated;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      this.deleted = deleted;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      this.partial = false;<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>    public BitSetNode(ProcedureProtos.ProcedureStoreTracker.TrackerNode data) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      start = data.getStartId();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      int size = data.getUpdatedCount();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      updated = new long[size];<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      deleted = new long[size];<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      for (int i = 0; i &lt; size; ++i) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        updated[i] = data.getUpdated(i);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        deleted[i] = data.getDeleted(i);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      partial = false;<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>    public BitSetNode(final BitSetNode other, final boolean resetDelete) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      this.start = other.start;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      this.partial = other.partial;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      this.updated = other.updated.clone();<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      if (resetDelete) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        this.deleted = new long[other.deleted.length];<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        for (int i = 0; i &lt; this.deleted.length; ++i) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>          this.deleted[i] = ~(other.updated[i]);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      } else {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>        this.deleted = other.deleted.clone();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    }<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>    public void update(final long procId) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      updateState(procId, false);<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>    public void delete(final long procId) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      updateState(procId, true);<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>    public long getStart() {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      return start;<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>    public long getEnd() {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      return start + (updated.length &lt;&lt; ADDRESS_BITS_PER_WORD) - 1;<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>    public boolean contains(final long procId) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      return start &lt;= procId &amp;&amp; procId &lt;= getEnd();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    public DeleteState isDeleted(final long procId) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      int bitmapIndex = getBitmapIndex(procId);<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      int wordIndex = bitmapIndex &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      if (wordIndex &gt;= deleted.length) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        return DeleteState.MAYBE;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      return (deleted[wordIndex] &amp; (1L &lt;&lt; bitmapIndex)) != 0 ? DeleteState.YES : DeleteState.NO;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    private boolean isUpdated(final long procId) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      int bitmapIndex = getBitmapIndex(procId);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      int wordIndex = bitmapIndex &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      if (wordIndex &gt;= updated.length) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        return false;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      }<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      return (updated[wordIndex] &amp; (1L &lt;&lt; bitmapIndex)) != 0;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>    public boolean isUpdated() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      // TODO: cache the value<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      for (int i = 0; i &lt; updated.length; ++i) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        if ((updated[i] | deleted[i]) != WORD_MASK) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          return false;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        }<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      }<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      return true;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>    /**<a name="line.221"></a>
-<span class="sourceLineNo">222</span>     * @return true, if there are no active procedures in this BitSetNode, else false.<a name="line.222"></a>
-<span class="sourceLineNo">223</span>     */<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    public boolean isEmpty() {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      // TODO: cache the value<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      for (int i = 0; i &lt; deleted.length; ++i) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        if (deleted[i] != WORD_MASK) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>          return false;<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>      return true;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    }<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>    public void resetUpdates() {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      for (int i = 0; i &lt; updated.length; ++i) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        updated[i] = 0;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      }<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>     * Clears the {@link #deleted} bitmaps.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>     */<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    public void undeleteAll() {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      for (int i = 0; i &lt; updated.length; ++i) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        deleted[i] = 0;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      }<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    }<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>    public void unsetPartialFlag() {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      for (int i = 0; i &lt; updated.length; ++i) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        for (int j = 0; j &lt; BITS_PER_WORD; ++j) {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          if ((updated[i] &amp; (1L &lt;&lt; j)) == 0) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>            deleted[i] |= (1L &lt;&lt; j);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          }<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    }<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>     * Convert to<a name="line.260"></a>
-<span class="sourceLineNo">261</span>     * org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode<a name="line.261"></a>
-<span class="sourceLineNo">262</span>     * protobuf.<a name="line.262"></a>
-<span class="sourceLineNo">263</span>     */<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    public ProcedureProtos.ProcedureStoreTracker.TrackerNode convert() {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      ProcedureProtos.ProcedureStoreTracker.TrackerNode.Builder builder =<a name="line.265"></a>
-<span class="sourceLineNo">266</span>        ProcedureProtos.ProcedureStoreTracker.TrackerNode.newBuilder();<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      builder.setStartId(start);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>      for (int i = 0; i &lt; updated.length; ++i) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        builder.addUpdated(updated[i]);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        builder.addDeleted(deleted[i]);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      }<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      return builder.build();<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>    // ========================================================================<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    //  Grow/Merge Helpers<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    // ========================================================================<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    public boolean canGrow(final long procId) {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      return Math.abs(procId - start) &lt; MAX_NODE_SIZE;<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>    public boolean canMerge(final BitSetNode rightNode) {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      // Can just compare 'starts' since boundaries are aligned to multiples of BITS_PER_WORD.<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      assert start &lt; rightNode.start;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      return (rightNode.getEnd() - start) &lt; MAX_NODE_SIZE;<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>    public void grow(final long procId) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      int delta, offset;<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>      if (procId &lt; start) {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>        // add to head<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        long newStart = alignDown(procId);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        delta = (int)(start - newStart) &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        offset = delta;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        start = newStart;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      } else {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        // Add to tail<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        long newEnd = alignUp(procId + 1);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        delta = (int)(newEnd - getEnd()) &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        offset = 0;<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>      long[] newBitmap;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      int oldSize = updated.length;<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span>      newBitmap = new long[oldSize + delta];<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      for (int i = 0; i &lt; newBitmap.length; ++i) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        newBitmap[i] = 0;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      System.arraycopy(updated, 0, newBitmap, offset, oldSize);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      updated = newBitmap;<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>      newBitmap = new long[deleted.length + delta];<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      for (int i = 0; i &lt; newBitmap.length; ++i) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        newBitmap[i] = partial ? 0 : WORD_MASK;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      System.arraycopy(deleted, 0, newBitmap, offset, oldSize);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      deleted = newBitmap;<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 void merge(final BitSetNode rightNode) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      int delta = (int)(rightNode.getEnd() - getEnd()) &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>      long[] newBitmap;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      int oldSize = updated.length;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      int newSize = (delta - rightNode.updated.length);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      int offset = oldSize + newSize;<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>      newBitmap = new long[oldSize + delta];<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      System.arraycopy(updated, 0, newBitmap, 0, oldSize);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      System.arraycopy(rightNode.updated, 0, newBitmap, offset, rightNode.updated.length);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      updated = newBitmap;<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>      newBitmap = new long[oldSize + delta];<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      System.arraycopy(deleted, 0, newBitmap, 0, oldSize);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      System.arraycopy(rightNode.deleted, 0, newBitmap, offset, rightNode.deleted.length);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      deleted = newBitmap;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>      for (int i = 0; i &lt; newSize; ++i) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        updated[offset + i] = 0;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        deleted[offset + i] = partial ? 0 : WORD_MASK;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>    @Override<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    public String toString() {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      return "BitSetNode(" + getStart() + "-" + getEnd() + ")";<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    }<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>    //  Min/Max Helpers<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    // ========================================================================<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    public long getActiveMinProcId() {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      long minProcId = start;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      for (int i = 0; i &lt; deleted.length; ++i) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        if (deleted[i] == 0) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>          return(minProcId);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        }<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>        if (deleted[i] != WORD_MASK) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          for (int j = 0; j &lt; BITS_PER_WORD; ++j) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>            if ((deleted[i] &amp; (1L &lt;&lt; j)) != 0) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>              return minProcId + j;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>            }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          }<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>        minProcId += BITS_PER_WORD;<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      return minProcId;<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 long getActiveMaxProcId() {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      long maxProcId = getEnd();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      for (int i = deleted.length - 1; i &gt;= 0; --i) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        if (deleted[i] == 0) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          return maxProcId;<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>        if (deleted[i] != WORD_MASK) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>          for (int j = BITS_PER_WORD - 1; j &gt;= 0; --j) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>            if ((deleted[i] &amp; (1L &lt;&lt; j)) == 0) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>              return maxProcId - (BITS_PER_WORD - 1 - j);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>            }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>          }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        maxProcId -= BITS_PER_WORD;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      return maxProcId;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>    // ========================================================================<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    //  Bitmap Helpers<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    // ========================================================================<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    private int getBitmapIndex(final long procId) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      return (int)(procId - start);<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>    private void updateState(final long procId, final boolean isDeleted) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      int bitmapIndex = getBitmapIndex(procId);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      int wordIndex = bitmapIndex &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      long value = (1L &lt;&lt; bitmapIndex);<a name="line.403"></a>
-<span class="sourceLineNo">404</span><a name="line.404"></a>
-<span class="sourceLineNo">405</span>      updated[wordIndex] |= value;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      if (isDeleted) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        deleted[wordIndex] |= value;<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      } else {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        deleted[wordIndex] &amp;= ~value;<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      }<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
-<span class="sourceLineNo">412</span><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>    //  Helpers<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    // ========================================================================<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    /**<a name="line.417"></a>
-<span class="sourceLineNo">418</span>     * @return upper boundary (aligned to multiple of BITS_PER_WORD) of bitmap range x belongs to.<a name="line.418"></a>
-<span class="sourceLineNo">419</span>     */<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    private static long alignUp(final long x) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      return (x + (BITS_PER_WORD - 1)) &amp; -BITS_PER_WORD;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    }<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>     * @return lower boundary (aligned to multiple of BITS_PER_WORD) of bitmap range x belongs to.<a name="line.425"></a>
-<span class="sourceLineNo">426</span>     */<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    private static long alignDown(final long x) {<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      return x &amp; -BITS_PER_WORD;<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><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  public void resetToProto(final ProcedureProtos.ProcedureStoreTracker trackerProtoBuf) {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    reset();<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    for (ProcedureProtos.ProcedureStoreTracker.TrackerNode protoNode: trackerProtoBuf.getNodeList()) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      final BitSetNode node = new BitSetNode(protoNode);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      map.put(node.getStart(), node);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  /**<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   * Resets internal state to same as given {@code tracker}. Does deep copy of the bitmap.<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   */<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  public void resetTo(final ProcedureStoreTracker tracker) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    resetTo(tracker, false);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>  }<a name="line.445"></a>
-<span class="sourceLineNo">446</span><a name="line.446"></a>
-<span class="sourceLineNo">447</span>  public void resetTo(final ProcedureStoreTracker tracker, final boolean resetDelete) {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    this.partial = tracker.partial;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    this.minUpdatedProcId = tracker.minUpdatedProcId;<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    this.maxUpdatedProcId = tracker.maxUpdatedProcId;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    this.keepDeletes = tracker.keepDeletes;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : tracker.map.entrySet()) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      map.put(entry.getKey(), new BitSetNode(entry.getValue(), resetDelete));<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>  public void insert(long procId) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    insert(null, procId);<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>  public void insert(final long[] procIds) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      insert(procIds[i]);<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>  public void insert(final long procId, final long[] subProcIds) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    BitSetNode node = null;<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    node = update(node, procId);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    for (int i = 0; i &lt; subProcIds.length; ++i) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      node = insert(node, subProcIds[i]);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>  }<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span>  private BitSetNode insert(BitSetNode node, final long procId) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    if (node == null || !node.contains(procId)) {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      node = getOrCreateNode(procId);<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    node.update(procId);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    trackProcIds(procId);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    return node;<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>  public void update(long procId) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    update(null, procId);<a name="line.485"></a>
-<span class="sourceLineNo">486</span>  }<a name="line.486"></a>
-<span class="sourceLineNo">487</span><a name="line.487"></a>
-<span class="sourceLineNo">488</span>  private BitSetNode update(BitSetNode node, final long procId) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    node = lookupClosestNode(node, procId);<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    assert node != null : "expected node to update procId=" + procId;<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    assert node.contains(procId) : "expected procId=" + procId + " in the node";<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    node.update(procId);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    trackProcIds(procId);<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    return node;<a name="line.494"></a>
-<span class="sourceLineNo">495</span>  }<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>  public void delete(long procId) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    delete(null, procId);<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span>  public void delete(final long[] procIds) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    Arrays.sort(procIds);<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    BitSetNode node = null;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      node = delete(node, procIds[i]);<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
-<span class="sourceLineNo">507</span>  }<a name="line.507"></a>
-<span class="sourceLineNo">508</span><a name="line.508"></a>
-<span class="sourceLineNo">509</span>  private BitSetNode delete(BitSetNode node, final long procId) {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    node = lookupClosestNode(node, procId);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    assert node != null : "expected node to delete procId=" + procId;<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    assert node.contains(procId) : "expected procId=" + procId + " in the node";<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    node.delete(procId);<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    if (!keepDeletes &amp;&amp; node.isEmpty()) {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      // TODO: RESET if (map.size() == 1)<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      map.remove(node.getStart());<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span>    trackProcIds(procId);<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    return node;<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>  @InterfaceAudience.Private<a name="line.523"></a>
-<span class="sourceLineNo">524</span>  public void setDeleted(final long procId, final boolean isDeleted) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    BitSetNode node = getOrCreateNode(procId);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    assert node.contains(procId) : "expected procId=" + procId + " in the node=" + node;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    node.updateState(procId, isDeleted);<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    trackProcIds(procId);<a name="line.528"></a>
-<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>  public void setDeletedIfSet(final long... procId) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    BitSetNode node = null;<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    for (int i = 0; i &lt; procId.length; ++i) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      node = lookupClosestNode(node, procId[i]);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (node != null &amp;&amp; node.isUpdated(procId[i])) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        node.delete(procId[i]);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      }<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>  }<a name="line.539"></a>
-<span class="sourceLineNo">540</span><a name="line.540"></a>
-<span class="sourceLineNo">541</span>  public void setDeletedIfSet(final ProcedureStoreTracker tracker) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    BitSetNode trackerNode = null;<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    for (BitSetNode node: map.values()) {<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      final long minProcId = node.getStart();<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      final long maxProcId = node.getEnd();<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      for (long procId = minProcId; procId &lt;= maxProcId; ++procId) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>        if (!node.isUpdated(procId)) continue;<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>        trackerNode = tracker.lookupClosestNode(trackerNode, procId);<a name="line.549"></a>
-<span class="sourceLineNo">550</span>        if (trackerNode == null || !trackerNode.contains(procId) || trackerNode.isUpdated(procId)) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>          // the procedure was removed or updated<a name="line.551"></a>
-<span class="sourceLineNo">552</span>          node.delete(procId);<a name="line.552"></a>
-<span class="sourceLineNo">553</span>        }<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      }<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    }<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  }<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>   * lookup the node containing the specified procId.<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * @param node cached node to check before doing a lookup<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * @param procId the procId to lookup<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * @return the node that may contains the procId or null<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   */<a name="line.563"></a>
-<span class="sourceLineNo">564</span>  private BitSetNode lookupClosestNode(final BitSetNode node, final long procId) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    if (node != null &amp;&amp; node.contains(procId)) return node;<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    final Map.Entry&lt;Long, BitSetNode&gt; entry = map.floorEntry(procId);<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    return entry != null ? entry.getValue() : null;<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>  private void trackProcIds(long procId) {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    minUpdatedProcId = Math.min(minUpdatedProcId, procId);<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    maxUpdatedProcId = Math.max(maxUpdatedProcId, procId);<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  }<a name="line.573"></a>
-<span class="sourceLineNo">574</span><a name="line.574"></a>
-<span class="sourceLineNo">575</span>  public long getUpdatedMinProcId() {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    return minUpdatedProcId;<a name="line.576"></a>
-<span class="sourceLineNo">577</span>  }<a name="line.577"></a>
-<span class="sourceLineNo">578</span><a name="line.578"></a>
-<span class="sourceLineNo">579</span>  public long getUpdatedMaxProcId() {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    return maxUpdatedProcId;<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>  public void reset() {<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    this.keepDeletes = false;<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    this.partial = false;<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    this.map.clear();<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    resetUpdates();<a name="line.587"></a>
-<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>  public boolean isUpdated(long procId) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    final Map.Entry&lt;Long, BitSetNode&gt; entry = map.floorEntry(procId);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return entry != null &amp;&amp; entry.getValue().contains(procId) &amp;&amp; entry.getValue().isUpdated(procId);<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>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * If {@link #partial} is false, returns state from the bitmap. If no state is found for<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * {@code procId}, returns YES.<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   * If partial is true, tracker doesn't have complete view of system state, so it returns MAYBE<a name="line.598"></a>
-<span class="sourceLineNo">599</span>   * if there is no update for the procedure or if it doesn't have a state in bitmap. Otherwise,<a name="line.599"></a>
-<span class="sourceLineNo">600</span>   * returns state from the bitmap.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>   */<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  public DeleteState isDeleted(long procId) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    Map.Entry&lt;Long, BitSetNode&gt; entry = map.floorEntry(procId);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    if (entry != null &amp;&amp; entry.getValue().contains(procId)) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      BitSetNode node = entry.getValue();<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      DeleteState state = node.isDeleted(procId);<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      return partial &amp;&amp; !node.isUpdated(procId) ? DeleteState.MAYBE : state;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    return partial ? DeleteState.MAYBE : DeleteState.YES;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>  }<a name="line.610"></a>
-<span class="sourceLineNo">611</span><a name="line.611"></a>
-<span class="sourceLineNo">612</span>  public long getActiveMinProcId() {<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    // TODO: Cache?<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    Map.Entry&lt;Long, BitSetNode&gt; entry = map.firstEntry();<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    return entry == null ? 0 : entry.getValue().getActiveMinProcId();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>  }<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>  public void setKeepDeletes(boolean keepDeletes) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    this.keepDeletes = keepDeletes;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    // If not to keep deletes, remove the BitSetNodes which are empty (i.e. contains ids of deleted<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    // procedures).<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    if (!keepDeletes) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      Iterator&lt;Map.Entry&lt;Long, BitSetNode&gt;&gt; it = map.entrySet().iterator();<a name="line.623"></a>
-<span class="sourceLineNo">624</span>      while (it.hasNext()) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        Map.Entry&lt;Long, BitSetNode&gt; entry = it.next();<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        if (entry.getValue().isEmpty()) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>          it.remove();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        }<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>  public boolean isPartial() {<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    return partial;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  }<a name="line.635"></a>
-<span class="sourceLineNo">636</span><a name="line.636"></a>
-<span class="sourceLineNo">637</span>  public void setPartialFlag(boolean isPartial) {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    if (this.partial &amp;&amp; !isPartial) {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        entry.getValue().unsetPartialFlag();<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>    this.partial = isPartial;<a name="line.643"></a>
-<span class="sourceLineNo">644</span>  }<a name="line.644"></a>
-<span class="sourceLineNo">645</span><a name="line.645"></a>
-<span class="sourceLineNo">646</span>  /**<a name="line.646"></a>
-<span class="sourceLineNo">647</span>   * @return true, if no procedure is active, else false.<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   */<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  public boolean isEmpty() {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      if (!entry.getValue().isEmpty()) {<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        return false;<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>    return true;<a name="line.655"></a>
-<span class="sourceLineNo">656</span>  }<a name="line.656"></a>
-<span class="sourceLineNo">657</span><a name="line.657"></a>
-<span class="sourceLineNo">658</span>  /**<a name="line.658"></a>
-<span class="sourceLineNo">659</span>   * @return true if any procedure was updated since last call to {@link #resetUpdates()}.<a name="line.659"></a>
-<span class="sourceLineNo">660</span>   */<a name="line.660"></a>
-<span class="sourceLineNo">661</span>  public boolean isUpdated() {<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.662"></a>
-<span class="sourceLineNo">663</span>      if (!entry.getValue().isUpdated()) {<a name="line.663"></a>
-<span class="sourceLineNo">664</span>        return false;<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>    return true;<a name="line.667"></a>
-<span class="sourceLineNo">668</span>  }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>  /**<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   * Clears the list of updated procedure ids. This doesn't affect global list of active<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   * procedure ids.<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   */<a name="line.673"></a>
-<span class="sourceLineNo">674</span>  public void resetUpdates() {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      entry.getValue().resetUpdates();<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    }<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    minUpdatedProcId = Long.MAX_VALUE;<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    maxUpdatedProcId = Long.MIN_VALUE;<a name="line.679"></a>
-<span class="sourceLineNo">680</span>  }<a name="line.680"></a>
-<span class="sourceLineNo">681</span><a name="line.681"></a>
-<span class="sourceLineNo">682</span>  public void undeleteAll() {<a name="line.682"></a>
-<span class="sourceLineNo">683</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>      entry.getValue().undeleteAll();<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    }<a name="line.685"></a>
-<span class="sourceLineNo">686</span>  }<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>  private BitSetNode getOrCreateNode(final long procId) {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>    // If procId can fit in left node (directly or by growing it)<a name="line.689"></a>
-<span class="sourceLineNo">690</span>    BitSetNode leftNode = null;<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    boolean leftCanGrow = false;<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    Map.Entry&lt;Long, BitSetNode&gt; leftEntry = map.floorEntry(procId);<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    if (leftEntry != null) {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>      leftNode = leftEntry.getValue();<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      if (leftNode.contains(procId)) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>        return leftNode;<a name="line.696"></a>
-<span class="sourceLineNo">697</span>      }<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      leftCanGrow = leftNode.canGrow(procId);<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span>    // If procId can fit in right node (directly or by growing it)<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    BitSetNode rightNode = null;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    boolean rightCanGrow = false;<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    Map.Entry&lt;Long, BitSetNode&gt; rightEntry = map.ceilingEntry(procId);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    if (rightEntry != null) {<a name="line.705"></a>
-<span class="sourceLineNo">706</span>      rightNode = rightEntry.getValue();<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      rightCanGrow = rightNode.canGrow(procId);<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      if (leftNode != null) {<a name="line.708"></a>
-<span class="sourceLineNo">709</span>        if (leftNode.canMerge(rightNode)) {<a name="line.709"></a>
-<span class="sourceLineNo">710</span>          // merge left and right node<a name="line.710"></a>
-<span class="sourceLineNo">711</span>          return mergeNodes(leftNode, rightNode);<a name="line.711"></a>
-<span class="sourceLineNo">712</span>        }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span>        // If left and right nodes can not merge, decide which one to grow.<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        if (leftCanGrow &amp;&amp; rightCanGrow) {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>          if ((procId - leftNode.getEnd()) &lt;= (rightNode.getStart() - procId)) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>            return growNode(leftNode, procId);<a name="line.717"></a>
-<span class="sourceLineNo">718</span>          }<a name="line.718"></a>
-<span class="sourceLineNo">719</span>          return growNode(rightNode, procId);<a name="line.719"></a>
-<span class="sourceLineNo">720</span>        }<a name="line.720"></a>
-<span class="sourceLineNo">721</span>      }<a name="line.721"></a>
-<span class="sourceLineNo">722</span>    }<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>    // grow the left node<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    if (leftCanGrow) {<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      return growNode(leftNode, procId);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>    // grow the right node<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    if (rightCanGrow) {<a name="line.730"></a>
-<span class="sourceLineNo">731</span>      return growNode(rightNode, procId);<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    }<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>    // add new node if there are no left/right nodes which can be used.<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    BitSetNode node = new BitSetNode(procId, partial);<a name="line.735"></a>
-<span class="sourceLineNo">736</span>    map.put(node.getStart(), node);<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    return node;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
-<span class="sourceLineNo">741</span>   * Grows {@code node} to contain {@code procId} and updates the map.<a name="line.741"></a>
-<span class="sourceLineNo">742</span>   * @return {@link BitSetNode} instance which contains {@code procId}.<a name="line.742"></a>
-<span class="sourceLineNo">743</span>   */<a name="line.743"></a>
-<span class="sourceLineNo">744</span>  private BitSetNode growNode(BitSetNode node, long procId) {<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    map.remove(node.getStart());<a name="line.745"></a>
-<span class="sourceLineNo">746</span>    node.grow(procId);<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    map.put(node.getStart(), node);<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    return node;<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  }<a name="line.749"></a>
-<span class="sourceLineNo">750</span><a name="line.750"></a>
-<span class="sourceLineNo">751</span>  /**<a name="line.751"></a>
-<span class="sourceLineNo">752</span>   * Merges {@code leftNode} &amp; {@code rightNode} and updates the map.<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   */<a name="line.753"></a>
-<span class="sourceLineNo">754</span>  private BitSetNode mergeNodes(BitSetNode leftNode, BitSetNode rightNode) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    assert leftNode.getStart() &lt; rightNode.getStart();<a name="line.755"></a>
-<span class="sourceLineNo">756</span>    leftNode.merge(rightNode);<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    map.remove(rightNode.getStart());<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    return leftNode;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>  }<a name="line.759"></a>
-<span class="sourceLineNo">760</span><a name="line.760"></a>
-<span class="sourceLineNo">761</span>  public void dump() {<a name="line.761"></a>
-<span class="sourceLineNo">762</span>    System.out.println("map " + map.size());<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    System.out.println("isUpdated " + isUpdated());<a name="line.763"></a>
-<span class="sourceLineNo">764</span>    System.out.println("isEmpty " + isEmpty());<a name="line.764"></a>
-<span class="sourceLineNo">765</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.765"></a>
-<span class="sourceLineNo">766</span>      entry.getValue().dump();<a name="line.766"></a>
-<span class="sourceLineNo">767</span>    }<a name="line.767"></a>
-<span class="sourceLineNo">768</span>  }<a name="line.768"></a>
-<span class="sourceLineNo">769</span><a name="line.769"></a>
-<span class="sourceLineNo">770</span>  // ========================================================================<a name="line.770"></a>
-<span class="sourceLineNo">771</span>  //  Convert to/from Protocol Buffer.<a name="line.771"></a>
-<span class="sourceLineNo">772</span>  // ========================================================================<a name="line.772"></a>
-<span class="sourceLineNo">773</span><a name="line.773"></a>
-<span class="sourceLineNo">774</span>  /**<a name="line.774"></a>
-<span class="sourceLineNo">775</span>   * Builds<a name="line.775"></a>
-<span class="sourceLineNo">776</span>   * org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureStoreTracker<a name="line.776"></a>
-<span class="sourceLineNo">777</span>   * protocol buffer from current state.<a name="line.777"></a>
-<span class="sourceLineNo">778</span>   */<a name="line.778"></a>
-<span class="sourceLineNo">779</span>  public ProcedureProtos.ProcedureStoreTracker toProto() throws IOException {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>    ProcedureProtos.ProcedureStoreTracker.Builder builder =<a name="line.780"></a>
-<span class="sourceLineNo">781</span>        ProcedureProtos.ProcedureStoreTracker.newBuilder();<a name="line.781"></a>
-<span class="sourceLineNo">782</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>      builder.addNode(entry.getValue().convert());<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    }<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    return builder.build();<a name="line.785"></a>
-<span class="sourceLineNo">786</span>  }<a name="line.786"></a>
-<span class="sourceLineNo">787</span>}<a name="line.787"></a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
-</html>


[20/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html
deleted file mode 100644
index 6253d3f..0000000
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html
+++ /dev/null
@@ -1,936 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<title>Source code</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../../stylesheet.css" title="Style">
-</head>
-<body>
-<div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
-<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
-<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
-<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
-<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
-<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
-<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
-<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
-<span class="sourceLineNo">009</span> *<a name="line.9"></a>
-<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
-<span class="sourceLineNo">011</span> *<a name="line.11"></a>
-<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
-<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
-<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
-<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
-<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
-<span class="sourceLineNo">017</span> */<a name="line.17"></a>
-<span class="sourceLineNo">018</span><a name="line.18"></a>
-<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.procedure2.store.wal;<a name="line.19"></a>
-<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hbase.thirdparty.com.google.protobuf.InvalidProtocolBufferException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span><a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.slf4j.Logger;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.slf4j.LoggerFactory;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureIterator;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry;<a name="line.35"></a>
-<span class="sourceLineNo">036</span><a name="line.36"></a>
-<span class="sourceLineNo">037</span>/**<a name="line.37"></a>
-<span class="sourceLineNo">038</span> * Helper class that loads the procedures stored in a WAL<a name="line.38"></a>
-<span class="sourceLineNo">039</span> */<a name="line.39"></a>
-<span class="sourceLineNo">040</span>@InterfaceAudience.Private<a name="line.40"></a>
-<span class="sourceLineNo">041</span>@InterfaceStability.Evolving<a name="line.41"></a>
-<span class="sourceLineNo">042</span>public class ProcedureWALFormatReader {<a name="line.42"></a>
-<span class="sourceLineNo">043</span>  private static final Logger LOG = LoggerFactory.getLogger(ProcedureWALFormatReader.class);<a name="line.43"></a>
-<span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>  // ==============================================================================================<a name="line.45"></a>
-<span class="sourceLineNo">046</span>  //  We read the WALs in reverse order from the newest to the oldest.<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  //  We have different entry types:<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  //   - INIT: Procedure submitted by the user (also known as 'root procedure')<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  //   - INSERT: Children added to the procedure &lt;parentId&gt;:[&lt;childId&gt;, ...]<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  //   - UPDATE: The specified procedure was updated<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  //   - DELETE: The procedure was removed (finished/rolledback and result TTL expired)<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  //<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  // In the WAL we can find multiple times the same procedure as UPDATE or INSERT.<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  // We read the WAL from top to bottom, so every time we find an entry of the<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  // same procedure, that will be the "latest" update (Caveat: with multiple threads writing<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  // the store, this assumption does not hold).<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  //<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  // We keep two in-memory maps:<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  //  - localProcedureMap: is the map containing the entries in the WAL we are processing<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  //  - procedureMap: is the map containing all the procedures we found up to the WAL in process.<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  // localProcedureMap is merged with the procedureMap once we reach the WAL EOF.<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  //<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  // Since we are reading the WALs in reverse order (newest to oldest),<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  // if we find an entry related to a procedure we already have in 'procedureMap' we can discard it.<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  //<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  // The WAL is append-only so the last procedure in the WAL is the one that<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  // was in execution at the time we crashed/closed the server.<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  // Given that, the procedure replay order can be inferred by the WAL order.<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  //<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  // Example:<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  //    WAL-2: [A, B, A, C, D]<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  //    WAL-1: [F, G, A, F, B]<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  //    Replay-Order: [D, C, A, B, F, G]<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  //<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  // The "localProcedureMap" keeps a "replayOrder" list. Every time we add the<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  // record to the map that record is moved to the head of the "replayOrder" list.<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  // Using the example above:<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  //    WAL-2 localProcedureMap.replayOrder is [D, C, A, B]<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  //    WAL-1 localProcedureMap.replayOrder is [F, G]<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  //<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  // Each time we reach the WAL-EOF, the "replayOrder" list is merged/appended in 'procedureMap'<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  // so using the example above we end up with: [D, C, A, B] + [F, G] as replay order.<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  //<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  //  Fast Start: INIT/INSERT record and StackIDs<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  // ---------------------------------------------<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  // We have two special records, INIT and INSERT, that track the first time<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  // the procedure was added to the WAL. We can use this information to be able<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  // to start procedures before reaching the end of the WAL, or before reading all WALs.<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  // But in some cases, the WAL with that record can be already gone.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  // As an alternative, we can use the stackIds on each procedure,<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  // to identify when a procedure is ready to start.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  // If there are gaps in the sum of the stackIds we need to read more WALs.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  //<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  // Example (all procs child of A):<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  //   WAL-2: [A, B]                   A stackIds = [0, 4], B stackIds = [1, 5]<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  //   WAL-1: [A, B, C, D]<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  //<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  // In the case above we need to read one more WAL to be able to consider<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  // the root procedure A and all children as ready.<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  // ==============================================================================================<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private final WalProcedureMap localProcedureMap = new WalProcedureMap(1024);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  private final WalProcedureMap procedureMap = new WalProcedureMap(1024);<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  private final ProcedureWALFormat.Loader loader;<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>   * Global tracker that will be used by the WALProcedureStore after load.<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   * If the last WAL was closed cleanly we already have a full tracker ready to be used.<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * If the last WAL was truncated (e.g. master killed) the tracker will be empty<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * and the 'partial' flag will be set. In this case, on WAL replay we are going<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * to rebuild the tracker.<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   */<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private final ProcedureStoreTracker tracker;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  // TODO: private final boolean hasFastStartSupport;<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>   * If tracker for a log file is partial (see {@link ProcedureStoreTracker#partial}), we<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * re-build the list of procedures updated in that WAL because we need it for log cleaning<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * purposes. If all procedures updated in a WAL are found to be obsolete, it can be safely deleted.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * (see {@link WALProcedureStore#removeInactiveLogs()}).<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * However, we don't need deleted part of a WAL's tracker for this purpose, so we don't bother<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   * re-building it.<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   */<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  private ProcedureStoreTracker localTracker;<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>  // private long compactionLogId;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  private long maxProcId = 0;<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>  public ProcedureWALFormatReader(final ProcedureStoreTracker tracker,<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      ProcedureWALFormat.Loader loader) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    this.tracker = tracker;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    this.loader = loader;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    // we support fast-start only if we have a clean shutdown.<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    // this.hasFastStartSupport = !tracker.isEmpty();<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>  public void read(final ProcedureWALFile log) throws IOException {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    localTracker = log.getTracker().isPartial() ? log.getTracker() : null;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    if (localTracker != null) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      LOG.info("Rebuilding tracker for " + log);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>    long count = 0;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    FSDataInputStream stream = log.getStream();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    try {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      boolean hasMore = true;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      while (hasMore) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        ProcedureWALEntry entry = ProcedureWALFormat.readEntry(stream);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        if (entry == null) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>          LOG.warn("Nothing left to decode. Exiting with missing EOF, log=" + log);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>          break;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        }<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        count++;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        switch (entry.getType()) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>          case PROCEDURE_WAL_INIT:<a name="line.155"></a>
-<span class="sourceLineNo">156</span>            readInitEntry(entry);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>            break;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>          case PROCEDURE_WAL_INSERT:<a name="line.158"></a>
-<span class="sourceLineNo">159</span>            readInsertEntry(entry);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            break;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>          case PROCEDURE_WAL_UPDATE:<a name="line.161"></a>
-<span class="sourceLineNo">162</span>          case PROCEDURE_WAL_COMPACT:<a name="line.162"></a>
-<span class="sourceLineNo">163</span>            readUpdateEntry(entry);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>            break;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>          case PROCEDURE_WAL_DELETE:<a name="line.165"></a>
-<span class="sourceLineNo">166</span>            readDeleteEntry(entry);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>            break;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>          case PROCEDURE_WAL_EOF:<a name="line.168"></a>
-<span class="sourceLineNo">169</span>            hasMore = false;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>            break;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>          default:<a name="line.171"></a>
-<span class="sourceLineNo">172</span>            throw new CorruptedWALProcedureStoreException("Invalid entry: " + entry);<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>      LOG.info("Read {} entries in {}", count, log);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    } catch (InvalidProtocolBufferException e) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      LOG.error("While reading entry #{} in {}", count, log, e);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      loader.markCorruptedWAL(log, e);<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>    if (localTracker != null) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      localTracker.setPartialFlag(false);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    if (!localProcedureMap.isEmpty()) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      log.setProcIds(localProcedureMap.getMinProcId(), localProcedureMap.getMaxProcId());<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      procedureMap.mergeTail(localProcedureMap);<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>      //if (hasFastStartSupport) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      // TODO: Some procedure may be already runnables (see readInitEntry())<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      //       (we can also check the "update map" in the log trackers)<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      // --------------------------------------------------<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      //EntryIterator iter = procedureMap.fetchReady();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      //if (iter != null) loader.load(iter);<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>    }<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>  public void finish() throws IOException {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    // notify the loader about the max proc ID<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    loader.setMaxProcId(maxProcId);<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>    // fetch the procedure ready to run.<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    ProcedureIterator procIter = procedureMap.fetchReady();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    if (procIter != null) loader.load(procIter);<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>    // remaining procedures have missing link or dependencies<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    // consider them as corrupted, manual fix is probably required.<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    procIter = procedureMap.fetchAll();<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    if (procIter != null) loader.handleCorrupted(procIter);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>  private void loadProcedure(final ProcedureWALEntry entry, final ProcedureProtos.Procedure proc) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    maxProcId = Math.max(maxProcId, proc.getProcId());<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    if (isRequired(proc.getProcId())) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      if (LOG.isTraceEnabled()) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        LOG.trace("Read " + entry.getType() + " entry " + proc.getProcId());<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      localProcedureMap.add(proc);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      if (tracker.isPartial()) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        tracker.insert(proc.getProcId());<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>    if (localTracker != null) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      localTracker.insert(proc.getProcId());<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  }<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>  private void readInitEntry(final ProcedureWALEntry entry)<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  throws IOException {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    assert entry.getProcedureCount() == 1 : "Expected only one procedure";<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    loadProcedure(entry, entry.getProcedure(0));<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  }<a name="line.233"></a>
-<span class="sourceLineNo">234</span><a name="line.234"></a>
-<span class="sourceLineNo">235</span>  private void readInsertEntry(final ProcedureWALEntry entry) throws IOException {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    assert entry.getProcedureCount() &gt;= 1 : "Expected one or more procedures";<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    loadProcedure(entry, entry.getProcedure(0));<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    for (int i = 1; i &lt; entry.getProcedureCount(); ++i) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      loadProcedure(entry, entry.getProcedure(i));<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><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  private void readUpdateEntry(final ProcedureWALEntry entry) throws IOException {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    assert entry.getProcedureCount() == 1 : "Expected only one procedure";<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    loadProcedure(entry, entry.getProcedure(0));<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>  private void readDeleteEntry(final ProcedureWALEntry entry) throws IOException {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    assert entry.hasProcId() : "expected ProcID";<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>    if (entry.getChildIdCount() &gt; 0) {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      assert entry.getProcedureCount() == 1 : "Expected only one procedure";<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>      // update the parent procedure<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      loadProcedure(entry, entry.getProcedure(0));<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>      // remove the child procedures of entry.getProcId()<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      for (int i = 0, count = entry.getChildIdCount(); i &lt; count; ++i) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        deleteEntry(entry.getChildId(i));<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      }<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    } else {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      assert entry.getProcedureCount() == 0 : "Expected no procedures";<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>      // delete the procedure<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      deleteEntry(entry.getProcId());<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  private void deleteEntry(final long procId) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    if (LOG.isTraceEnabled()) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      LOG.trace("delete entry " + procId);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    maxProcId = Math.max(maxProcId, procId);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    localProcedureMap.remove(procId);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    assert !procedureMap.contains(procId);<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    if (tracker.isPartial()) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      tracker.setDeleted(procId, true);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    }<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    if (localTracker != null) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      // In case there is only delete entry for this procedure in current log.<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      localTracker.setDeleted(procId, 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><a name="line.284"></a>
-<span class="sourceLineNo">285</span>  private boolean isDeleted(final long procId) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    return tracker.isDeleted(procId) == ProcedureStoreTracker.DeleteState.YES;<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>  private boolean isRequired(final long procId) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    return !isDeleted(procId) &amp;&amp; !procedureMap.contains(procId);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>  // ==========================================================================<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  //  We keep an in-memory map of the procedures sorted by replay order.<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  //  (see the details in the beginning of the file)<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  //                      _______________________________________________<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  //      procedureMap = | A |   | E |   | C |   |   |   |   | G |   |   |<a name="line.297"></a>
-<span class="sourceLineNo">298</span>  //                       D               B<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  //      replayOrderHead = C &lt;-&gt; B &lt;-&gt; E &lt;-&gt; D &lt;-&gt; A &lt;-&gt; G<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  //<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  //  We also have a lazy grouping by "root procedure", and a list of<a name="line.301"></a>
-<span class="sourceLineNo">302</span>  //  unlinked procedures. If after reading all the WALs we have unlinked<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  //  procedures it means that we had a missing WAL or a corruption.<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  //      rootHead = A &lt;-&gt; D &lt;-&gt; G<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  //                 B     E<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  //                 C<a name="line.306"></a>
-<span class="sourceLineNo">307</span>  //      unlinkFromLinkList = None<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  // ==========================================================================<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  private static class Entry {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    // For bucketed linked lists in hash-table.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    protected Entry hashNext;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    // child head<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    protected Entry childHead;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    // double-link for rootHead or childHead<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    protected Entry linkNext;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    protected Entry linkPrev;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    // replay double-linked-list<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    protected Entry replayNext;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    protected Entry replayPrev;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    // procedure-infos<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    protected Procedure procedure;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    protected ProcedureProtos.Procedure proto;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    protected boolean ready = false;<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    public Entry(Entry hashNext) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.hashNext = hashNext;<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>    public long getProcId() {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      return proto.getProcId();<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 long getParentId() {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      return proto.getParentId();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>    public boolean hasParent() {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      return proto.hasParentId();<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>    public boolean isReady() {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      return ready;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span>    public boolean isFinished() {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      if (!hasParent()) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        // we only consider 'root' procedures. because for the user 'finished'<a name="line.347"></a>
-<span class="sourceLineNo">348</span>        // means when everything up to the 'root' is finished.<a name="line.348"></a>
-<span class="sourceLineNo">349</span>        switch (proto.getState()) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>          case ROLLEDBACK:<a name="line.350"></a>
-<span class="sourceLineNo">351</span>          case SUCCESS:<a name="line.351"></a>
-<span class="sourceLineNo">352</span>            return true;<a name="line.352"></a>
-<span class="sourceLineNo">353</span>          default:<a name="line.353"></a>
-<span class="sourceLineNo">354</span>            break;<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>      return false;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public Procedure convert() throws IOException {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      if (procedure == null) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        procedure = ProcedureUtil.convertToProcedure(proto);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      }<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      return procedure;<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>    @Override<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    public String toString() {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      final StringBuilder sb = new StringBuilder();<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      sb.append("Entry(");<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      sb.append(getProcId());<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      sb.append(", parentId=");<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      sb.append(getParentId());<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      sb.append(", class=");<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      sb.append(proto.getClassName());<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      sb.append(")");<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      return sb.toString();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>  private static class EntryIterator implements ProcedureIterator {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    private final Entry replayHead;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    private Entry current;<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>    public EntryIterator(Entry replayHead) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      this.replayHead = replayHead;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      this.current = replayHead;<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>    @Override<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    public void reset() {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      this.current = replayHead;<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>    @Override<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    public boolean hasNext() {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      return current != null;<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>    @Override<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    public boolean isNextFinished() {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      return current != null &amp;&amp; current.isFinished();<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>    @Override<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    public void skipNext() {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      current = current.replayNext;<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>    @Override<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    public Procedure next() throws IOException {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      try {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        return current.convert();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      } finally {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        current = current.replayNext;<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      }<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  }<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span>  private static class WalProcedureMap {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    // procedure hash table<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    private Entry[] procedureMap;<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>    // replay-order double-linked-list<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    private Entry replayOrderHead;<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    private Entry replayOrderTail;<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>    // root linked-list<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    private Entry rootHead;<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>    // pending unlinked children (root not present yet)<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    private Entry childUnlinkedHead;<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    // Track ProcId range<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    private long minProcId = Long.MAX_VALUE;<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    private long maxProcId = Long.MIN_VALUE;<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    public WalProcedureMap(int size) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      procedureMap = new Entry[size];<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      replayOrderHead = null;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      replayOrderTail = null;<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      rootHead = null;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      childUnlinkedHead = null;<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 void add(ProcedureProtos.Procedure procProto) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      trackProcIds(procProto.getProcId());<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      Entry entry = addToMap(procProto.getProcId(), procProto.hasParentId());<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      boolean newEntry = entry.proto == null;<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      // We have seen procedure WALs where the entries are out of order; see HBASE-18152.<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      // To compensate, only replace the Entry procedure if for sure this new procedure<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      // is indeed an entry that came later. TODO: Fix the writing of procedure info so<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      // it does not violate basic expectation, that WALs contain procedure changes going<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      // from start to finish in sequence.<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      if (newEntry || isIncreasing(entry.proto, procProto)) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        entry.proto = procProto;<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      addToReplayList(entry);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      if(newEntry) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        if (procProto.hasParentId()) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          childUnlinkedHead = addToLinkList(entry, childUnlinkedHead);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        } else {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          rootHead = addToLinkList(entry, rootHead);<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><a name="line.467"></a>
-<span class="sourceLineNo">468</span>    /**<a name="line.468"></a>
-<span class="sourceLineNo">469</span>     * @return True if this new procedure is 'richer' than the current one else<a name="line.469"></a>
-<span class="sourceLineNo">470</span>     * false and we log this incidence where it appears that the WAL has older entries<a name="line.470"></a>
-<span class="sourceLineNo">471</span>     * appended after newer ones. See HBASE-18152.<a name="line.471"></a>
-<span class="sourceLineNo">472</span>     */<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    private static boolean isIncreasing(ProcedureProtos.Procedure current,<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        ProcedureProtos.Procedure candidate) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      // Check that the procedures we see are 'increasing'. We used to compare<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      // procedure id first and then update time but it can legitimately go backwards if the<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      // procedure is failed or rolled back so that was unreliable. Was going to compare<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      // state but lets see if comparing update time enough (unfortunately this issue only<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      // seen under load...)<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      boolean increasing = current.getLastUpdate() &lt;= candidate.getLastUpdate();<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      if (!increasing) {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        LOG.warn("NOT INCREASING! current=" + current + ", candidate=" + candidate);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      }<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      return increasing;<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>    public boolean remove(long procId) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      trackProcIds(procId);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      Entry entry = removeFromMap(procId);<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      if (entry != null) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        unlinkFromReplayList(entry);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        unlinkFromLinkList(entry);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        return true;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      }<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      return false;<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    }<a name="line.496"></a>
-<span class="sourceLineNo">497</span><a name="line.497"></a>
-<span class="sourceLineNo">498</span>    private void trackProcIds(long procId) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      minProcId = Math.min(minProcId, procId);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      maxProcId = Math.max(maxProcId, procId);<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    }<a name="line.501"></a>
-<span class="sourceLineNo">502</span><a name="line.502"></a>
-<span class="sourceLineNo">503</span>    public long getMinProcId() {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      return minProcId;<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>    public long getMaxProcId() {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      return maxProcId;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>    public boolean contains(long procId) {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      return getProcedure(procId) != null;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    }<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>    public boolean isEmpty() {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      return replayOrderHead == null;<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span>    public void clear() {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        procedureMap[i] = null;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      }<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      replayOrderHead = null;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      replayOrderTail = null;<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      rootHead = null;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      childUnlinkedHead = null;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      minProcId = Long.MAX_VALUE;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      maxProcId = Long.MIN_VALUE;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>    /*<a name="line.531"></a>
-<span class="sourceLineNo">532</span>     * Merges two WalProcedureMap,<a name="line.532"></a>
-<span class="sourceLineNo">533</span>     * the target is the "global" map, the source is the "local" map.<a name="line.533"></a>
-<span class="sourceLineNo">534</span>     *  - The entries in the hashtables are guaranteed to be unique.<a name="line.534"></a>
-<span class="sourceLineNo">535</span>     *    On replay we don't load procedures that already exist in the "global"<a name="line.535"></a>
-<span class="sourceLineNo">536</span>     *    map (the one we are merging the "local" in to).<a name="line.536"></a>
-<span class="sourceLineNo">537</span>     *  - The replayOrderList of the "local" nao will be appended to the "global"<a name="line.537"></a>
-<span class="sourceLineNo">538</span>     *    map replay list.<a name="line.538"></a>
-<span class="sourceLineNo">539</span>     *  - The "local" map will be cleared at the end of the operation.<a name="line.539"></a>
-<span class="sourceLineNo">540</span>     */<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    public void mergeTail(WalProcedureMap other) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      for (Entry p = other.replayOrderHead; p != null; p = p.replayNext) {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>        int slotIndex = getMapSlot(p.getProcId());<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        p.hashNext = procedureMap[slotIndex];<a name="line.544"></a>
-<span class="sourceLineNo">545</span>        procedureMap[slotIndex] = p;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>      if (replayOrderHead == null) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>        replayOrderHead = other.replayOrderHead;<a name="line.549"></a>
-<span class="sourceLineNo">550</span>        replayOrderTail = other.replayOrderTail;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>        rootHead = other.rootHead;<a name="line.551"></a>
-<span class="sourceLineNo">552</span>        childUnlinkedHead = other.childUnlinkedHead;<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      } else {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>        // append replay list<a name="line.554"></a>
-<span class="sourceLineNo">555</span>        assert replayOrderTail.replayNext == null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>        assert other.replayOrderHead.replayPrev == null;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>        replayOrderTail.replayNext = other.replayOrderHead;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>        other.replayOrderHead.replayPrev = replayOrderTail;<a name="line.558"></a>
-<span class="sourceLineNo">559</span>        replayOrderTail = other.replayOrderTail;<a name="line.559"></a>
-<span class="sourceLineNo">560</span><a name="line.560"></a>
-<span class="sourceLineNo">561</span>        // merge rootHead<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        if (rootHead == null) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>          rootHead = other.rootHead;<a name="line.563"></a>
-<span class="sourceLineNo">564</span>        } else if (other.rootHead != null) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>          Entry otherTail = findLinkListTail(other.rootHead);<a name="line.565"></a>
-<span class="sourceLineNo">566</span>          otherTail.linkNext = rootHead;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>          rootHead.linkPrev = otherTail;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>          rootHead = other.rootHead;<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>        // merge childUnlinkedHead<a name="line.571"></a>
-<span class="sourceLineNo">572</span>        if (childUnlinkedHead == null) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>          childUnlinkedHead = other.childUnlinkedHead;<a name="line.573"></a>
-<span class="sourceLineNo">574</span>        } else if (other.childUnlinkedHead != null) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>          Entry otherTail = findLinkListTail(other.childUnlinkedHead);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>          otherTail.linkNext = childUnlinkedHead;<a name="line.576"></a>
-<span class="sourceLineNo">577</span>          childUnlinkedHead.linkPrev = otherTail;<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          childUnlinkedHead = other.childUnlinkedHead;<a name="line.578"></a>
-<span class="sourceLineNo">579</span>        }<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      }<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      maxProcId = Math.max(maxProcId, other.maxProcId);<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      minProcId = Math.max(minProcId, other.minProcId);<a name="line.582"></a>
-<span class="sourceLineNo">583</span><a name="line.583"></a>
-<span class="sourceLineNo">584</span>      other.clear();<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    }<a name="line.585"></a>
-<span class="sourceLineNo">586</span><a name="line.586"></a>
-<span class="sourceLineNo">587</span>    /*<a name="line.587"></a>
-<span class="sourceLineNo">588</span>     * Returns an EntryIterator with the list of procedures ready<a name="line.588"></a>
-<span class="sourceLineNo">589</span>     * to be added to the executor.<a name="line.589"></a>
-<span class="sourceLineNo">590</span>     * A Procedure is ready if its children and parent are ready.<a name="line.590"></a>
-<span class="sourceLineNo">591</span>     */<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    public EntryIterator fetchReady() {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      buildGraph();<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>      Entry readyHead = null;<a name="line.595"></a>
-<span class="sourceLineNo">596</span>      Entry readyTail = null;<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      Entry p = replayOrderHead;<a name="line.597"></a>
-<span class="sourceLineNo">598</span>      while (p != null) {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>        Entry next = p.replayNext;<a name="line.599"></a>
-<span class="sourceLineNo">600</span>        if (p.isReady()) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>          unlinkFromReplayList(p);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>          if (readyTail != null) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>            readyTail.replayNext = p;<a name="line.603"></a>
-<span class="sourceLineNo">604</span>            p.replayPrev = readyTail;<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          } else {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>            p.replayPrev = null;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>            readyHead = p;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>          }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>          readyTail = p;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          p.replayNext = null;<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        }<a name="line.611"></a>
-<span class="sourceLineNo">612</span>        p = next;<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      }<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      // we need the hash-table lookups for parents, so this must be done<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      // out of the loop where we check isReadyToRun()<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      for (p = readyHead; p != null; p = p.replayNext) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        removeFromMap(p.getProcId());<a name="line.617"></a>
-<span class="sourceLineNo">618</span>        unlinkFromLinkList(p);<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      }<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return readyHead != null ? new EntryIterator(readyHead) : null;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    }<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>     * Drain this map and return all procedures in it.<a name="line.624"></a>
-<span class="sourceLineNo">625</span>     */<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    public EntryIterator fetchAll() {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      Entry head = replayOrderHead;<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      for (Entry p = head; p != null; p = p.replayNext) {<a name="line.628"></a>
-<span class="sourceLineNo">629</span>        removeFromMap(p.getProcId());<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      }<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>        assert procedureMap[i] == null : "map not empty i=" + i;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      replayOrderHead = null;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      replayOrderTail = null;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      childUnlinkedHead = null;<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      rootHead = null;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      return head != null ? new EntryIterator(head) : null;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    }<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span>    private void buildGraph() {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      Entry p = childUnlinkedHead;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      while (p != null) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>        Entry next = p.linkNext;<a name="line.644"></a>
-<span class="sourceLineNo">645</span>        Entry rootProc = getRootProcedure(p);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        if (rootProc != null) {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>          rootProc.childHead = addToLinkList(p, rootProc.childHead);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        }<a name="line.648"></a>
-<span class="sourceLineNo">649</span>        p = next;<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span>      for (p = rootHead; p != null; p = p.linkNext) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        checkReadyToRun(p);<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      }<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
-<span class="sourceLineNo">656</span><a name="line.656"></a>
-<span class="sourceLineNo">657</span>    private Entry getRootProcedure(Entry entry) {<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      while (entry != null &amp;&amp; entry.hasParent()) {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        entry = getProcedure(entry.getParentId());<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      }<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      return entry;<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    }<a name="line.662"></a>
-<span class="sourceLineNo">663</span><a name="line.663"></a>
-<span class="sourceLineNo">664</span>    /*<a name="line.664"></a>
-<span class="sourceLineNo">665</span>     * (see the comprehensive explanation in the beginning of the file)<a name="line.665"></a>
-<span class="sourceLineNo">666</span>     * A Procedure is ready when parent and children are ready.<a name="line.666"></a>
-<span class="sourceLineNo">667</span>     * "ready" means that we all the information that we need in-memory.<a name="line.667"></a>
-<span class="sourceLineNo">668</span>     *<a name="line.668"></a>
-<span class="sourceLineNo">669</span>     * Example-1:<a name="line.669"></a>
-<span class="sourceLineNo">670</span>     * We have two WALs, we start reading from the newest (wal-2)<a name="line.670"></a>
-<span class="sourceLineNo">671</span>     *    wal-2 | C B |<a name="line.671"></a>
-<span class="sourceLineNo">672</span>     *    wal-1 | A B C |<a name="line.672"></a>
-<span class="sourceLineNo">673</span>     *<a name="line.673"></a>
-<span class="sourceLineNo">674</span>     * If C and B don't depend on A (A is not the parent), we can start them<a name="line.674"></a>
-<span class="sourceLineNo">675</span>     * before reading wal-1. If B is the only one with parent A we can start C.<a name="line.675"></a>
-<span class="sourceLineNo">676</span>     * We have to read one more WAL before being able to start B.<a name="line.676"></a>
-<span class="sourceLineNo">677</span>     *<a name="line.677"></a>
-<span class="sourceLineNo">678</span>     * How do we know with the only information in B that we are not ready.<a name="line.678"></a>
-<span class="sourceLineNo">679</span>     *  - easy case, the parent is missing from the global map<a name="line.679"></a>
-<span class="sourceLineNo">680</span>     *  - more complex case we look at the Stack IDs.<a name="line.680"></a>
-<span class="sourceLineNo">681</span>     *<a name="line.681"></a>
-<span class="sourceLineNo">682</span>     * The Stack-IDs are added to the procedure order as an incremental index<a name="line.682"></a>
-<span class="sourceLineNo">683</span>     * tracking how many times that procedure was executed, which is equivalent<a name="line.683"></a>
-<span class="sourceLineNo">684</span>     * to the number of times we wrote the procedure to the WAL.<a name="line.684"></a>
-<span class="sourceLineNo">685</span>     * In the example above:<a name="line.685"></a>
-<span class="sourceLineNo">686</span>     *   wal-2: B has stackId = [1, 2]<a name="line.686"></a>
-<span class="sourceLineNo">687</span>     *   wal-1: B has stackId = [1]<a name="line.687"></a>
-<span class="sourceLineNo">688</span>     *   wal-1: A has stackId = [0]<a name="line.688"></a>
-<span class="sourceLineNo">689</span>     *<a name="line.689"></a>
-<span class="sourceLineNo">690</span>     * Since we know that the Stack-IDs are incremental for a Procedure,<a name="line.690"></a>
-<span class="sourceLineNo">691</span>     * we notice that there is a gap in the stackIds of B, so something was<a name="line.691"></a>
-<span class="sourceLineNo">692</span>     * executed before.<a name="line.692"></a>
-<span class="sourceLineNo">693</span>     * To identify when a Procedure is ready we do the sum of the stackIds of<a name="line.693"></a>
-<span class="sourceLineNo">694</span>     * the procedure and the parent. if the stackIdSum is equal to the<a name="line.694"></a>
-<span class="sourceLineNo">695</span>     * sum of {1..maxStackId} then everything we need is available.<a name="line.695"></a>
-<span class="sourceLineNo">696</span>     *<a name="line.696"></a>
-<span class="sourceLineNo">697</span>     * Example-2<a name="line.697"></a>
-<span class="sourceLineNo">698</span>     *    wal-2 | A |              A stackIds = [0, 2]<a name="line.698"></a>
-<span class="sourceLineNo">699</span>     *    wal-1 | A B |            B stackIds = [1]<a name="line.699"></a>
-<span class="sourceLineNo">700</span>     *<a name="line.700"></a>
-<span class="sourceLineNo">701</span>     * There is a gap between A stackIds so something was executed in between.<a name="line.701"></a>
-<span class="sourceLineNo">702</span>     */<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    private boolean checkReadyToRun(Entry rootEntry) {<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      assert !rootEntry.hasParent() : "expected root procedure, got " + rootEntry;<a name="line.704"></a>
-<span class="sourceLineNo">705</span><a name="line.705"></a>
-<span class="sourceLineNo">706</span>      if (rootEntry.isFinished()) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>        // If the root procedure is finished, sub-procedures should be gone<a name="line.707"></a>
-<span class="sourceLineNo">708</span>        if (rootEntry.childHead != null) {<a name="line.708"></a>
-<span class="sourceLineNo">709</span>          LOG.error("unexpected active children for root-procedure: " + rootEntry);<a name="line.709"></a>
-<span class="sourceLineNo">710</span>          for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>            LOG.error("unexpected active children: " + p);<a name="line.711"></a>
-<span class="sourceLineNo">712</span>          }<a name="line.712"></a>
-<span class="sourceLineNo">713</span>        }<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span>        assert rootEntry.childHead == null : "unexpected children on root completion. " + rootEntry;<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        rootEntry.ready = true;<a name="line.716"></a>
-<span class="sourceLineNo">717</span>        return true;<a name="line.717"></a>
-<span class="sourceLineNo">718</span>      }<a name="line.718"></a>
-<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>      int stackIdSum = 0;<a name="line.720"></a>
-<span class="sourceLineNo">721</span>      int maxStackId = 0;<a name="line.721"></a>
-<span class="sourceLineNo">722</span>      for (int i = 0; i &lt; rootEntry.proto.getStackIdCount(); ++i) {<a name="line.722"></a>
-<span class="sourceLineNo">723</span>        int stackId = 1 + rootEntry.proto.getStackId(i);<a name="line.723"></a>
-<span class="sourceLineNo">724</span>        maxStackId  = Math.max(maxStackId, stackId);<a name="line.724"></a>
-<span class="sourceLineNo">725</span>        stackIdSum += stackId;<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        if (LOG.isTraceEnabled()) {<a name="line.726"></a>
-<span class="sourceLineNo">727</span>          LOG.trace("stackId=" + stackId + " stackIdSum=" + stackIdSum +<a name="line.727"></a>
-<span class="sourceLineNo">728</span>          " maxStackid=" + maxStackId + " " + rootEntry);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>        }<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
-<span class="sourceLineNo">731</span><a name="line.731"></a>
-<span class="sourceLineNo">732</span>      for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        for (int i = 0; i &lt; p.proto.getStackIdCount(); ++i) {<a name="line.733"></a>
-<span class="sourceLineNo">734</span>          int stackId = 1 + p.proto.getStackId(i);<a name="line.734"></a>
-<span class="sourceLineNo">735</span>          maxStackId  = Math.max(maxStackId, stackId);<a name="line.735"></a>
-<span class="sourceLineNo">736</span>          stackIdSum += stackId;<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          if (LOG.isTraceEnabled()) {<a name="line.737"></a>
-<span class="sourceLineNo">738</span>            LOG.trace("stackId=" + stackId + " stackIdSum=" + stackIdSum +<a name="line.738"></a>
-<span class="sourceLineNo">739</span>              " maxStackid=" + maxStackId + " " + p);<a name="line.739"></a>
-<span class="sourceLineNo">740</span>          }<a name="line.740"></a>
-<span class="sourceLineNo">741</span>        }<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      }<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      // The cmpStackIdSum is this formula for finding the sum of a series of numbers:<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      // http://www.wikihow.com/Sum-the-Integers-from-1-to-N#/Image:Sum-the-Integers-from-1-to-N-Step-2-Version-3.jpg<a name="line.744"></a>
-<span class="sourceLineNo">745</span>      final int cmpStackIdSum = (maxStackId * (maxStackId + 1) / 2);<a name="line.745"></a>
-<span class="sourceLineNo">746</span>      if (cmpStackIdSum == stackIdSum) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        rootEntry.ready = true;<a name="line.747"></a>
-<span class="sourceLineNo">748</span>        for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.748"></a>
-<span class="sourceLineNo">749</span>          p.ready = true;<a name="line.749"></a>
-<span class="sourceLineNo">750</span>        }<a name="line.750"></a>
-<span class="sourceLineNo">751</span>        return true;<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      }<a name="line.752"></a>
-<span class="sourceLineNo">753</span>      return false;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    }<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span>    private void unlinkFromReplayList(Entry entry) {<a name="line.756"></a>
-<span class="sourceLineNo">757</span>      if (replayOrderHead == entry) {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>        replayOrderHead = entry.replayNext;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>      }<a name="line.759"></a>
-<span class="sourceLineNo">760</span>      if (replayOrderTail == entry) {<a name="line.760"></a>
-<span class="sourceLineNo">761</span>        replayOrderTail = entry.replayPrev;<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      }<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      if (entry.replayPrev != null) {<a name="line.763"></a>
-<span class="sourceLineNo">764</span>        entry.replayPrev.replayNext = entry.replayNext;<a name="line.764"></a>
-<span class="sourceLineNo">765</span>      }<a name="line.765"></a>
-<span class="sourceLineNo">766</span>      if (entry.replayNext != null) {<a name="line.766"></a>
-<span class="sourceLineNo">767</span>        entry.replayNext.replayPrev = entry.replayPrev;<a name="line.767"></a>
-<span class="sourceLineNo">768</span>      }<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    }<a name="line.769"></a>
-<span class="sourceLineNo">770</span><a name="line.770"></a>
-<span class="sourceLineNo">771</span>    private void addToReplayList(final Entry entry) {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      unlinkFromReplayList(entry);<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      entry.replayNext = replayOrderHead;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>      entry.replayPrev = null;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>      if (replayOrderHead != null) {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>        replayOrderHead.replayPrev = entry;<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      } else {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>        replayOrderTail = entry;<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      }<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      replayOrderHead = entry;<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>    private void unlinkFromLinkList(Entry entry) {<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      if (entry == rootHead) {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        rootHead = entry.linkNext;<a name="line.785"></a>
-<span class="sourceLineNo">786</span>      } else if (entry == childUnlinkedHead) {<a name="line.786"></a>
-<span class="sourceLineNo">787</span>        childUnlinkedHead = entry.linkNext;<a name="line.787"></a>
-<span class="sourceLineNo">788</span>      }<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      if (entry.linkPrev != null) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>        entry.linkPrev.linkNext = entry.linkNext;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>      }<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      if (entry.linkNext != null) {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>        entry.linkNext.linkPrev = entry.linkPrev;<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      }<a name="line.794"></a>
-<span class="sourceLineNo">795</span>    }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span>    private Entry addToLinkList(Entry entry, Entry linkHead) {<a name="line.797"></a>
-<span class="sourceLineNo">798</span>      unlinkFromLinkList(entry);<a name="line.798"></a>
-<span class="sourceLineNo">799</span>      entry.linkNext = linkHead;<a name="line.799"></a>
-<span class="sourceLineNo">800</span>      entry.linkPrev = null;<a name="line.800"></a>
-<span class="sourceLineNo">801</span>      if (linkHead != null) {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>        linkHead.linkPrev = entry;<a name="line.802"></a>
-<span class="sourceLineNo">803</span>      }<a name="line.803"></a>
-<span class="sourceLineNo">804</span>      return entry;<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    }<a name="line.805"></a>
-<span class="sourceLineNo">806</span><a name="line.806"></a>
-<span class="sourceLineNo">807</span>    private Entry findLinkListTail(Entry linkHead) {<a name="line.807"></a>
-<span class="sourceLineNo">808</span>      Entry tail = linkHead;<a name="line.808"></a>
-<span class="sourceLineNo">809</span>      while (tail.linkNext != null) {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>        tail = tail.linkNext;<a name="line.810"></a>
-<span class="sourceLineNo">811</span>      }<a name="line.811"></a>
-<span class="sourceLineNo">812</span>      return tail;<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    }<a name="line.813"></a>
-<span class="sourceLineNo">814</span><a name="line.814"></a>
-<span class="sourceLineNo">815</span>    private Entry addToMap(final long procId, final boolean hasParent) {<a name="line.815"></a>
-<span class="sourceLineNo">816</span>      int slotIndex = getMapSlot(procId);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      Entry entry = getProcedure(slotIndex, procId);<a name="line.817"></a>
-<span class="sourceLineNo">818</span>      if (entry != null) return entry;<a name="line.818"></a>
-<span class="sourceLineNo">819</span><a name="line.819"></a>
-<span class="sourceLineNo">820</span>      entry = new Entry(procedureMap[slotIndex]);<a name="line.820"></a>
-<span class="sourceLineNo">821</span>      procedureMap[slotIndex] = entry;<a name="line.821"></a>
-<span class="sourceLineNo">822</span>      return entry;<a name="line.822"></a>
-<span class="sourceLineNo">823</span>    }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>    private Entry removeFromMap(final long procId) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span>      int slotIndex = getMapSlot(procId);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>      Entry prev = null;<a name="line.827"></a>
-<span class="sourceLineNo">828</span>      Entry entry = procedureMap[slotIndex];<a name="line.828"></a>
-<span class="sourceLineNo">829</span>      while (entry != null) {<a name="line.829"></a>
-<span class="sourceLineNo">830</span>        if (procId == entry.getProcId()) {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>          if (prev != null) {<a name="line.831"></a>
-<span class="sourceLineNo">832</span>            prev.hashNext = entry.hashNext;<a name="line.832"></a>
-<span class="sourceLineNo">833</span>          } else {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>            procedureMap[slotIndex] = entry.hashNext;<a name="line.834"></a>
-<span class="sourceLineNo">835</span>          }<a name="line.835"></a>
-<span class="sourceLineNo">836</span>          entry.hashNext = null;<a name="line.836"></a>
-<span class="sourceLineNo">837</span>          return entry;<a name="line.837"></a>
-<span class="sourceLineNo">838</span>        }<a name="line.838"></a>
-<span class="sourceLineNo">839</span>        prev = entry;<a name="line.839"></a>
-<span class="sourceLineNo">840</span>        entry = entry.hashNext;<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      }<a name="line.841"></a>
-<span class="sourceLineNo">842</span>      return null;<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    }<a name="line.843"></a>
-<span class="sourceLineNo">844</span><a name="line.844"></a>
-<span class="sourceLineNo">845</span>    private Entry getProcedure(final long procId) {<a name="line.845"></a>
-<span class="sourceLineNo">846</span>      return getProcedure(getMapSlot(procId), procId);<a name="line.846"></a>
-<span class="sourceLineNo">847</span>    }<a name="line.847"></a>
-<span class="sourceLineNo">848</span><a name="line.848"></a>
-<span class="sourceLineNo">849</span>    private Entry getProcedure(final int slotIndex, final long procId) {<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      Entry entry = procedureMap[slotIndex];<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      while (entry != null) {<a name="line.851"></a>
-<span class="sourceLineNo">852</span>        if (procId == entry.getProcId()) {<a name="line.852"></a>
-<span class="sourceLineNo">853</span>          return entry;<a name="line.853"></a>
-<span class="sourceLineNo">854</span>        }<a name="line.854"></a>
-<span class="sourceLineNo">855</span>        entry = entry.hashNext;<a name="line.855"></a>
-<span class="sourceLineNo">856</span>      }<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      return null;<a name="line.857"></a>
-<span class="sourceLineNo">858</span>    }<a name="line.858"></a>
-<span class="sourceLineNo">859</span><a name="line.859"></a>
-<span class="sourceLineNo">860</span>    private int getMapSlot(final long procId) {<a name="line.860"></a>
-<span class="sourceLineNo">861</span>      return (int)(Procedure.getProcIdHashCode(procId) % procedureMap.length);<a name="line.861"></a>
-<span class="sourceLineNo">862</span>    }<a name="line.862"></a>
-<span class="sourceLineNo">863</span>  }<a name="line.863"></a>
-<span class="sourceLineNo">864</span>}<a name="line.864"></a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
-</html>


[41/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html
deleted file mode 100644
index 618566c..0000000
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html
+++ /dev/null
@@ -1,826 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>ProcedureStoreTracker.BitSetNode (Apache HBase 3.0.0-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ProcedureStoreTracker.BitSetNode (Apache HBase 3.0.0-SNAPSHOT API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-var methods = {"i0":9,"i1":9,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10};
-var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/ProcedureStoreTracker.BitSetNode.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" target="_top">Frames</a></li>
-<li><a href="ProcedureStoreTracker.BitSetNode.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">org.apache.hadoop.hbase.procedure2.store</div>
-<h2 title="Class ProcedureStoreTracker.BitSetNode" class="title">Class ProcedureStoreTracker.BitSetNode</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
-<li>
-<ul class="inheritance">
-<li>org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<dl>
-<dt>Enclosing class:</dt>
-<dd><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a></dd>
-</dl>
-<hr>
-<br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.69">ProcedureStoreTracker.BitSetNode</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">A bitmap which can grow/merge with other <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store"><code>ProcedureStoreTracker.BitSetNode</code></a> (if certain conditions are met).
- Boundaries of bitmap are aligned to multiples of <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#BITS_PER_WORD"><code>BITS_PER_WORD</code></a>. So the
- range of a <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store"><code>ProcedureStoreTracker.BitSetNode</code></a> is from [x * K, y * K) where x and y are integers, y > x and K
- is BITS_PER_WORD.</div>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#ADDRESS_BITS_PER_WORD">ADDRESS_BITS_PER_WORD</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#BITS_PER_WORD">BITS_PER_WORD</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private long[]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#deleted">deleted</a></span></code>
-<div class="block">Keeps track of procedure ids which belong to this bitmap's range and have been deleted.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#MAX_NODE_SIZE">MAX_NODE_SIZE</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#partial">partial</a></span></code>
-<div class="block">Mimics <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#partial"><code>ProcedureStoreTracker.partial</code></a>.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#start">start</a></span></code>
-<div class="block">Offset of bitmap i.e.</div>
-</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private long[]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#updated">updated</a></span></code>
-<div class="block">Set of procedures which have been updated since last <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#resetUpdates--"><code>resetUpdates()</code></a>.</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#WORD_MASK">WORD_MASK</a></span></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier</th>
-<th class="colLast" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#BitSetNode-long-boolean-">BitSetNode</a></span>(long&nbsp;procId,
-          boolean&nbsp;partial)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>protected </code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#BitSetNode-long-long:A-long:A-">BitSetNode</a></span>(long&nbsp;start,
-          long[]&nbsp;updated,
-          long[]&nbsp;deleted)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#BitSetNode-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode-">BitSetNode</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode&nbsp;data)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#BitSetNode-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-boolean-">BitSetNode</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;other,
-          boolean&nbsp;resetDelete)</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code>private static long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#alignDown-long-">alignDown</a></span>(long&nbsp;x)</code>&nbsp;</td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>private static long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#alignUp-long-">alignUp</a></span>(long&nbsp;x)</code>&nbsp;</td>
-</tr>
-<tr id="i2" class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#canGrow-long-">canGrow</a></span>(long&nbsp;procId)</code>&nbsp;</td>
-</tr>
-<tr id="i3" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#canMerge-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-">canMerge</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;rightNode)</code>&nbsp;</td>
-</tr>
-<tr id="i4" class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#contains-long-">contains</a></span>(long&nbsp;procId)</code>&nbsp;</td>
-</tr>
-<tr id="i5" class="rowColor">
-<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#convert--">convert</a></span>()</code>
-<div class="block">Convert to
- org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode
- protobuf.</div>
-</td>
-</tr>
-<tr id="i6" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#delete-long-">delete</a></span>(long&nbsp;procId)</code>&nbsp;</td>
-</tr>
-<tr id="i7" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#dump--">dump</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i8" class="altColor">
-<td class="colFirst"><code>long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#getActiveMaxProcId--">getActiveMaxProcId</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i9" class="rowColor">
-<td class="colFirst"><code>long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#getActiveMinProcId--">getActiveMinProcId</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i10" class="altColor">
-<td class="colFirst"><code>private int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#getBitmapIndex-long-">getBitmapIndex</a></span>(long&nbsp;procId)</code>&nbsp;</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/procedure2/store/ProcedureStoreTracker.BitSetNode.html#getEnd--">getEnd</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i12" class="altColor">
-<td class="colFirst"><code>long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#getStart--">getStart</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i13" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#grow-long-">grow</a></span>(long&nbsp;procId)</code>&nbsp;</td>
-</tr>
-<tr id="i14" class="altColor">
-<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.DeleteState</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#isDeleted-long-">isDeleted</a></span>(long&nbsp;procId)</code>&nbsp;</td>
-</tr>
-<tr id="i15" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#isEmpty--">isEmpty</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i16" class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#isUpdated--">isUpdated</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i17" class="rowColor">
-<td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#isUpdated-long-">isUpdated</a></span>(long&nbsp;procId)</code>&nbsp;</td>
-</tr>
-<tr id="i18" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#merge-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-">merge</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;rightNode)</code>&nbsp;</td>
-</tr>
-<tr id="i19" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#resetUpdates--">resetUpdates</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i20" 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/procedure2/store/ProcedureStoreTracker.BitSetNode.html#toString--">toString</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i21" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#undeleteAll--">undeleteAll</a></span>()</code>
-<div class="block">Clears the <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#deleted"><code>deleted</code></a> bitmaps.</div>
-</td>
-</tr>
-<tr id="i22" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#unsetPartialFlag--">unsetPartialFlag</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i23" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#update-long-">update</a></span>(long&nbsp;procId)</code>&nbsp;</td>
-</tr>
-<tr id="i24" class="altColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#updateState-long-boolean-">updateState</a></span>(long&nbsp;procId,
-           boolean&nbsp;isDeleted)</code>&nbsp;</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
-<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.detail">
-<!--   -->
-</a>
-<h3>Field Detail</h3>
-<a name="WORD_MASK">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>WORD_MASK</h4>
-<pre>private static final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.70">WORD_MASK</a></pre>
-<dl>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode.WORD_MASK">Constant Field Values</a></dd>
-</dl>
-</li>
-</ul>
-<a name="ADDRESS_BITS_PER_WORD">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>ADDRESS_BITS_PER_WORD</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.71">ADDRESS_BITS_PER_WORD</a></pre>
-<dl>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode.ADDRESS_BITS_PER_WORD">Constant Field Values</a></dd>
-</dl>
-</li>
-</ul>
-<a name="BITS_PER_WORD">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>BITS_PER_WORD</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.72">BITS_PER_WORD</a></pre>
-<dl>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode.BITS_PER_WORD">Constant Field Values</a></dd>
-</dl>
-</li>
-</ul>
-<a name="MAX_NODE_SIZE">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>MAX_NODE_SIZE</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.73">MAX_NODE_SIZE</a></pre>
-<dl>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode.MAX_NODE_SIZE">Constant Field Values</a></dd>
-</dl>
-</li>
-</ul>
-<a name="partial">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>partial</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.78">partial</a></pre>
-<div class="block">Mimics <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#partial"><code>ProcedureStoreTracker.partial</code></a>.</div>
-</li>
-</ul>
-<a name="updated">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>updated</h4>
-<pre>private&nbsp;long[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.93">updated</a></pre>
-<div class="block">Set of procedures which have been updated since last <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#resetUpdates--"><code>resetUpdates()</code></a>.
- Useful to track procedures which have been updated since last WAL write.</div>
-</li>
-</ul>
-<a name="deleted">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>deleted</h4>
-<pre>private&nbsp;long[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.98">deleted</a></pre>
-<div class="block">Keeps track of procedure ids which belong to this bitmap's range and have been deleted.
- This represents global state since it's not reset on WAL rolls.</div>
-</li>
-</ul>
-<a name="start">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>start</h4>
-<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.102">start</a></pre>
-<div class="block">Offset of bitmap i.e. procedure id corresponding to first bit.</div>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="BitSetNode-long-boolean-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>BitSetNode</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.125">BitSetNode</a>(long&nbsp;procId,
-                  boolean&nbsp;partial)</pre>
-</li>
-</ul>
-<a name="BitSetNode-long-long:A-long:A-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>BitSetNode</h4>
-<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.140">BitSetNode</a>(long&nbsp;start,
-                     long[]&nbsp;updated,
-                     long[]&nbsp;deleted)</pre>
-</li>
-</ul>
-<a name="BitSetNode-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>BitSetNode</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.147">BitSetNode</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode&nbsp;data)</pre>
-</li>
-</ul>
-<a name="BitSetNode-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-boolean-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>BitSetNode</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.159">BitSetNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;other,
-                  boolean&nbsp;resetDelete)</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!--   -->
-</a>
-<h3>Method Detail</h3>
-<a name="dump--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>dump</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.104">dump</a>()</pre>
-</li>
-</ul>
-<a name="update-long-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>update</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.173">update</a>(long&nbsp;procId)</pre>
-</li>
-</ul>
-<a name="delete-long-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>delete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.177">delete</a>(long&nbsp;procId)</pre>
-</li>
-</ul>
-<a name="getStart--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getStart</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.181">getStart</a>()</pre>
-</li>
-</ul>
-<a name="getEnd--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getEnd</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.185">getEnd</a>()</pre>
-</li>
-</ul>
-<a name="contains-long-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>contains</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.189">contains</a>(long&nbsp;procId)</pre>
-</li>
-</ul>
-<a name="isDeleted-long-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>isDeleted</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.DeleteState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.193">isDeleted</a>(long&nbsp;procId)</pre>
-</li>
-</ul>
-<a name="isUpdated-long-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>isUpdated</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.202">isUpdated</a>(long&nbsp;procId)</pre>
-</li>
-</ul>
-<a name="isUpdated--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>isUpdated</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.211">isUpdated</a>()</pre>
-</li>
-</ul>
-<a name="isEmpty--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>isEmpty</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.224">isEmpty</a>()</pre>
-<dl>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>true, if there are no active procedures in this BitSetNode, else false.</dd>
-</dl>
-</li>
-</ul>
-<a name="resetUpdates--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>resetUpdates</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.234">resetUpdates</a>()</pre>
-</li>
-</ul>
-<a name="undeleteAll--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>undeleteAll</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.243">undeleteAll</a>()</pre>
-<div class="block">Clears the <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#deleted"><code>deleted</code></a> bitmaps.</div>
-</li>
-</ul>
-<a name="unsetPartialFlag--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>unsetPartialFlag</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.249">unsetPartialFlag</a>()</pre>
-</li>
-</ul>
-<a name="convert--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>convert</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.264">convert</a>()</pre>
-<div class="block">Convert to
- org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode
- protobuf.</div>
-</li>
-</ul>
-<a name="canGrow-long-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>canGrow</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.278">canGrow</a>(long&nbsp;procId)</pre>
-</li>
-</ul>
-<a name="canMerge-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>canMerge</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.282">canMerge</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;rightNode)</pre>
-</li>
-</ul>
-<a name="grow-long-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>grow</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.288">grow</a>(long&nbsp;procId)</pre>
-</li>
-</ul>
-<a name="merge-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>merge</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.322">merge</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;rightNode)</pre>
-</li>
-</ul>
-<a name="toString--">
-<!--   -->
-</a>
-<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/store/ProcedureStoreTracker.BitSetNode.html#line.347">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/Object.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/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
-</dl>
-</li>
-</ul>
-<a name="getActiveMinProcId--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getActiveMinProcId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.354">getActiveMinProcId</a>()</pre>
-</li>
-</ul>
-<a name="getActiveMaxProcId--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getActiveMaxProcId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.374">getActiveMaxProcId</a>()</pre>
-</li>
-</ul>
-<a name="getBitmapIndex-long-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getBitmapIndex</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.396">getBitmapIndex</a>(long&nbsp;procId)</pre>
-</li>
-</ul>
-<a name="updateState-long-boolean-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>updateState</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.400">updateState</a>(long&nbsp;procId,
-                         boolean&nbsp;isDeleted)</pre>
-</li>
-</ul>
-<a name="alignUp-long-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>alignUp</h4>
-<pre>private static&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.420">alignUp</a>(long&nbsp;x)</pre>
-<dl>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>upper boundary (aligned to multiple of BITS_PER_WORD) of bitmap range x belongs to.</dd>
-</dl>
-</li>
-</ul>
-<a name="alignDown-long-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>alignDown</h4>
-<pre>private static&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#line.427">alignDown</a>(long&nbsp;x)</pre>
-<dl>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>lower boundary (aligned to multiple of BITS_PER_WORD) of bitmap range x belongs to.</dd>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="class-use/ProcedureStoreTracker.BitSetNode.html">Use</a></li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" target="_top">Frames</a></li>
-<li><a href="ProcedureStoreTracker.BitSetNode.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html
index d824c95..12c0a48 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li>Next&nbsp;Class</li>
 </ul>
 <ul class="navList">
@@ -312,7 +312,7 @@ not permitted.)</div>
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li>Next&nbsp;Class</li>
 </ul>
 <ul class="navList">


[21/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html
deleted file mode 100644
index 6253d3f..0000000
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html
+++ /dev/null
@@ -1,936 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<title>Source code</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../../stylesheet.css" title="Style">
-</head>
-<body>
-<div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
-<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
-<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
-<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
-<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
-<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
-<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
-<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
-<span class="sourceLineNo">009</span> *<a name="line.9"></a>
-<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
-<span class="sourceLineNo">011</span> *<a name="line.11"></a>
-<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
-<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
-<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
-<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
-<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
-<span class="sourceLineNo">017</span> */<a name="line.17"></a>
-<span class="sourceLineNo">018</span><a name="line.18"></a>
-<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.procedure2.store.wal;<a name="line.19"></a>
-<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hbase.thirdparty.com.google.protobuf.InvalidProtocolBufferException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span><a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.slf4j.Logger;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.slf4j.LoggerFactory;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureIterator;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry;<a name="line.35"></a>
-<span class="sourceLineNo">036</span><a name="line.36"></a>
-<span class="sourceLineNo">037</span>/**<a name="line.37"></a>
-<span class="sourceLineNo">038</span> * Helper class that loads the procedures stored in a WAL<a name="line.38"></a>
-<span class="sourceLineNo">039</span> */<a name="line.39"></a>
-<span class="sourceLineNo">040</span>@InterfaceAudience.Private<a name="line.40"></a>
-<span class="sourceLineNo">041</span>@InterfaceStability.Evolving<a name="line.41"></a>
-<span class="sourceLineNo">042</span>public class ProcedureWALFormatReader {<a name="line.42"></a>
-<span class="sourceLineNo">043</span>  private static final Logger LOG = LoggerFactory.getLogger(ProcedureWALFormatReader.class);<a name="line.43"></a>
-<span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>  // ==============================================================================================<a name="line.45"></a>
-<span class="sourceLineNo">046</span>  //  We read the WALs in reverse order from the newest to the oldest.<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  //  We have different entry types:<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  //   - INIT: Procedure submitted by the user (also known as 'root procedure')<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  //   - INSERT: Children added to the procedure &lt;parentId&gt;:[&lt;childId&gt;, ...]<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  //   - UPDATE: The specified procedure was updated<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  //   - DELETE: The procedure was removed (finished/rolledback and result TTL expired)<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  //<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  // In the WAL we can find multiple times the same procedure as UPDATE or INSERT.<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  // We read the WAL from top to bottom, so every time we find an entry of the<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  // same procedure, that will be the "latest" update (Caveat: with multiple threads writing<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  // the store, this assumption does not hold).<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  //<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  // We keep two in-memory maps:<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  //  - localProcedureMap: is the map containing the entries in the WAL we are processing<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  //  - procedureMap: is the map containing all the procedures we found up to the WAL in process.<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  // localProcedureMap is merged with the procedureMap once we reach the WAL EOF.<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  //<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  // Since we are reading the WALs in reverse order (newest to oldest),<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  // if we find an entry related to a procedure we already have in 'procedureMap' we can discard it.<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  //<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  // The WAL is append-only so the last procedure in the WAL is the one that<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  // was in execution at the time we crashed/closed the server.<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  // Given that, the procedure replay order can be inferred by the WAL order.<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  //<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  // Example:<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  //    WAL-2: [A, B, A, C, D]<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  //    WAL-1: [F, G, A, F, B]<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  //    Replay-Order: [D, C, A, B, F, G]<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  //<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  // The "localProcedureMap" keeps a "replayOrder" list. Every time we add the<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  // record to the map that record is moved to the head of the "replayOrder" list.<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  // Using the example above:<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  //    WAL-2 localProcedureMap.replayOrder is [D, C, A, B]<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  //    WAL-1 localProcedureMap.replayOrder is [F, G]<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  //<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  // Each time we reach the WAL-EOF, the "replayOrder" list is merged/appended in 'procedureMap'<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  // so using the example above we end up with: [D, C, A, B] + [F, G] as replay order.<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  //<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  //  Fast Start: INIT/INSERT record and StackIDs<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  // ---------------------------------------------<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  // We have two special records, INIT and INSERT, that track the first time<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  // the procedure was added to the WAL. We can use this information to be able<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  // to start procedures before reaching the end of the WAL, or before reading all WALs.<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  // But in some cases, the WAL with that record can be already gone.<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  // As an alternative, we can use the stackIds on each procedure,<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  // to identify when a procedure is ready to start.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  // If there are gaps in the sum of the stackIds we need to read more WALs.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  //<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  // Example (all procs child of A):<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  //   WAL-2: [A, B]                   A stackIds = [0, 4], B stackIds = [1, 5]<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  //   WAL-1: [A, B, C, D]<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  //<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  // In the case above we need to read one more WAL to be able to consider<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  // the root procedure A and all children as ready.<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  // ==============================================================================================<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private final WalProcedureMap localProcedureMap = new WalProcedureMap(1024);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  private final WalProcedureMap procedureMap = new WalProcedureMap(1024);<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  private final ProcedureWALFormat.Loader loader;<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>   * Global tracker that will be used by the WALProcedureStore after load.<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   * If the last WAL was closed cleanly we already have a full tracker ready to be used.<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * If the last WAL was truncated (e.g. master killed) the tracker will be empty<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * and the 'partial' flag will be set. In this case, on WAL replay we are going<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * to rebuild the tracker.<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   */<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private final ProcedureStoreTracker tracker;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  // TODO: private final boolean hasFastStartSupport;<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>   * If tracker for a log file is partial (see {@link ProcedureStoreTracker#partial}), we<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * re-build the list of procedures updated in that WAL because we need it for log cleaning<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * purposes. If all procedures updated in a WAL are found to be obsolete, it can be safely deleted.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * (see {@link WALProcedureStore#removeInactiveLogs()}).<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * However, we don't need deleted part of a WAL's tracker for this purpose, so we don't bother<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   * re-building it.<a name="line.122"></a>
-<span class="sourceLineNo">123</span>   */<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  private ProcedureStoreTracker localTracker;<a name="line.124"></a>
-<span class="sourceLineNo">125</span><a name="line.125"></a>
-<span class="sourceLineNo">126</span>  // private long compactionLogId;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>  private long maxProcId = 0;<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>  public ProcedureWALFormatReader(final ProcedureStoreTracker tracker,<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      ProcedureWALFormat.Loader loader) {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    this.tracker = tracker;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    this.loader = loader;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    // we support fast-start only if we have a clean shutdown.<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    // this.hasFastStartSupport = !tracker.isEmpty();<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>  public void read(final ProcedureWALFile log) throws IOException {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    localTracker = log.getTracker().isPartial() ? log.getTracker() : null;<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    if (localTracker != null) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      LOG.info("Rebuilding tracker for " + log);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>    long count = 0;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    FSDataInputStream stream = log.getStream();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    try {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      boolean hasMore = true;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      while (hasMore) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        ProcedureWALEntry entry = ProcedureWALFormat.readEntry(stream);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        if (entry == null) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>          LOG.warn("Nothing left to decode. Exiting with missing EOF, log=" + log);<a name="line.150"></a>
-<span class="sourceLineNo">151</span>          break;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>        }<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        count++;<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        switch (entry.getType()) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>          case PROCEDURE_WAL_INIT:<a name="line.155"></a>
-<span class="sourceLineNo">156</span>            readInitEntry(entry);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>            break;<a name="line.157"></a>
-<span class="sourceLineNo">158</span>          case PROCEDURE_WAL_INSERT:<a name="line.158"></a>
-<span class="sourceLineNo">159</span>            readInsertEntry(entry);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>            break;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>          case PROCEDURE_WAL_UPDATE:<a name="line.161"></a>
-<span class="sourceLineNo">162</span>          case PROCEDURE_WAL_COMPACT:<a name="line.162"></a>
-<span class="sourceLineNo">163</span>            readUpdateEntry(entry);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>            break;<a name="line.164"></a>
-<span class="sourceLineNo">165</span>          case PROCEDURE_WAL_DELETE:<a name="line.165"></a>
-<span class="sourceLineNo">166</span>            readDeleteEntry(entry);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>            break;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>          case PROCEDURE_WAL_EOF:<a name="line.168"></a>
-<span class="sourceLineNo">169</span>            hasMore = false;<a name="line.169"></a>
-<span class="sourceLineNo">170</span>            break;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>          default:<a name="line.171"></a>
-<span class="sourceLineNo">172</span>            throw new CorruptedWALProcedureStoreException("Invalid entry: " + entry);<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>      LOG.info("Read {} entries in {}", count, log);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    } catch (InvalidProtocolBufferException e) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      LOG.error("While reading entry #{} in {}", count, log, e);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      loader.markCorruptedWAL(log, e);<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>    if (localTracker != null) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      localTracker.setPartialFlag(false);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    if (!localProcedureMap.isEmpty()) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      log.setProcIds(localProcedureMap.getMinProcId(), localProcedureMap.getMaxProcId());<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      procedureMap.mergeTail(localProcedureMap);<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>      //if (hasFastStartSupport) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      // TODO: Some procedure may be already runnables (see readInitEntry())<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      //       (we can also check the "update map" in the log trackers)<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      // --------------------------------------------------<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      //EntryIterator iter = procedureMap.fetchReady();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      //if (iter != null) loader.load(iter);<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>    }<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>  public void finish() throws IOException {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    // notify the loader about the max proc ID<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    loader.setMaxProcId(maxProcId);<a name="line.201"></a>
-<span class="sourceLineNo">202</span><a name="line.202"></a>
-<span class="sourceLineNo">203</span>    // fetch the procedure ready to run.<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    ProcedureIterator procIter = procedureMap.fetchReady();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    if (procIter != null) loader.load(procIter);<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>    // remaining procedures have missing link or dependencies<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    // consider them as corrupted, manual fix is probably required.<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    procIter = procedureMap.fetchAll();<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    if (procIter != null) loader.handleCorrupted(procIter);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>  private void loadProcedure(final ProcedureWALEntry entry, final ProcedureProtos.Procedure proc) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    maxProcId = Math.max(maxProcId, proc.getProcId());<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    if (isRequired(proc.getProcId())) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      if (LOG.isTraceEnabled()) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        LOG.trace("Read " + entry.getType() + " entry " + proc.getProcId());<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      localProcedureMap.add(proc);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      if (tracker.isPartial()) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        tracker.insert(proc.getProcId());<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>    if (localTracker != null) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      localTracker.insert(proc.getProcId());<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  }<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>  private void readInitEntry(final ProcedureWALEntry entry)<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  throws IOException {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    assert entry.getProcedureCount() == 1 : "Expected only one procedure";<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    loadProcedure(entry, entry.getProcedure(0));<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  }<a name="line.233"></a>
-<span class="sourceLineNo">234</span><a name="line.234"></a>
-<span class="sourceLineNo">235</span>  private void readInsertEntry(final ProcedureWALEntry entry) throws IOException {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    assert entry.getProcedureCount() &gt;= 1 : "Expected one or more procedures";<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    loadProcedure(entry, entry.getProcedure(0));<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    for (int i = 1; i &lt; entry.getProcedureCount(); ++i) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      loadProcedure(entry, entry.getProcedure(i));<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><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  private void readUpdateEntry(final ProcedureWALEntry entry) throws IOException {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    assert entry.getProcedureCount() == 1 : "Expected only one procedure";<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    loadProcedure(entry, entry.getProcedure(0));<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>  private void readDeleteEntry(final ProcedureWALEntry entry) throws IOException {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    assert entry.hasProcId() : "expected ProcID";<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>    if (entry.getChildIdCount() &gt; 0) {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      assert entry.getProcedureCount() == 1 : "Expected only one procedure";<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>      // update the parent procedure<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      loadProcedure(entry, entry.getProcedure(0));<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>      // remove the child procedures of entry.getProcId()<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      for (int i = 0, count = entry.getChildIdCount(); i &lt; count; ++i) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        deleteEntry(entry.getChildId(i));<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      }<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    } else {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      assert entry.getProcedureCount() == 0 : "Expected no procedures";<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>      // delete the procedure<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      deleteEntry(entry.getProcId());<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    }<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  private void deleteEntry(final long procId) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    if (LOG.isTraceEnabled()) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      LOG.trace("delete entry " + procId);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    maxProcId = Math.max(maxProcId, procId);<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    localProcedureMap.remove(procId);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    assert !procedureMap.contains(procId);<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    if (tracker.isPartial()) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      tracker.setDeleted(procId, true);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    }<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    if (localTracker != null) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      // In case there is only delete entry for this procedure in current log.<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      localTracker.setDeleted(procId, 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><a name="line.284"></a>
-<span class="sourceLineNo">285</span>  private boolean isDeleted(final long procId) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    return tracker.isDeleted(procId) == ProcedureStoreTracker.DeleteState.YES;<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>  private boolean isRequired(final long procId) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    return !isDeleted(procId) &amp;&amp; !procedureMap.contains(procId);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  }<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>  // ==========================================================================<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  //  We keep an in-memory map of the procedures sorted by replay order.<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  //  (see the details in the beginning of the file)<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  //                      _______________________________________________<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  //      procedureMap = | A |   | E |   | C |   |   |   |   | G |   |   |<a name="line.297"></a>
-<span class="sourceLineNo">298</span>  //                       D               B<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  //      replayOrderHead = C &lt;-&gt; B &lt;-&gt; E &lt;-&gt; D &lt;-&gt; A &lt;-&gt; G<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  //<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  //  We also have a lazy grouping by "root procedure", and a list of<a name="line.301"></a>
-<span class="sourceLineNo">302</span>  //  unlinked procedures. If after reading all the WALs we have unlinked<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  //  procedures it means that we had a missing WAL or a corruption.<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  //      rootHead = A &lt;-&gt; D &lt;-&gt; G<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  //                 B     E<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  //                 C<a name="line.306"></a>
-<span class="sourceLineNo">307</span>  //      unlinkFromLinkList = None<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  // ==========================================================================<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  private static class Entry {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    // For bucketed linked lists in hash-table.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    protected Entry hashNext;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    // child head<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    protected Entry childHead;<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    // double-link for rootHead or childHead<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    protected Entry linkNext;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    protected Entry linkPrev;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    // replay double-linked-list<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    protected Entry replayNext;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    protected Entry replayPrev;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    // procedure-infos<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    protected Procedure procedure;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    protected ProcedureProtos.Procedure proto;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    protected boolean ready = false;<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>    public Entry(Entry hashNext) {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      this.hashNext = hashNext;<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>    public long getProcId() {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      return proto.getProcId();<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 long getParentId() {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      return proto.getParentId();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>    public boolean hasParent() {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      return proto.hasParentId();<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>    public boolean isReady() {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      return ready;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    }<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span>    public boolean isFinished() {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      if (!hasParent()) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        // we only consider 'root' procedures. because for the user 'finished'<a name="line.347"></a>
-<span class="sourceLineNo">348</span>        // means when everything up to the 'root' is finished.<a name="line.348"></a>
-<span class="sourceLineNo">349</span>        switch (proto.getState()) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>          case ROLLEDBACK:<a name="line.350"></a>
-<span class="sourceLineNo">351</span>          case SUCCESS:<a name="line.351"></a>
-<span class="sourceLineNo">352</span>            return true;<a name="line.352"></a>
-<span class="sourceLineNo">353</span>          default:<a name="line.353"></a>
-<span class="sourceLineNo">354</span>            break;<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>      return false;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>    public Procedure convert() throws IOException {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      if (procedure == null) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        procedure = ProcedureUtil.convertToProcedure(proto);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      }<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      return procedure;<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>    @Override<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    public String toString() {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      final StringBuilder sb = new StringBuilder();<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      sb.append("Entry(");<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      sb.append(getProcId());<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      sb.append(", parentId=");<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      sb.append(getParentId());<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      sb.append(", class=");<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      sb.append(proto.getClassName());<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      sb.append(")");<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      return sb.toString();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>  private static class EntryIterator implements ProcedureIterator {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    private final Entry replayHead;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    private Entry current;<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>    public EntryIterator(Entry replayHead) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      this.replayHead = replayHead;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      this.current = replayHead;<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>    @Override<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    public void reset() {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      this.current = replayHead;<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>    @Override<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    public boolean hasNext() {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      return current != null;<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>    @Override<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    public boolean isNextFinished() {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      return current != null &amp;&amp; current.isFinished();<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>    @Override<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    public void skipNext() {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      current = current.replayNext;<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>    @Override<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    public Procedure next() throws IOException {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      try {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        return current.convert();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      } finally {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        current = current.replayNext;<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      }<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  }<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span>  private static class WalProcedureMap {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    // procedure hash table<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    private Entry[] procedureMap;<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>    // replay-order double-linked-list<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    private Entry replayOrderHead;<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    private Entry replayOrderTail;<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>    // root linked-list<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    private Entry rootHead;<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>    // pending unlinked children (root not present yet)<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    private Entry childUnlinkedHead;<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    // Track ProcId range<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    private long minProcId = Long.MAX_VALUE;<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    private long maxProcId = Long.MIN_VALUE;<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    public WalProcedureMap(int size) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      procedureMap = new Entry[size];<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      replayOrderHead = null;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      replayOrderTail = null;<a name="line.441"></a>
-<span class="sourceLineNo">442</span>      rootHead = null;<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      childUnlinkedHead = null;<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 void add(ProcedureProtos.Procedure procProto) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      trackProcIds(procProto.getProcId());<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      Entry entry = addToMap(procProto.getProcId(), procProto.hasParentId());<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      boolean newEntry = entry.proto == null;<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      // We have seen procedure WALs where the entries are out of order; see HBASE-18152.<a name="line.450"></a>
-<span class="sourceLineNo">451</span>      // To compensate, only replace the Entry procedure if for sure this new procedure<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      // is indeed an entry that came later. TODO: Fix the writing of procedure info so<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      // it does not violate basic expectation, that WALs contain procedure changes going<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      // from start to finish in sequence.<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      if (newEntry || isIncreasing(entry.proto, procProto)) {<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        entry.proto = procProto;<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      addToReplayList(entry);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      if(newEntry) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>        if (procProto.hasParentId()) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          childUnlinkedHead = addToLinkList(entry, childUnlinkedHead);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        } else {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          rootHead = addToLinkList(entry, rootHead);<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><a name="line.467"></a>
-<span class="sourceLineNo">468</span>    /**<a name="line.468"></a>
-<span class="sourceLineNo">469</span>     * @return True if this new procedure is 'richer' than the current one else<a name="line.469"></a>
-<span class="sourceLineNo">470</span>     * false and we log this incidence where it appears that the WAL has older entries<a name="line.470"></a>
-<span class="sourceLineNo">471</span>     * appended after newer ones. See HBASE-18152.<a name="line.471"></a>
-<span class="sourceLineNo">472</span>     */<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    private static boolean isIncreasing(ProcedureProtos.Procedure current,<a name="line.473"></a>
-<span class="sourceLineNo">474</span>        ProcedureProtos.Procedure candidate) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      // Check that the procedures we see are 'increasing'. We used to compare<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      // procedure id first and then update time but it can legitimately go backwards if the<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      // procedure is failed or rolled back so that was unreliable. Was going to compare<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      // state but lets see if comparing update time enough (unfortunately this issue only<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      // seen under load...)<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      boolean increasing = current.getLastUpdate() &lt;= candidate.getLastUpdate();<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      if (!increasing) {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        LOG.warn("NOT INCREASING! current=" + current + ", candidate=" + candidate);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      }<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      return increasing;<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>    public boolean remove(long procId) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      trackProcIds(procId);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      Entry entry = removeFromMap(procId);<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      if (entry != null) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>        unlinkFromReplayList(entry);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>        unlinkFromLinkList(entry);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        return true;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      }<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      return false;<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    }<a name="line.496"></a>
-<span class="sourceLineNo">497</span><a name="line.497"></a>
-<span class="sourceLineNo">498</span>    private void trackProcIds(long procId) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      minProcId = Math.min(minProcId, procId);<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      maxProcId = Math.max(maxProcId, procId);<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    }<a name="line.501"></a>
-<span class="sourceLineNo">502</span><a name="line.502"></a>
-<span class="sourceLineNo">503</span>    public long getMinProcId() {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      return minProcId;<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>    public long getMaxProcId() {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      return maxProcId;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>    public boolean contains(long procId) {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      return getProcedure(procId) != null;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    }<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>    public boolean isEmpty() {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      return replayOrderHead == null;<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span>    public void clear() {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>        procedureMap[i] = null;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      }<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      replayOrderHead = null;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      replayOrderTail = null;<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      rootHead = null;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      childUnlinkedHead = null;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      minProcId = Long.MAX_VALUE;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      maxProcId = Long.MIN_VALUE;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>    /*<a name="line.531"></a>
-<span class="sourceLineNo">532</span>     * Merges two WalProcedureMap,<a name="line.532"></a>
-<span class="sourceLineNo">533</span>     * the target is the "global" map, the source is the "local" map.<a name="line.533"></a>
-<span class="sourceLineNo">534</span>     *  - The entries in the hashtables are guaranteed to be unique.<a name="line.534"></a>
-<span class="sourceLineNo">535</span>     *    On replay we don't load procedures that already exist in the "global"<a name="line.535"></a>
-<span class="sourceLineNo">536</span>     *    map (the one we are merging the "local" in to).<a name="line.536"></a>
-<span class="sourceLineNo">537</span>     *  - The replayOrderList of the "local" nao will be appended to the "global"<a name="line.537"></a>
-<span class="sourceLineNo">538</span>     *    map replay list.<a name="line.538"></a>
-<span class="sourceLineNo">539</span>     *  - The "local" map will be cleared at the end of the operation.<a name="line.539"></a>
-<span class="sourceLineNo">540</span>     */<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    public void mergeTail(WalProcedureMap other) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      for (Entry p = other.replayOrderHead; p != null; p = p.replayNext) {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>        int slotIndex = getMapSlot(p.getProcId());<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        p.hashNext = procedureMap[slotIndex];<a name="line.544"></a>
-<span class="sourceLineNo">545</span>        procedureMap[slotIndex] = p;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>      if (replayOrderHead == null) {<a name="line.548"></a>
-<span class="sourceLineNo">549</span>        replayOrderHead = other.replayOrderHead;<a name="line.549"></a>
-<span class="sourceLineNo">550</span>        replayOrderTail = other.replayOrderTail;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>        rootHead = other.rootHead;<a name="line.551"></a>
-<span class="sourceLineNo">552</span>        childUnlinkedHead = other.childUnlinkedHead;<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      } else {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>        // append replay list<a name="line.554"></a>
-<span class="sourceLineNo">555</span>        assert replayOrderTail.replayNext == null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>        assert other.replayOrderHead.replayPrev == null;<a name="line.556"></a>
-<span class="sourceLineNo">557</span>        replayOrderTail.replayNext = other.replayOrderHead;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>        other.replayOrderHead.replayPrev = replayOrderTail;<a name="line.558"></a>
-<span class="sourceLineNo">559</span>        replayOrderTail = other.replayOrderTail;<a name="line.559"></a>
-<span class="sourceLineNo">560</span><a name="line.560"></a>
-<span class="sourceLineNo">561</span>        // merge rootHead<a name="line.561"></a>
-<span class="sourceLineNo">562</span>        if (rootHead == null) {<a name="line.562"></a>
-<span class="sourceLineNo">563</span>          rootHead = other.rootHead;<a name="line.563"></a>
-<span class="sourceLineNo">564</span>        } else if (other.rootHead != null) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>          Entry otherTail = findLinkListTail(other.rootHead);<a name="line.565"></a>
-<span class="sourceLineNo">566</span>          otherTail.linkNext = rootHead;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>          rootHead.linkPrev = otherTail;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>          rootHead = other.rootHead;<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>        // merge childUnlinkedHead<a name="line.571"></a>
-<span class="sourceLineNo">572</span>        if (childUnlinkedHead == null) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>          childUnlinkedHead = other.childUnlinkedHead;<a name="line.573"></a>
-<span class="sourceLineNo">574</span>        } else if (other.childUnlinkedHead != null) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>          Entry otherTail = findLinkListTail(other.childUnlinkedHead);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>          otherTail.linkNext = childUnlinkedHead;<a name="line.576"></a>
-<span class="sourceLineNo">577</span>          childUnlinkedHead.linkPrev = otherTail;<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          childUnlinkedHead = other.childUnlinkedHead;<a name="line.578"></a>
-<span class="sourceLineNo">579</span>        }<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      }<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      maxProcId = Math.max(maxProcId, other.maxProcId);<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      minProcId = Math.max(minProcId, other.minProcId);<a name="line.582"></a>
-<span class="sourceLineNo">583</span><a name="line.583"></a>
-<span class="sourceLineNo">584</span>      other.clear();<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    }<a name="line.585"></a>
-<span class="sourceLineNo">586</span><a name="line.586"></a>
-<span class="sourceLineNo">587</span>    /*<a name="line.587"></a>
-<span class="sourceLineNo">588</span>     * Returns an EntryIterator with the list of procedures ready<a name="line.588"></a>
-<span class="sourceLineNo">589</span>     * to be added to the executor.<a name="line.589"></a>
-<span class="sourceLineNo">590</span>     * A Procedure is ready if its children and parent are ready.<a name="line.590"></a>
-<span class="sourceLineNo">591</span>     */<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    public EntryIterator fetchReady() {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      buildGraph();<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>      Entry readyHead = null;<a name="line.595"></a>
-<span class="sourceLineNo">596</span>      Entry readyTail = null;<a name="line.596"></a>
-<span class="sourceLineNo">597</span>      Entry p = replayOrderHead;<a name="line.597"></a>
-<span class="sourceLineNo">598</span>      while (p != null) {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>        Entry next = p.replayNext;<a name="line.599"></a>
-<span class="sourceLineNo">600</span>        if (p.isReady()) {<a name="line.600"></a>
-<span class="sourceLineNo">601</span>          unlinkFromReplayList(p);<a name="line.601"></a>
-<span class="sourceLineNo">602</span>          if (readyTail != null) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>            readyTail.replayNext = p;<a name="line.603"></a>
-<span class="sourceLineNo">604</span>            p.replayPrev = readyTail;<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          } else {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>            p.replayPrev = null;<a name="line.606"></a>
-<span class="sourceLineNo">607</span>            readyHead = p;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>          }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>          readyTail = p;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          p.replayNext = null;<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        }<a name="line.611"></a>
-<span class="sourceLineNo">612</span>        p = next;<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      }<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      // we need the hash-table lookups for parents, so this must be done<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      // out of the loop where we check isReadyToRun()<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      for (p = readyHead; p != null; p = p.replayNext) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        removeFromMap(p.getProcId());<a name="line.617"></a>
-<span class="sourceLineNo">618</span>        unlinkFromLinkList(p);<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      }<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return readyHead != null ? new EntryIterator(readyHead) : null;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    }<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>     * Drain this map and return all procedures in it.<a name="line.624"></a>
-<span class="sourceLineNo">625</span>     */<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    public EntryIterator fetchAll() {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      Entry head = replayOrderHead;<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      for (Entry p = head; p != null; p = p.replayNext) {<a name="line.628"></a>
-<span class="sourceLineNo">629</span>        removeFromMap(p.getProcId());<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      }<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>        assert procedureMap[i] == null : "map not empty i=" + i;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      replayOrderHead = null;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      replayOrderTail = null;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      childUnlinkedHead = null;<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      rootHead = null;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      return head != null ? new EntryIterator(head) : null;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    }<a name="line.639"></a>
-<span class="sourceLineNo">640</span><a name="line.640"></a>
-<span class="sourceLineNo">641</span>    private void buildGraph() {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      Entry p = childUnlinkedHead;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      while (p != null) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>        Entry next = p.linkNext;<a name="line.644"></a>
-<span class="sourceLineNo">645</span>        Entry rootProc = getRootProcedure(p);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        if (rootProc != null) {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>          rootProc.childHead = addToLinkList(p, rootProc.childHead);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        }<a name="line.648"></a>
-<span class="sourceLineNo">649</span>        p = next;<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span>      for (p = rootHead; p != null; p = p.linkNext) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        checkReadyToRun(p);<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      }<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
-<span class="sourceLineNo">656</span><a name="line.656"></a>
-<span class="sourceLineNo">657</span>    private Entry getRootProcedure(Entry entry) {<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      while (entry != null &amp;&amp; entry.hasParent()) {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        entry = getProcedure(entry.getParentId());<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      }<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      return entry;<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    }<a name="line.662"></a>
-<span class="sourceLineNo">663</span><a name="line.663"></a>
-<span class="sourceLineNo">664</span>    /*<a name="line.664"></a>
-<span class="sourceLineNo">665</span>     * (see the comprehensive explanation in the beginning of the file)<a name="line.665"></a>
-<span class="sourceLineNo">666</span>     * A Procedure is ready when parent and children are ready.<a name="line.666"></a>
-<span class="sourceLineNo">667</span>     * "ready" means that we all the information that we need in-memory.<a name="line.667"></a>
-<span class="sourceLineNo">668</span>     *<a name="line.668"></a>
-<span class="sourceLineNo">669</span>     * Example-1:<a name="line.669"></a>
-<span class="sourceLineNo">670</span>     * We have two WALs, we start reading from the newest (wal-2)<a name="line.670"></a>
-<span class="sourceLineNo">671</span>     *    wal-2 | C B |<a name="line.671"></a>
-<span class="sourceLineNo">672</span>     *    wal-1 | A B C |<a name="line.672"></a>
-<span class="sourceLineNo">673</span>     *<a name="line.673"></a>
-<span class="sourceLineNo">674</span>     * If C and B don't depend on A (A is not the parent), we can start them<a name="line.674"></a>
-<span class="sourceLineNo">675</span>     * before reading wal-1. If B is the only one with parent A we can start C.<a name="line.675"></a>
-<span class="sourceLineNo">676</span>     * We have to read one more WAL before being able to start B.<a name="line.676"></a>
-<span class="sourceLineNo">677</span>     *<a name="line.677"></a>
-<span class="sourceLineNo">678</span>     * How do we know with the only information in B that we are not ready.<a name="line.678"></a>
-<span class="sourceLineNo">679</span>     *  - easy case, the parent is missing from the global map<a name="line.679"></a>
-<span class="sourceLineNo">680</span>     *  - more complex case we look at the Stack IDs.<a name="line.680"></a>
-<span class="sourceLineNo">681</span>     *<a name="line.681"></a>
-<span class="sourceLineNo">682</span>     * The Stack-IDs are added to the procedure order as an incremental index<a name="line.682"></a>
-<span class="sourceLineNo">683</span>     * tracking how many times that procedure was executed, which is equivalent<a name="line.683"></a>
-<span class="sourceLineNo">684</span>     * to the number of times we wrote the procedure to the WAL.<a name="line.684"></a>
-<span class="sourceLineNo">685</span>     * In the example above:<a name="line.685"></a>
-<span class="sourceLineNo">686</span>     *   wal-2: B has stackId = [1, 2]<a name="line.686"></a>
-<span class="sourceLineNo">687</span>     *   wal-1: B has stackId = [1]<a name="line.687"></a>
-<span class="sourceLineNo">688</span>     *   wal-1: A has stackId = [0]<a name="line.688"></a>
-<span class="sourceLineNo">689</span>     *<a name="line.689"></a>
-<span class="sourceLineNo">690</span>     * Since we know that the Stack-IDs are incremental for a Procedure,<a name="line.690"></a>
-<span class="sourceLineNo">691</span>     * we notice that there is a gap in the stackIds of B, so something was<a name="line.691"></a>
-<span class="sourceLineNo">692</span>     * executed before.<a name="line.692"></a>
-<span class="sourceLineNo">693</span>     * To identify when a Procedure is ready we do the sum of the stackIds of<a name="line.693"></a>
-<span class="sourceLineNo">694</span>     * the procedure and the parent. if the stackIdSum is equal to the<a name="line.694"></a>
-<span class="sourceLineNo">695</span>     * sum of {1..maxStackId} then everything we need is available.<a name="line.695"></a>
-<span class="sourceLineNo">696</span>     *<a name="line.696"></a>
-<span class="sourceLineNo">697</span>     * Example-2<a name="line.697"></a>
-<span class="sourceLineNo">698</span>     *    wal-2 | A |              A stackIds = [0, 2]<a name="line.698"></a>
-<span class="sourceLineNo">699</span>     *    wal-1 | A B |            B stackIds = [1]<a name="line.699"></a>
-<span class="sourceLineNo">700</span>     *<a name="line.700"></a>
-<span class="sourceLineNo">701</span>     * There is a gap between A stackIds so something was executed in between.<a name="line.701"></a>
-<span class="sourceLineNo">702</span>     */<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    private boolean checkReadyToRun(Entry rootEntry) {<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      assert !rootEntry.hasParent() : "expected root procedure, got " + rootEntry;<a name="line.704"></a>
-<span class="sourceLineNo">705</span><a name="line.705"></a>
-<span class="sourceLineNo">706</span>      if (rootEntry.isFinished()) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>        // If the root procedure is finished, sub-procedures should be gone<a name="line.707"></a>
-<span class="sourceLineNo">708</span>        if (rootEntry.childHead != null) {<a name="line.708"></a>
-<span class="sourceLineNo">709</span>          LOG.error("unexpected active children for root-procedure: " + rootEntry);<a name="line.709"></a>
-<span class="sourceLineNo">710</span>          for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.710"></a>
-<span class="sourceLineNo">711</span>            LOG.error("unexpected active children: " + p);<a name="line.711"></a>
-<span class="sourceLineNo">712</span>          }<a name="line.712"></a>
-<span class="sourceLineNo">713</span>        }<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span>        assert rootEntry.childHead == null : "unexpected children on root completion. " + rootEntry;<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        rootEntry.ready = true;<a name="line.716"></a>
-<span class="sourceLineNo">717</span>        return true;<a name="line.717"></a>
-<span class="sourceLineNo">718</span>      }<a name="line.718"></a>
-<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>      int stackIdSum = 0;<a name="line.720"></a>
-<span class="sourceLineNo">721</span>      int maxStackId = 0;<a name="line.721"></a>
-<span class="sourceLineNo">722</span>      for (int i = 0; i &lt; rootEntry.proto.getStackIdCount(); ++i) {<a name="line.722"></a>
-<span class="sourceLineNo">723</span>        int stackId = 1 + rootEntry.proto.getStackId(i);<a name="line.723"></a>
-<span class="sourceLineNo">724</span>        maxStackId  = Math.max(maxStackId, stackId);<a name="line.724"></a>
-<span class="sourceLineNo">725</span>        stackIdSum += stackId;<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        if (LOG.isTraceEnabled()) {<a name="line.726"></a>
-<span class="sourceLineNo">727</span>          LOG.trace("stackId=" + stackId + " stackIdSum=" + stackIdSum +<a name="line.727"></a>
-<span class="sourceLineNo">728</span>          " maxStackid=" + maxStackId + " " + rootEntry);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>        }<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
-<span class="sourceLineNo">731</span><a name="line.731"></a>
-<span class="sourceLineNo">732</span>      for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        for (int i = 0; i &lt; p.proto.getStackIdCount(); ++i) {<a name="line.733"></a>
-<span class="sourceLineNo">734</span>          int stackId = 1 + p.proto.getStackId(i);<a name="line.734"></a>
-<span class="sourceLineNo">735</span>          maxStackId  = Math.max(maxStackId, stackId);<a name="line.735"></a>
-<span class="sourceLineNo">736</span>          stackIdSum += stackId;<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          if (LOG.isTraceEnabled()) {<a name="line.737"></a>
-<span class="sourceLineNo">738</span>            LOG.trace("stackId=" + stackId + " stackIdSum=" + stackIdSum +<a name="line.738"></a>
-<span class="sourceLineNo">739</span>              " maxStackid=" + maxStackId + " " + p);<a name="line.739"></a>
-<span class="sourceLineNo">740</span>          }<a name="line.740"></a>
-<span class="sourceLineNo">741</span>        }<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      }<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      // The cmpStackIdSum is this formula for finding the sum of a series of numbers:<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      // http://www.wikihow.com/Sum-the-Integers-from-1-to-N#/Image:Sum-the-Integers-from-1-to-N-Step-2-Version-3.jpg<a name="line.744"></a>
-<span class="sourceLineNo">745</span>      final int cmpStackIdSum = (maxStackId * (maxStackId + 1) / 2);<a name="line.745"></a>
-<span class="sourceLineNo">746</span>      if (cmpStackIdSum == stackIdSum) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        rootEntry.ready = true;<a name="line.747"></a>
-<span class="sourceLineNo">748</span>        for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.748"></a>
-<span class="sourceLineNo">749</span>          p.ready = true;<a name="line.749"></a>
-<span class="sourceLineNo">750</span>        }<a name="line.750"></a>
-<span class="sourceLineNo">751</span>        return true;<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      }<a name="line.752"></a>
-<span class="sourceLineNo">753</span>      return false;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    }<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span>    private void unlinkFromReplayList(Entry entry) {<a name="line.756"></a>
-<span class="sourceLineNo">757</span>      if (replayOrderHead == entry) {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>        replayOrderHead = entry.replayNext;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>      }<a name="line.759"></a>
-<span class="sourceLineNo">760</span>      if (replayOrderTail == entry) {<a name="line.760"></a>
-<span class="sourceLineNo">761</span>        replayOrderTail = entry.replayPrev;<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      }<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      if (entry.replayPrev != null) {<a name="line.763"></a>
-<span class="sourceLineNo">764</span>        entry.replayPrev.replayNext = entry.replayNext;<a name="line.764"></a>
-<span class="sourceLineNo">765</span>      }<a name="line.765"></a>
-<span class="sourceLineNo">766</span>      if (entry.replayNext != null) {<a name="line.766"></a>
-<span class="sourceLineNo">767</span>        entry.replayNext.replayPrev = entry.replayPrev;<a name="line.767"></a>
-<span class="sourceLineNo">768</span>      }<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    }<a name="line.769"></a>
-<span class="sourceLineNo">770</span><a name="line.770"></a>
-<span class="sourceLineNo">771</span>    private void addToReplayList(final Entry entry) {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      unlinkFromReplayList(entry);<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      entry.replayNext = replayOrderHead;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>      entry.replayPrev = null;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>      if (replayOrderHead != null) {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>        replayOrderHead.replayPrev = entry;<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      } else {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>        replayOrderTail = entry;<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      }<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      replayOrderHead = entry;<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>    private void unlinkFromLinkList(Entry entry) {<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      if (entry == rootHead) {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        rootHead = entry.linkNext;<a name="line.785"></a>
-<span class="sourceLineNo">786</span>      } else if (entry == childUnlinkedHead) {<a name="line.786"></a>
-<span class="sourceLineNo">787</span>        childUnlinkedHead = entry.linkNext;<a name="line.787"></a>
-<span class="sourceLineNo">788</span>      }<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      if (entry.linkPrev != null) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>        entry.linkPrev.linkNext = entry.linkNext;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>      }<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      if (entry.linkNext != null) {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>        entry.linkNext.linkPrev = entry.linkPrev;<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      }<a name="line.794"></a>
-<span class="sourceLineNo">795</span>    }<a name="line.795"></a>
-<span class="sourceLineNo">796</span><a name="line.796"></a>
-<span class="sourceLineNo">797</span>    private Entry addToLinkList(Entry entry, Entry linkHead) {<a name="line.797"></a>
-<span class="sourceLineNo">798</span>      unlinkFromLinkList(entry);<a name="line.798"></a>
-<span class="sourceLineNo">799</span>      entry.linkNext = linkHead;<a name="line.799"></a>
-<span class="sourceLineNo">800</span>      entry.linkPrev = null;<a name="line.800"></a>
-<span class="sourceLineNo">801</span>      if (linkHead != null) {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>        linkHead.linkPrev = entry;<a name="line.802"></a>
-<span class="sourceLineNo">803</span>      }<a name="line.803"></a>
-<span class="sourceLineNo">804</span>      return entry;<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    }<a name="line.805"></a>
-<span class="sourceLineNo">806</span><a name="line.806"></a>
-<span class="sourceLineNo">807</span>    private Entry findLinkListTail(Entry linkHead) {<a name="line.807"></a>
-<span class="sourceLineNo">808</span>      Entry tail = linkHead;<a name="line.808"></a>
-<span class="sourceLineNo">809</span>      while (tail.linkNext != null) {<a name="line.809"></a>
-<span class="sourceLineNo">810</span>        tail = tail.linkNext;<a name="line.810"></a>
-<span class="sourceLineNo">811</span>      }<a name="line.811"></a>
-<span class="sourceLineNo">812</span>      return tail;<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    }<a name="line.813"></a>
-<span class="sourceLineNo">814</span><a name="line.814"></a>
-<span class="sourceLineNo">815</span>    private Entry addToMap(final long procId, final boolean hasParent) {<a name="line.815"></a>
-<span class="sourceLineNo">816</span>      int slotIndex = getMapSlot(procId);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      Entry entry = getProcedure(slotIndex, procId);<a name="line.817"></a>
-<span class="sourceLineNo">818</span>      if (entry != null) return entry;<a name="line.818"></a>
-<span class="sourceLineNo">819</span><a name="line.819"></a>
-<span class="sourceLineNo">820</span>      entry = new Entry(procedureMap[slotIndex]);<a name="line.820"></a>
-<span class="sourceLineNo">821</span>      procedureMap[slotIndex] = entry;<a name="line.821"></a>
-<span class="sourceLineNo">822</span>      return entry;<a name="line.822"></a>
-<span class="sourceLineNo">823</span>    }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>    private Entry removeFromMap(final long procId) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span>      int slotIndex = getMapSlot(procId);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>      Entry prev = null;<a name="line.827"></a>
-<span class="sourceLineNo">828</span>      Entry entry = procedureMap[slotIndex];<a name="line.828"></a>
-<span class="sourceLineNo">829</span>      while (entry != null) {<a name="line.829"></a>
-<span class="sourceLineNo">830</span>        if (procId == entry.getProcId()) {<a name="line.830"></a>
-<span class="sourceLineNo">831</span>          if (prev != null) {<a name="line.831"></a>
-<span class="sourceLineNo">832</span>            prev.hashNext = entry.hashNext;<a name="line.832"></a>
-<span class="sourceLineNo">833</span>          } else {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>            procedureMap[slotIndex] = entry.hashNext;<a name="line.834"></a>
-<span class="sourceLineNo">835</span>          }<a name="line.835"></a>
-<span class="sourceLineNo">836</span>          entry.hashNext = null;<a name="line.836"></a>
-<span class="sourceLineNo">837</span>          return entry;<a name="line.837"></a>
-<span class="sourceLineNo">838</span>        }<a name="line.838"></a>
-<span class="sourceLineNo">839</span>        prev = entry;<a name="line.839"></a>
-<span class="sourceLineNo">840</span>        entry = entry.hashNext;<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      }<a name="line.841"></a>
-<span class="sourceLineNo">842</span>      return null;<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    }<a name="line.843"></a>
-<span class="sourceLineNo">844</span><a name="line.844"></a>
-<span class="sourceLineNo">845</span>    private Entry getProcedure(final long procId) {<a name="line.845"></a>
-<span class="sourceLineNo">846</span>      return getProcedure(getMapSlot(procId), procId);<a name="line.846"></a>
-<span class="sourceLineNo">847</span>    }<a name="line.847"></a>
-<span class="sourceLineNo">848</span><a name="line.848"></a>
-<span class="sourceLineNo">849</span>    private Entry getProcedure(final int slotIndex, final long procId) {<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      Entry entry = procedureMap[slotIndex];<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      while (entry != null) {<a name="line.851"></a>
-<span class="sourceLineNo">852</span>        if (procId == entry.getProcId()) {<a name="line.852"></a>
-<span class="sourceLineNo">853</span>          return entry;<a name="line.853"></a>
-<span class="sourceLineNo">854</span>        }<a name="line.854"></a>
-<span class="sourceLineNo">855</span>        entry = entry.hashNext;<a name="line.855"></a>
-<span class="sourceLineNo">856</span>      }<a name="line.856"></a>
-<span class="sourceLineNo">857</span>      return null;<a name="line.857"></a>
-<span class="sourceLineNo">858</span>    }<a name="line.858"></a>
-<span class="sourceLineNo">859</span><a name="line.859"></a>
-<span class="sourceLineNo">860</span>    private int getMapSlot(final long procId) {<a name="line.860"></a>
-<span class="sourceLineNo">861</span>      return (int)(Procedure.getProcIdHashCode(procId) % procedureMap.length);<a name="line.861"></a>
-<span class="sourceLineNo">862</span>    }<a name="line.862"></a>
-<span class="sourceLineNo">863</span>  }<a name="line.863"></a>
-<span class="sourceLineNo">864</span>}<a name="line.864"></a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
-</html>


[10/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/testapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html b/testapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
index fde43fb..66ed124 100644
--- a/testapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
+++ b/testapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.html
@@ -120,7 +120,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Public
-public class <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.177">HBaseTestingUtility</a>
+public class <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.178">HBaseTestingUtility</a>
 extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseZKTestingUtility</a></pre>
 <div class="block">Facility for testing HBase. Replacement for
  old HBaseTestCase and HBaseClusterTestCase functionality.
@@ -136,7 +136,8 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
  region-server-port are overridden such that a random port will be assigned (thus
  avoiding port contention if another local HBase instance is already running).
  <p>To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"
- setting it to true.</div>
+ setting it to true.
+ For triggering test.</div>
 </li>
 </ul>
 </div>
@@ -1830,7 +1831,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>REGIONS_PER_SERVER_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/HBaseTestingUtility.html#line.188">REGIONS_PER_SERVER_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/HBaseTestingUtility.html#line.189">REGIONS_PER_SERVER_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.REGIONS_PER_SERVER_KEY">Constant Field Values</a></dd>
@@ -1843,7 +1844,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGIONS_PER_SERVER</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.193">DEFAULT_REGIONS_PER_SERVER</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.194">DEFAULT_REGIONS_PER_SERVER</a></pre>
 <div class="block">The default number of regions per regionserver when creating a pre-split
  table.</div>
 <dl>
@@ -1858,7 +1859,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>PRESPLIT_TEST_TABLE_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/HBaseTestingUtility.html#line.196">PRESPLIT_TEST_TABLE_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/HBaseTestingUtility.html#line.197">PRESPLIT_TEST_TABLE_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.PRESPLIT_TEST_TABLE_KEY">Constant Field Values</a></dd>
@@ -1871,7 +1872,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>PRESPLIT_TEST_TABLE</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.197">PRESPLIT_TEST_TABLE</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.198">PRESPLIT_TEST_TABLE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.PRESPLIT_TEST_TABLE">Constant Field Values</a></dd>
@@ -1884,7 +1885,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>MEMSTORETS_TAGS_PARAMETRIZED</h4>
-<pre>public static final&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="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.222">MEMSTORETS_TAGS_PARAMETRIZED</a></pre>
+<pre>public static final&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="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.223">MEMSTORETS_TAGS_PARAMETRIZED</a></pre>
 <div class="block">This is for unit tests parameterized with a single boolean.</div>
 </li>
 </ul>
@@ -1894,7 +1895,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOOM_AND_COMPRESSION_COMBINATIONS</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.298">BLOOM_AND_COMPRESSION_COMBINATIONS</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.299">BLOOM_AND_COMPRESSION_COMBINATIONS</a></pre>
 </li>
 </ul>
 <a name="fam1">
@@ -1903,7 +1904,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>fam1</h4>
-<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1826">fam1</a></pre>
+<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1827">fam1</a></pre>
 </li>
 </ul>
 <a name="fam2">
@@ -1912,7 +1913,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>fam2</h4>
-<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1827">fam2</a></pre>
+<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1828">fam2</a></pre>
 </li>
 </ul>
 <a name="fam3">
@@ -1921,7 +1922,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>fam3</h4>
-<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1828">fam3</a></pre>
+<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1829">fam3</a></pre>
 </li>
 </ul>
 <a name="COLUMNS">
@@ -1930,7 +1931,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>COLUMNS</h4>
-<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1829">COLUMNS</a></pre>
+<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1830">COLUMNS</a></pre>
 </li>
 </ul>
 <a name="FIRST_CHAR">
@@ -1939,7 +1940,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>FIRST_CHAR</h4>
-<pre>public static final&nbsp;char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1832">FIRST_CHAR</a></pre>
+<pre>public static final&nbsp;char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1833">FIRST_CHAR</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.FIRST_CHAR">Constant Field Values</a></dd>
@@ -1952,7 +1953,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>LAST_CHAR</h4>
-<pre>public static final&nbsp;char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1833">LAST_CHAR</a></pre>
+<pre>public static final&nbsp;char <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1834">LAST_CHAR</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.LAST_CHAR">Constant Field Values</a></dd>
@@ -1965,7 +1966,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>START_KEY_BYTES</h4>
-<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1834">START_KEY_BYTES</a></pre>
+<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1835">START_KEY_BYTES</a></pre>
 </li>
 </ul>
 <a name="START_KEY">
@@ -1974,7 +1975,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>START_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/HBaseTestingUtility.html#line.1835">START_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/HBaseTestingUtility.html#line.1836">START_KEY</a></pre>
 </li>
 </ul>
 <a name="ROWS">
@@ -1983,7 +1984,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>ROWS</h4>
-<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2388">ROWS</a></pre>
+<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2389">ROWS</a></pre>
 <div class="block">All the row values for the data loaded by <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#loadTable-org.apache.hadoop.hbase.client.Table-byte:A-"><code>loadTable(Table, byte[])</code></a></div>
 </li>
 </ul>
@@ -1993,7 +1994,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>KEYS</h4>
-<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2403">KEYS</a></pre>
+<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2404">KEYS</a></pre>
 </li>
 </ul>
 <a name="KEYS_FOR_HBA_CREATE_TABLE">
@@ -2002,7 +2003,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>KEYS_FOR_HBA_CREATE_TABLE</h4>
-<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2415">KEYS_FOR_HBA_CREATE_TABLE</a></pre>
+<pre>public static final&nbsp;byte[][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2416">KEYS_FOR_HBA_CREATE_TABLE</a></pre>
 </li>
 </ul>
 </li>
@@ -2019,7 +2020,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>HBaseTestingUtility</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.314">HBaseTestingUtility</a>()</pre>
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.315">HBaseTestingUtility</a>()</pre>
 <div class="block"><p>Create an HBaseTestingUtility using a default configuration.
 
  <p>Initially, all tmp files are written to a local test data directory.
@@ -2038,7 +2039,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HBaseTestingUtility</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.332">HBaseTestingUtility</a>(@Nullable
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.333">HBaseTestingUtility</a>(@Nullable
                            org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block"><p>Create an HBaseTestingUtility using a given configuration.
 
@@ -2070,7 +2071,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>available</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.230">available</a>(int&nbsp;port)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.231">available</a>(int&nbsp;port)</pre>
 <div class="block">Checks to see if a specific port is available.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -2086,7 +2087,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>memStoreTSTagsAndOffheapCombination</h4>
-<pre>public static&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="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.285">memStoreTSTagsAndOffheapCombination</a>()</pre>
+<pre>public static&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="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&gt;&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.286">memStoreTSTagsAndOffheapCombination</a>()</pre>
 </li>
 </ul>
 <a name="createLocalHTU--">
@@ -2096,7 +2097,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/HBaseZKTestingUtility.html"
 <li class="blockList">
 <h4>createLocalHTU</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 static&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.363">createLocalHTU</a>()</pre>
+public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.364">createLocalHTU</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">use <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#HBaseTestingUtility--"><code>HBaseTestingUtility()</code></a> instead</span></div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -2111,7 +2112,7 @@ public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
 <li class="blockList">
 <h4>createLocalHTU</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 static&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.372">createLocalHTU</a>(org.apache.hadoop.conf.Configuration&nbsp;c)</pre>
+public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.373">createLocalHTU</a>(org.apache.hadoop.conf.Configuration&nbsp;c)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">use <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#HBaseTestingUtility-org.apache.hadoop.conf.Configuration-"><code>HBaseTestingUtility(Configuration)</code></a> instead</span></div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -2125,7 +2126,7 @@ public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegionAndWAL</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.379">closeRegionAndWAL</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/Region.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;r)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.380">closeRegionAndWAL</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/Region.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;r)
                               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">Close both the region <code>r</code> and it's underlying WAL. For use in tests.</div>
 <dl>
@@ -2140,7 +2141,7 @@ public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegionAndWAL</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.386">closeRegionAndWAL</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.387">closeRegionAndWAL</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/regionserver/HRegion.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r)
                               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">Close both the HRegion <code>r</code> and it's underlying WAL. For use in tests.</div>
 <dl>
@@ -2155,7 +2156,7 @@ public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
 <ul class="blockList">
 <li class="blockList">
 <h4>getConfiguration</h4>
-<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.405">getConfiguration</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.406">getConfiguration</a>()</pre>
 <div class="block">Returns this classes's instance of <code>Configuration</code>.  Be careful how
  you use the returned Configuration since <a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Connection.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client"><code>Connection</code></a> instances
  can be shared.  The Map of Connections is keyed by the Configuration.  If
@@ -2178,7 +2179,7 @@ public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
 <ul class="blockList">
 <li class="blockList">
 <h4>setHBaseCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.409">setHBaseCluster</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/HBaseCluster.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">HBaseCluster</a>&nbsp;hbaseCluster)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.410">setHBaseCluster</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/HBaseCluster.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">HBaseCluster</a>&nbsp;hbaseCluster)</pre>
 </li>
 </ul>
 <a name="setupDataTestDir--">
@@ -2187,7 +2188,7 @@ public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
 <ul class="blockList">
 <li class="blockList">
 <h4>setupDataTestDir</h4>
-<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.430">setupDataTestDir</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.431">setupDataTestDir</a>()</pre>
 <div class="block">Home our data in a dir under <a href="../../../../org/apache/hadoop/hbase/HBaseCommonTestingUtility.html#DEFAULT_BASE_TEST_DIRECTORY"><code>HBaseCommonTestingUtility.DEFAULT_BASE_TEST_DIRECTORY</code></a>.
  Give it a random name so can have many concurrent tests running if
  we need to.  It needs to amend the <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#TEST_DIRECTORY_KEY"><code>TEST_DIRECTORY_KEY</code></a>
@@ -2215,7 +2216,7 @@ public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtil
 <li class="blockList">
 <h4>getMetaTableDescriptor</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="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.497">getMetaTableDescriptor</a>()</pre>
+public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.498">getMetaTableDescriptor</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.0 version and will be removed in 3.0 version.
              use <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getMetaTableDescriptorBuilder--"><code>getMetaTableDescriptorBuilder()</code></a></span></div>
 <dl>
@@ -2230,7 +2231,7 @@ public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetaTableDescriptorBuilder</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.504">getMetaTableDescriptorBuilder</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptorBuilder</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.505">getMetaTableDescriptorBuilder</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>META table descriptor</dd>
@@ -2243,7 +2244,7 @@ public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
 <ul class="blockList">
 <li class="blockList">
 <h4>getDataTestDirOnTestFS</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.518">getDataTestDirOnTestFS</a>()
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.519">getDataTestDirOnTestFS</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">Returns a Path in the test filesystem, obtained from <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getTestFileSystem--"><code>getTestFileSystem()</code></a>
  to write temporary test data. Call this method after setting up the mini dfs cluster
@@ -2262,7 +2263,7 @@ public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
 <ul class="blockList">
 <li class="blockList">
 <h4>getDataTestDirOnTestFS</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.533">getDataTestDirOnTestFS</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;subdirName)
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.534">getDataTestDirOnTestFS</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;subdirName)
                                                  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">Returns a Path in the test filesystem, obtained from <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getTestFileSystem--"><code>getTestFileSystem()</code></a>
  to write temporary test data. Call this method after setting up the mini dfs cluster
@@ -2283,7 +2284,7 @@ public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupDataTestDirOnTestFS</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.578">cleanupDataTestDirOnTestFS</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.579">cleanupDataTestDirOnTestFS</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">Cleans the test data directory on the test filesystem.</div>
 <dl>
@@ -2300,7 +2301,7 @@ public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupDataTestDirOnTestFS</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.590">cleanupDataTestDirOnTestFS</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;subdirName)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.591">cleanupDataTestDirOnTestFS</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;subdirName)
                                    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">Cleans a subdirectory under the test data directory on the test filesystem.</div>
 <dl>
@@ -2317,7 +2318,7 @@ public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniDFSCluster</h4>
-<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.602">startMiniDFSCluster</a>(int&nbsp;servers)
+<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.603">startMiniDFSCluster</a>(int&nbsp;servers)
                                                           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>
 <div class="block">Start a minidfscluster.</div>
 <dl>
@@ -2338,7 +2339,7 @@ public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniDFSCluster</h4>
-<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.617">startMiniDFSCluster</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;hosts)
+<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.618">startMiniDFSCluster</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;hosts)
                                                           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>
 <div class="block">Start a minidfscluster.
  This is useful if you want to run datanode on distinct hosts for things
@@ -2363,7 +2364,7 @@ public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniDFSCluster</h4>
-<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.635">startMiniDFSCluster</a>(int&nbsp;servers,
+<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.636">startMiniDFSCluster</a>(int&nbsp;servers,
                                                                  <a href="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;hosts)
                                                           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>
 <div class="block">Start a minidfscluster.
@@ -2387,7 +2388,7 @@ public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniDFSCluster</h4>
-<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.652">startMiniDFSCluster</a>(int&nbsp;servers,
+<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.653">startMiniDFSCluster</a>(int&nbsp;servers,
                                                                  <a href="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;racks,
                                                                  <a href="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;hosts)
                                                           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>
@@ -2403,7 +2404,7 @@ public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniDFSClusterForTestWAL</h4>
-<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.683">startMiniDFSClusterForTestWAL</a>(int&nbsp;namenodePort)
+<pre>public&nbsp;org.apache.hadoop.hdfs.MiniDFSCluster&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.684">startMiniDFSClusterForTestWAL</a>(int&nbsp;namenodePort)
                                                                     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>
@@ -2417,7 +2418,7 @@ public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
 <ul class="blockList">
 <li class="blockList">
 <h4>isReadShortCircuitOn</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.719">isReadShortCircuitOn</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.720">isReadShortCircuitOn</a>()</pre>
 <div class="block">Get the HBase setting for dfs.client.read.shortcircuit from the conf or a system property.
   This allows to specify this parameter on the command line.
    If not set, default is true.</div>
@@ -2429,7 +2430,7 @@ public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdownMiniDFSCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.761">shutdownMiniDFSCluster</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.762">shutdownMiniDFSCluster</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">Shuts down instance created by call to <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#startMiniDFSCluster-int-"><code>startMiniDFSCluster(int)</code></a>
  or does nothing.</div>
@@ -2446,7 +2447,7 @@ public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/HTableDescri
 <li class="blockList">
 <h4>startMiniCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.780">startMiniCluster</a>(boolean&nbsp;createWALDir)
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.781">startMiniCluster</a>(boolean&nbsp;createWALDir)
                                               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>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Use <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#startMiniCluster-org.apache.hadoop.hbase.StartMiniClusterOption-"><code>startMiniCluster(StartMiniClusterOption)</code></a> instead.</span></div>
 <div class="block">Start up a minicluster of hbase, dfs, and zookeeper where WAL's walDir is created separately.
@@ -2470,7 +2471,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.796">startMiniCluster</a>(int&nbsp;numSlaves,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.797">startMiniCluster</a>(int&nbsp;numSlaves,
                                                      boolean&nbsp;createRootDir)
                                               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>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Use <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#startMiniCluster-org.apache.hadoop.hbase.StartMiniClusterOption-"><code>startMiniCluster(StartMiniClusterOption)</code></a> instead.</span></div>
@@ -2496,7 +2497,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.814">startMiniCluster</a>(int&nbsp;numSlaves,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.815">startMiniCluster</a>(int&nbsp;numSlaves,
                                                      boolean&nbsp;createRootDir,
                                                      boolean&nbsp;createWALDir)
                                               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>
@@ -2524,7 +2525,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.833">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.834">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numSlaves,
                                                      boolean&nbsp;createRootDir)
                                               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>
@@ -2552,7 +2553,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.851">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.852">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numSlaves)
                                               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>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Use <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#startMiniCluster-org.apache.hadoop.hbase.StartMiniClusterOption-"><code>startMiniCluster(StartMiniClusterOption)</code></a> instead.</span></div>
@@ -2578,7 +2579,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.870">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.871">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numSlaves,
                                                      <a href="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;dataNodeHosts,
                                                      boolean&nbsp;createRootDir)
@@ -2609,7 +2610,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.890">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.891">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numSlaves,
                                                      <a href="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;dataNodeHosts)
                                               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>
@@ -2638,7 +2639,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.909">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.910">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numRegionServers,
                                                      int&nbsp;numDataNodes)
                                               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>
@@ -2666,7 +2667,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.931">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.932">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numSlaves,
                                                      <a href="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;dataNodeHosts,
                                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../apidocs/org/apache/hadoop/hbase/master/HMaster.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.master">HMaster</a>&gt;&nbsp;masterClass,
@@ -2699,7 +2700,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.958">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.959">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numRegionServers,
                                                      int&nbsp;numDataNodes,
                                                      <a href="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;dataNodeHosts,
@@ -2734,7 +2735,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.987">startMiniCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.988">startMiniCluster</a>(int&nbsp;numMasters,
                                                      int&nbsp;numRegionServers,
                                                      int&nbsp;numDataNodes,
                                                      <a href="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;dataNodeHosts,
@@ -2772,7 +2773,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1007">startMiniCluster</a>(int&nbsp;numSlaves)
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1008">startMiniCluster</a>(int&nbsp;numSlaves)
                                   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>
 <div class="block">Start up a minicluster of hbase, dfs and zookeeper clusters with given slave node number.
  All other options will use default values, defined in <a href="../../../../../apidocs/org/apache/hadoop/hbase/StartMiniClusterOption.Builder.html?is-external=true" title="class or interface in org.apache.hadoop.hbase"><code>StartMiniClusterOption.Builder</code></a>.</div>
@@ -2793,7 +2794,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1019">startMiniCluster</a>()
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1020">startMiniCluster</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>
 <div class="block">Start up a minicluster of hbase, dfs and zookeeper all using default options.
  Option default value can be found in <a href="../../../../../apidocs/org/apache/hadoop/hbase/StartMiniClusterOption.Builder.html?is-external=true" title="class or interface in org.apache.hadoop.hbase"><code>StartMiniClusterOption.Builder</code></a>.</div>
@@ -2812,7 +2813,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1029">startMiniCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a>&nbsp;option)
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1030">startMiniCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a>&nbsp;option)
                                   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>
 <div class="block">Start up a mini cluster of hbase, optionally dfs and zookeeper if needed.
  It modifies Configuration.  It homes the cluster data directory under a random
@@ -2831,7 +2832,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniHBaseCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1067">startMiniHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a>&nbsp;option)
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1068">startMiniHBaseCluster</a>(<a href="../../../../org/apache/hadoop/hbase/StartMiniClusterOption.html" title="class in org.apache.hadoop.hbase">StartMiniClusterOption</a>&nbsp;option)
                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Starts up mini hbase cluster.
@@ -2855,7 +2856,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>startMiniHBaseCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1113">startMiniHBaseCluster</a>()
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1114">startMiniHBaseCluster</a>()
                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Starts up mini hbase cluster using default options.
@@ -2877,7 +2878,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniHBaseCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1128">startMiniHBaseCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1129">startMiniHBaseCluster</a>(int&nbsp;numMasters,
                                                           int&nbsp;numRegionServers)
                                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -2906,7 +2907,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniHBaseCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1147">startMiniHBaseCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1148">startMiniHBaseCluster</a>(int&nbsp;numMasters,
                                                           int&nbsp;numRegionServers,
                                                           <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="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;rsPorts)
                                                    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>,
@@ -2937,7 +2938,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <li class="blockList">
 <h4>startMiniHBaseCluster</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/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1170">startMiniHBaseCluster</a>(int&nbsp;numMasters,
+public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1171">startMiniHBaseCluster</a>(int&nbsp;numMasters,
                                                           int&nbsp;numRegionServers,
                                                           <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="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;rsPorts,
                                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../apidocs/org/apache/hadoop/hbase/master/HMaster.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.master">HMaster</a>&gt;&nbsp;masterClass,
@@ -2975,7 +2976,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>restartHBaseCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1186">restartHBaseCluster</a>(int&nbsp;servers)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1187">restartHBaseCluster</a>(int&nbsp;servers)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Starts the hbase cluster up again after shutting it down previously in a
@@ -2995,7 +2996,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getMiniHBaseCluster</h4>
-<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1214">getMiniHBaseCluster</a>()</pre>
+<pre>public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html" title="class in org.apache.hadoop.hbase">MiniHBaseCluster</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1215">getMiniHBaseCluster</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Current mini hbase cluster. Only has something in it after a call
@@ -3011,7 +3012,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdownMiniCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1227">shutdownMiniCluster</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1228">shutdownMiniCluster</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>
 <div class="block">Stops mini hbase, zk, and hdfs clusters.</div>
 <dl>
@@ -3029,7 +3030,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdownMiniHBaseCluster</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1241">shutdownMiniHBaseCluster</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1242">shutdownMiniHBaseCluster</a>()
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Shutdown HBase mini cluster.  Does not shutdown zk or dfs if running.</div>
 <dl>
@@ -3044,7 +3045,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getDefaultRootDirPath</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1273">getDefaultRootDirPath</a>(boolean&nbsp;create)
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1274">getDefaultRootDirPath</a>(boolean&nbsp;create)
                                                 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">Returns the path to the default root dir the minicluster uses. If <code>create</code>
  is true, a new root directory path is fetched irrespective of whether it has been fetched
@@ -3064,7 +3065,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getDefaultRootDirPath</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1288">getDefaultRootDirPath</a>()
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1289">getDefaultRootDirPath</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">Same as {<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#getDefaultRootDirPath-boolean-"><code>getDefaultRootDirPath(boolean create)</code></a>
  except that <code>create</code> flag is false.
@@ -3083,7 +3084,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>createRootDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1304">createRootDir</a>(boolean&nbsp;create)
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1305">createRootDir</a>(boolean&nbsp;create)
                                         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">Creates an hbase rootdir in user home directory.  Also creates hbase
  version file.  Normally you won't make use of this method.  Root hbasedir
@@ -3108,7 +3109,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>createRootDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1319">createRootDir</a>()
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1320">createRootDir</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">Same as <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#createRootDir-boolean-"><code>createRootDir(boolean create)</code></a>
  except that <code>create</code> flag is false.</div>
@@ -3126,7 +3127,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>createWALRootDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1332">createWALRootDir</a>()
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1333">createWALRootDir</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">Creates a hbase walDir in the user's home directory.
  Normally you won't make use of this method. Root hbaseWALDir
@@ -3146,7 +3147,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>flush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1354">flush</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1355">flush</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">Flushes all caches in the mini hbase cluster</div>
 <dl>
@@ -3161,7 +3162,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>flush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1362">flush</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1363">flush</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Flushes all caches in the mini hbase cluster</div>
 <dl>
@@ -3176,7 +3177,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>compact</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1370">compact</a>(boolean&nbsp;major)
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1371">compact</a>(boolean&nbsp;major)
              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">Compact all regions in the mini hbase cluster</div>
 <dl>
@@ -3191,7 +3192,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>compact</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1378">compact</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1379">compact</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                     boolean&nbsp;major)
              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">Compact all of a table's reagion in the mini hbase cluster</div>
@@ -3207,7 +3208,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1389">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1390">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;family)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a table.</div>
@@ -3228,7 +3229,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1401">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1402">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;families)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a table.</div>
@@ -3249,7 +3250,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1417">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1418">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          byte[]&nbsp;family)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a table.</div>
@@ -3270,7 +3271,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>createMultiRegionTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1430">createMultiRegionTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1431">createMultiRegionTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                     byte[]&nbsp;family,
                                     int&nbsp;numRegions)
                              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>
@@ -3293,7 +3294,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1447">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1448">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          byte[][]&nbsp;families)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a table.</div>
@@ -3314,7 +3315,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>createMultiRegionTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1459">createMultiRegionTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1460">createMultiRegionTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                     byte[][]&nbsp;families)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Create a table with multiple regions.</div>
@@ -3335,7 +3336,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1471">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1472">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          byte[][]&nbsp;families,
                          byte[][]&nbsp;splitKeys)
                   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>
@@ -3358,7 +3359,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1485">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1486">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          byte[][]&nbsp;families,
                          byte[][]&nbsp;splitKeys,
                          int&nbsp;replicaCount)
@@ -3383,7 +3384,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1491">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1492">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/TableName.html?is-external=true" title="class or interface in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                          byte[][]&nbsp;families,
                          int&nbsp;numVersions,
                          byte[]&nbsp;startKey,
@@ -3402,7 +3403,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1511">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd,
+<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.1512">createTable</a>(<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/TableDescriptor.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd,
                          byte[][]&nbsp;families,
                          org.apache.hadoop.conf.Configuration&nbsp;c)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -3425,7 +3426,7 @@ public&nbsp;<a href="../../../../org/apache/hadoop/hbase/MiniHBaseCluster.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>createTable</h4>
-<pre>public&nbsp;<a href="../../../../../apidocs/org/apache/hadoop/hbase/client/Table.html?is-external=true" title="class or interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTesti

<TRUNCATED>

[47/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.


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

Branch: refs/heads/asf-site
Commit: 9b6ca5d1e13f7519bc73fb811b0339e49d2fe2b8
Parents: 7166b50
Author: jenkins <bu...@apache.org>
Authored: Sun Oct 7 14:52:24 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Sun Oct 7 14:52:24 2018 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |     4 +-
 apache_hbase_reference_guide.pdf                |     4 +-
 book.html                                       |     2 +-
 bulk-loads.html                                 |     4 +-
 checkstyle-aggregate.html                       | 36120 ++++++++---------
 checkstyle.rss                                  |    44 +-
 coc.html                                        |     4 +-
 dependencies.html                               |     4 +-
 dependency-convergence.html                     |     4 +-
 dependency-info.html                            |     4 +-
 dependency-management.html                      |     4 +-
 devapidocs/allclasses-frame.html                |     8 +-
 devapidocs/allclasses-noframe.html              |     8 +-
 devapidocs/constant-values.html                 |    62 +-
 devapidocs/index-all.html                       |   387 +-
 ...ncrementalBackupManager.NewestLogFilter.html |    10 +-
 .../hadoop/hbase/backup/package-tree.html       |     4 +-
 .../hadoop/hbase/client/package-tree.html       |    26 +-
 .../hadoop/hbase/coprocessor/package-tree.html  |     2 +-
 .../hadoop/hbase/executor/package-tree.html     |     2 +-
 .../hadoop/hbase/filter/package-tree.html       |     8 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |     6 +-
 .../apache/hadoop/hbase/ipc/package-tree.html   |     2 +-
 .../hbase/master/balancer/package-tree.html     |     2 +-
 .../hadoop/hbase/master/package-tree.html       |     6 +-
 .../hbase/master/procedure/package-tree.html    |     2 +-
 .../hadoop/hbase/monitoring/package-tree.html   |     2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    14 +-
 .../hbase/procedure2/class-use/Procedure.html   |    76 +-
 .../hadoop/hbase/procedure2/package-tree.html   |     4 +-
 .../hbase/procedure2/store/BitSetNode.html      |   811 +
 .../procedure2/store/NoopProcedureStore.html    |    46 +-
 .../store/ProcedureStore.ProcedureIterator.html |     4 +-
 .../store/ProcedureStore.ProcedureLoader.html   |     8 +-
 .../hbase/procedure2/store/ProcedureStore.html  |    42 +-
 .../store/ProcedureStoreTracker.BitSetNode.html |   826 -
 .../ProcedureStoreTracker.DeleteState.html      |     4 +-
 .../procedure2/store/ProcedureStoreTracker.html |   324 +-
 .../procedure2/store/class-use/BitSetNode.html  |   279 +
 .../ProcedureStore.ProcedureIterator.html       |    23 +-
 .../ProcedureStoreTracker.BitSetNode.html       |   279 -
 .../ProcedureStoreTracker.DeleteState.html      |     2 +-
 .../store/class-use/ProcedureStoreTracker.html  |    25 +-
 .../hbase/procedure2/store/package-frame.html   |     2 +-
 .../hbase/procedure2/store/package-summary.html |    16 +-
 .../hbase/procedure2/store/package-tree.html    |     2 +-
 .../hbase/procedure2/store/package-use.html     |    20 +-
 .../CorruptedWALProcedureStoreException.html    |    51 +-
 .../procedure2/store/wal/ProcedureWALFile.html  |    71 +-
 ...cedureWALFormat.InvalidWALDataException.html |    54 +-
 .../store/wal/ProcedureWALFormat.Loader.html    |     4 +-
 .../store/wal/ProcedureWALFormat.html           |    70 +-
 .../wal/ProcedureWALFormatReader.Entry.html     |   503 -
 .../ProcedureWALFormatReader.EntryIterator.html |   429 -
 ...rocedureWALFormatReader.WalProcedureMap.html |   716 -
 .../store/wal/ProcedureWALFormatReader.html     |   163 +-
 .../store/wal/ProcedureWALPrettyPrinter.html    |     8 +-
 .../store/wal/WALProcedureMap.Entry.html        |   503 +
 .../wal/WALProcedureMap.EntryIterator.html      |   429 +
 .../procedure2/store/wal/WALProcedureMap.html   |   820 +
 .../wal/WALProcedureStore.LeaseRecovery.html    |     4 +-
 .../store/wal/WALProcedureStore.PushType.html   |    12 +-
 .../wal/WALProcedureStore.SyncMetrics.html      |    24 +-
 .../procedure2/store/wal/WALProcedureStore.html |   324 +-
 .../ProcedureWALFormatReader.Entry.html         |   305 -
 .../ProcedureWALFormatReader.EntryIterator.html |   169 -
 ...rocedureWALFormatReader.WalProcedureMap.html |   182 -
 .../wal/class-use/WALProcedureMap.Entry.html    |   307 +
 .../WALProcedureMap.EntryIterator.html          |   125 +
 .../store/wal/class-use/WALProcedureMap.html    |   182 +
 .../WALProcedureStore.SyncMetrics.html          |    13 +
 .../procedure2/store/wal/package-frame.html     |     6 +-
 .../procedure2/store/wal/package-summary.html   |    20 +-
 .../procedure2/store/wal/package-tree.html      |     6 +-
 .../hbase/procedure2/store/wal/package-use.html |    13 +-
 .../procedure2/util/class-use/ByteSlot.html     |    14 +-
 .../hadoop/hbase/quotas/package-tree.html       |     4 +-
 .../hadoop/hbase/regionserver/package-tree.html |    16 +-
 .../regionserver/querymatcher/package-tree.html |     2 +-
 .../hbase/regionserver/wal/package-tree.html    |     2 +-
 .../hadoop/hbase/rest/model/package-tree.html   |     2 +-
 .../hbase/security/access/package-tree.html     |     2 +-
 .../hadoop/hbase/security/package-tree.html     |     2 +-
 .../hadoop/hbase/thrift/package-tree.html       |     2 +-
 .../apache/hadoop/hbase/util/package-tree.html  |    10 +-
 devapidocs/overview-tree.html                   |     8 +-
 devapidocs/serialized-form.html                 |     8 +
 .../org/apache/hadoop/hbase/Version.html        |     6 +-
 ...ncrementalBackupManager.NewestLogFilter.html |   183 +-
 .../backup/impl/IncrementalBackupManager.html   |   183 +-
 .../hbase/procedure2/store/BitSetNode.html      |   469 +
 .../procedure2/store/NoopProcedureStore.html    |   155 +-
 .../store/ProcedureStore.ProcedureIterator.html |   273 +-
 .../store/ProcedureStore.ProcedureLoader.html   |   273 +-
 .../ProcedureStore.ProcedureStoreListener.html  |   273 +-
 .../hbase/procedure2/store/ProcedureStore.html  |   273 +-
 .../store/ProcedureStoreTracker.BitSetNode.html |   859 -
 .../ProcedureStoreTracker.DeleteState.html      |  1096 +-
 .../procedure2/store/ProcedureStoreTracker.html |  1096 +-
 .../CorruptedWALProcedureStoreException.html    |    26 +-
 .../procedure2/store/wal/ProcedureWALFile.html  |   387 +-
 ...cedureWALFormat.InvalidWALDataException.html |   158 +-
 .../store/wal/ProcedureWALFormat.Loader.html    |   158 +-
 .../store/wal/ProcedureWALFormat.html           |   158 +-
 .../wal/ProcedureWALFormatReader.Entry.html     |   936 -
 .../ProcedureWALFormatReader.EntryIterator.html |   936 -
 ...rocedureWALFormatReader.WalProcedureMap.html |   936 -
 .../store/wal/ProcedureWALFormatReader.html     |  1099 +-
 .../store/wal/ProcedureWALPrettyPrinter.html    |    52 +-
 .../store/wal/WALProcedureMap.Entry.html        |   679 +
 .../wal/WALProcedureMap.EntryIterator.html      |   679 +
 .../procedure2/store/wal/WALProcedureMap.html   |   679 +
 .../wal/WALProcedureStore.LeaseRecovery.html    |  2614 +-
 .../store/wal/WALProcedureStore.PushType.html   |  2614 +-
 .../wal/WALProcedureStore.SyncMetrics.html      |  2614 +-
 .../procedure2/store/wal/WALProcedureStore.html |  2614 +-
 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 +-
 .../hadoop/hbase/HBaseTestingUtility.html       |   469 +-
 .../hadoop/hbase/HBaseTestingUtility.html       |  8269 ++--
 testdevapidocs/index-all.html                   |     2 +-
 ...lity.PortAllocator.AvailablePortChecker.html |     4 +-
 .../HBaseTestingUtility.PortAllocator.html      |    20 +-
 .../HBaseTestingUtility.SeenRowTracker.html     |    20 +-
 .../hadoop/hbase/HBaseTestingUtility.html       |   529 +-
 .../store/TestProcedureStoreTracker.html        |    40 +-
 testdevapidocs/serialized-form.html             |     8 +
 ...lity.PortAllocator.AvailablePortChecker.html |  8269 ++--
 .../HBaseTestingUtility.PortAllocator.html      |  8269 ++--
 .../HBaseTestingUtility.SeenRowTracker.html     |  8269 ++--
 .../hadoop/hbase/HBaseTestingUtility.html       |  8269 ++--
 .../store/TestProcedureStoreTracker.html        |   539 +-
 ...LProcedureStore.TestSequentialProcedure.html |     4 +-
 .../store/wal/TestWALProcedureStore.html        |     4 +-
 154 files changed, 54265 insertions(+), 56412 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index 28ea9e1..3cf6935 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 515de48..e00d83f 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:20181005143314+00'00')
-/CreationDate (D:20181005144901+00'00')
+/ModDate (D:20181007143325+00'00')
+/CreationDate (D:20181007144858+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index e18db6e..2e1e354 100644
--- a/book.html
+++ b/book.html
@@ -41284,7 +41284,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-SNAPSHOT<br>
-Last updated 2018-10-05 14:33:14 UTC
+Last updated 2018-10-07 14:33:25 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index c5984ef..113ff66 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 


[25/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html
index 9d378e8..bd1b3f6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html
@@ -61,738 +61,400 @@
 <span class="sourceLineNo">053</span>   * It's set to true only when recovering from old logs. See {@link #isDeleted(long)} docs to<a name="line.53"></a>
 <span class="sourceLineNo">054</span>   * understand it's real use.<a name="line.54"></a>
 <span class="sourceLineNo">055</span>   */<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private boolean partial = false;<a name="line.56"></a>
+<span class="sourceLineNo">056</span>  boolean partial = false;<a name="line.56"></a>
 <span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  private long minUpdatedProcId = Long.MAX_VALUE;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  private long maxUpdatedProcId = Long.MIN_VALUE;<a name="line.59"></a>
+<span class="sourceLineNo">058</span>  private long minModifiedProcId = Long.MAX_VALUE;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  private long maxModifiedProcId = Long.MIN_VALUE;<a name="line.59"></a>
 <span class="sourceLineNo">060</span><a name="line.60"></a>
 <span class="sourceLineNo">061</span>  public enum DeleteState { YES, NO, MAYBE }<a name="line.61"></a>
 <span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span>  /**<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   * A bitmap which can grow/merge with other {@link BitSetNode} (if certain conditions are met).<a name="line.64"></a>
-<span class="sourceLineNo">065</span>   * Boundaries of bitmap are aligned to multiples of {@link BitSetNode#BITS_PER_WORD}. So the<a name="line.65"></a>
-<span class="sourceLineNo">066</span>   * range of a {@link BitSetNode} is from [x * K, y * K) where x and y are integers, y &gt; x and K<a name="line.66"></a>
-<span class="sourceLineNo">067</span>   * is BITS_PER_WORD.<a name="line.67"></a>
-<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  public static class BitSetNode {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    private final static long WORD_MASK = 0xffffffffffffffffL;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    private final static int ADDRESS_BITS_PER_WORD = 6;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    private final static int BITS_PER_WORD = 1 &lt;&lt; ADDRESS_BITS_PER_WORD;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    private final static int MAX_NODE_SIZE = 1 &lt;&lt; ADDRESS_BITS_PER_WORD;<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>     * Mimics {@link ProcedureStoreTracker#partial}.<a name="line.76"></a>
-<span class="sourceLineNo">077</span>     */<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    private final boolean partial;<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>    /* ----------------------<a name="line.80"></a>
-<span class="sourceLineNo">081</span>     * |  updated | deleted |  meaning<a name="line.81"></a>
-<span class="sourceLineNo">082</span>     * |     0    |   0     |  proc exists, but hasn't been updated since last resetUpdates().<a name="line.82"></a>
-<span class="sourceLineNo">083</span>     * |     1    |   0     |  proc was updated (but not deleted).<a name="line.83"></a>
-<span class="sourceLineNo">084</span>     * |     1    |   1     |  proc was deleted.<a name="line.84"></a>
-<span class="sourceLineNo">085</span>     * |     0    |   1     |  proc doesn't exist (maybe never created, maybe deleted in past).<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    /* ----------------------<a name="line.86"></a>
-<span class="sourceLineNo">087</span>     */<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span>    /**<a name="line.89"></a>
-<span class="sourceLineNo">090</span>     * Set of procedures which have been updated since last {@link #resetUpdates()}.<a name="line.90"></a>
-<span class="sourceLineNo">091</span>     * Useful to track procedures which have been updated since last WAL write.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>     */<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    private long[] updated;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    /**<a name="line.94"></a>
-<span class="sourceLineNo">095</span>     * Keeps track of procedure ids which belong to this bitmap's range and have been deleted.<a name="line.95"></a>
-<span class="sourceLineNo">096</span>     * This represents global state since it's not reset on WAL rolls.<a name="line.96"></a>
-<span class="sourceLineNo">097</span>     */<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    private long[] deleted;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    /**<a name="line.99"></a>
-<span class="sourceLineNo">100</span>     * Offset of bitmap i.e. procedure id corresponding to first bit.<a name="line.100"></a>
-<span class="sourceLineNo">101</span>     */<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    private long start;<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>    public void dump() {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      System.out.printf("%06d:%06d min=%d max=%d%n", getStart(), getEnd(),<a name="line.105"></a>
-<span class="sourceLineNo">106</span>        getActiveMinProcId(), getActiveMaxProcId());<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      System.out.println("Update:");<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      for (int i = 0; i &lt; updated.length; ++i) {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>        for (int j = 0; j &lt; BITS_PER_WORD; ++j) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>          System.out.print((updated[i] &amp; (1L &lt;&lt; j)) != 0 ? "1" : "0");<a name="line.110"></a>
-<span class="sourceLineNo">111</span>        }<a name="line.111"></a>
-<span class="sourceLineNo">112</span>        System.out.println(" " + i);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      }<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      System.out.println();<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      System.out.println("Delete:");<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      for (int i = 0; i &lt; deleted.length; ++i) {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        for (int j = 0; j &lt; BITS_PER_WORD; ++j) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>          System.out.print((deleted[i] &amp; (1L &lt;&lt; j)) != 0 ? "1" : "0");<a name="line.118"></a>
-<span class="sourceLineNo">119</span>        }<a name="line.119"></a>
-<span class="sourceLineNo">120</span>        System.out.println(" " + i);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      System.out.println();<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    }<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>    public BitSetNode(final long procId, final boolean partial) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      start = alignDown(procId);<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>      int count = 1;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      updated = new long[count];<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      deleted = new long[count];<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      for (int i = 0; i &lt; count; ++i) {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        updated[i] = 0;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>        deleted[i] = partial ? 0 : WORD_MASK;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      }<a name="line.134"></a>
+<span class="sourceLineNo">063</span>  public void resetToProto(ProcedureProtos.ProcedureStoreTracker trackerProtoBuf) {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    reset();<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    for (ProcedureProtos.ProcedureStoreTracker.TrackerNode protoNode: trackerProtoBuf.getNodeList()) {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>      final BitSetNode node = new BitSetNode(protoNode);<a name="line.66"></a>
+<span class="sourceLineNo">067</span>      map.put(node.getStart(), node);<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    }<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  }<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>  /**<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   * Resets internal state to same as given {@code tracker}. Does deep copy of the bitmap.<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   */<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  public void resetTo(ProcedureStoreTracker tracker) {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    resetTo(tracker, false);<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>  /**<a name="line.78"></a>
+<span class="sourceLineNo">079</span>   * Resets internal state to same as given {@code tracker}, and change the deleted flag according<a name="line.79"></a>
+<span class="sourceLineNo">080</span>   * to the modified flag if {@code resetDelete} is true. Does deep copy of the bitmap.<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * &lt;p/&gt;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   * The {@code resetDelete} will be set to true when building cleanup tracker, please see the<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   * comments in {@link BitSetNode#BitSetNode(BitSetNode, boolean)} to learn how we change the<a name="line.83"></a>
+<span class="sourceLineNo">084</span>   * deleted flag if {@code resetDelete} is true.<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   */<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  public void resetTo(ProcedureStoreTracker tracker, boolean resetDelete) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    reset();<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    this.partial = tracker.partial;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    this.minModifiedProcId = tracker.minModifiedProcId;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    this.maxModifiedProcId = tracker.maxModifiedProcId;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    this.keepDeletes = tracker.keepDeletes;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : tracker.map.entrySet()) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      map.put(entry.getKey(), new BitSetNode(entry.getValue(), resetDelete));<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    }<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public void insert(long procId) {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    insert(null, procId);<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>  public void insert(long[] procIds) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      insert(procIds[i]);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    }<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  }<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>  public void insert(long procId, long[] subProcIds) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    BitSetNode node = update(null, procId);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    for (int i = 0; i &lt; subProcIds.length; ++i) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      node = insert(node, subProcIds[i]);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    }<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  }<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>  private BitSetNode insert(BitSetNode node, long procId) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    if (node == null || !node.contains(procId)) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      node = getOrCreateNode(procId);<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    node.insertOrUpdate(procId);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    trackProcIds(procId);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    return node;<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>  public void update(long procId) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    update(null, procId);<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>  private BitSetNode update(BitSetNode node, long procId) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    node = lookupClosestNode(node, procId);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    assert node != null : "expected node to update procId=" + procId;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    assert node.contains(procId) : "expected procId=" + procId + " in the node";<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    node.insertOrUpdate(procId);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    trackProcIds(procId);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    return node;<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>      this.partial = partial;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      updateState(procId, false);<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
+<span class="sourceLineNo">136</span>  public void delete(long procId) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    delete(null, procId);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  }<a name="line.138"></a>
 <span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    protected BitSetNode(final long start, final long[] updated, final long[] deleted) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      this.start = start;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      this.updated = updated;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      this.deleted = deleted;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      this.partial = false;<a name="line.144"></a>
+<span class="sourceLineNo">140</span>  public void delete(final long[] procIds) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    Arrays.sort(procIds);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    BitSetNode node = null;<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      node = delete(node, procIds[i]);<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>    public BitSetNode(ProcedureProtos.ProcedureStoreTracker.TrackerNode data) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      start = data.getStartId();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      int size = data.getUpdatedCount();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      updated = new long[size];<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      deleted = new long[size];<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      for (int i = 0; i &lt; size; ++i) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        updated[i] = data.getUpdated(i);<a name="line.153"></a>
-<span class="sourceLineNo">154</span>        deleted[i] = data.getDeleted(i);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      partial = false;<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>    public BitSetNode(final BitSetNode other, final boolean resetDelete) {<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      this.start = other.start;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      this.partial = other.partial;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      this.updated = other.updated.clone();<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      if (resetDelete) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        this.deleted = new long[other.deleted.length];<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        for (int i = 0; i &lt; this.deleted.length; ++i) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>          this.deleted[i] = ~(other.updated[i]);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        }<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      } else {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>        this.deleted = other.deleted.clone();<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    }<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>    public void update(final long procId) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      updateState(procId, false);<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>    public void delete(final long procId) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      updateState(procId, true);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    }<a name="line.179"></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>  private BitSetNode delete(BitSetNode node, long procId) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    node = lookupClosestNode(node, procId);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    assert node != null : "expected node to delete procId=" + procId;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    assert node.contains(procId) : "expected procId=" + procId + " in the node";<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    node.delete(procId);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    if (!keepDeletes &amp;&amp; node.isEmpty()) {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      // TODO: RESET if (map.size() == 1)<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      map.remove(node.getStart());<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>    trackProcIds(procId);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    return node;<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>   * Will be called when restarting where we need to rebuild the ProcedureStoreTracker.<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   */<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  public void setMinMaxModifiedProcIds(long min, long max) {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    this.minModifiedProcId = min;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    this.maxModifiedProcId = max;<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>   * This method is used when restarting where we need to rebuild the ProcedureStoreTracker. The<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * {@link #delete(long)} method above assume that the {@link BitSetNode} exists, but when restart<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * this is not true, as we will read the wal files in reverse order so a delete may come first.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   */<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public void setDeleted(long procId, boolean isDeleted) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    BitSetNode node = getOrCreateNode(procId);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    assert node.contains(procId) : "expected procId=" + procId + " in the node=" + node;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    node.updateState(procId, isDeleted);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    trackProcIds(procId);<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>    public long getStart() {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      return start;<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>    public long getEnd() {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      return start + (updated.length &lt;&lt; ADDRESS_BITS_PER_WORD) - 1;<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>    public boolean contains(final long procId) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      return start &lt;= procId &amp;&amp; procId &lt;= getEnd();<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>    public DeleteState isDeleted(final long procId) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      int bitmapIndex = getBitmapIndex(procId);<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      int wordIndex = bitmapIndex &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      if (wordIndex &gt;= deleted.length) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        return DeleteState.MAYBE;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      }<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      return (deleted[wordIndex] &amp; (1L &lt;&lt; bitmapIndex)) != 0 ? DeleteState.YES : DeleteState.NO;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    private boolean isUpdated(final long procId) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      int bitmapIndex = getBitmapIndex(procId);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      int wordIndex = bitmapIndex &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      if (wordIndex &gt;= updated.length) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        return false;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      }<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      return (updated[wordIndex] &amp; (1L &lt;&lt; bitmapIndex)) != 0;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>    public boolean isUpdated() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      // TODO: cache the value<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      for (int i = 0; i &lt; updated.length; ++i) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        if ((updated[i] | deleted[i]) != WORD_MASK) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>          return false;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        }<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      }<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      return true;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>    /**<a name="line.221"></a>
-<span class="sourceLineNo">222</span>     * @return true, if there are no active procedures in this BitSetNode, else false.<a name="line.222"></a>
-<span class="sourceLineNo">223</span>     */<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    public boolean isEmpty() {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      // TODO: cache the value<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      for (int i = 0; i &lt; deleted.length; ++i) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        if (deleted[i] != WORD_MASK) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>          return false;<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>      return true;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    }<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>    public void resetUpdates() {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      for (int i = 0; i &lt; updated.length; ++i) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        updated[i] = 0;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      }<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>     * Clears the {@link #deleted} bitmaps.<a name="line.241"></a>
-<span class="sourceLineNo">242</span>     */<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    public void undeleteAll() {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      for (int i = 0; i &lt; updated.length; ++i) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        deleted[i] = 0;<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">181</span>  /**<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * Set the given bit for the procId to delete if it was modified before.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * &lt;p/&gt;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * This method is used to test whether a procedure wal file can be safely deleted, as if all the<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   * procedures in the given procedure wal file has been modified in the new procedure wal files,<a name="line.185"></a>
+<span class="sourceLineNo">186</span>   * then we can delete it.<a name="line.186"></a>
+<span class="sourceLineNo">187</span>   */<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  public void setDeletedIfModified(long... procId) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    BitSetNode node = null;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    for (int i = 0; i &lt; procId.length; ++i) {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      node = lookupClosestNode(node, procId[i]);<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      if (node != null &amp;&amp; node.isModified(procId[i])) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        node.delete(procId[i]);<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>  }<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>   * Similar with {@link #setDeletedIfModified(long...)}, but here the {@code procId} are given by<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   * the {@code tracker}. If a procedure is modified by us, and also by the given {@code tracker},<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * then we mark it as deleted.<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   * @see #setDeletedIfModified(long...)<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   */<a name="line.203"></a>
+<span class="sourceLineNo">204</span>  public void setDeletedIfModifiedInBoth(ProcedureStoreTracker tracker) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    BitSetNode trackerNode = null;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    for (BitSetNode node : map.values()) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      final long minProcId = node.getStart();<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      final long maxProcId = node.getEnd();<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      for (long procId = minProcId; procId &lt;= maxProcId; ++procId) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        if (!node.isModified(procId)) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>          continue;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        }<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>        trackerNode = tracker.lookupClosestNode(trackerNode, procId);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        if (trackerNode == null || !trackerNode.contains(procId) ||<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          trackerNode.isModified(procId)) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          // the procedure was removed or modified<a name="line.217"></a>
+<span class="sourceLineNo">218</span>          node.delete(procId);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      }<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    }<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>  /**<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * lookup the node containing the specified procId.<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * @param node cached node to check before doing a lookup<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @param procId the procId to lookup<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * @return the node that may contains the procId or null<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   */<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  private BitSetNode lookupClosestNode(final BitSetNode node, final long procId) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    if (node != null &amp;&amp; node.contains(procId)) return node;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    final Map.Entry&lt;Long, BitSetNode&gt; entry = map.floorEntry(procId);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    return entry != null ? entry.getValue() : null;<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>  private void trackProcIds(long procId) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    minModifiedProcId = Math.min(minModifiedProcId, procId);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    maxModifiedProcId = Math.max(maxModifiedProcId, procId);<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>  public long getModifiedMinProcId() {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    return minModifiedProcId;<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>  public long getModifiedMaxProcId() {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    return maxModifiedProcId;<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>    public void unsetPartialFlag() {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      for (int i = 0; i &lt; updated.length; ++i) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        for (int j = 0; j &lt; BITS_PER_WORD; ++j) {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          if ((updated[i] &amp; (1L &lt;&lt; j)) == 0) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>            deleted[i] |= (1L &lt;&lt; j);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          }<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    }<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>     * Convert to<a name="line.260"></a>
-<span class="sourceLineNo">261</span>     * org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode<a name="line.261"></a>
-<span class="sourceLineNo">262</span>     * protobuf.<a name="line.262"></a>
-<span class="sourceLineNo">263</span>     */<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    public ProcedureProtos.ProcedureStoreTracker.TrackerNode convert() {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      ProcedureProtos.ProcedureStoreTracker.TrackerNode.Builder builder =<a name="line.265"></a>
-<span class="sourceLineNo">266</span>        ProcedureProtos.ProcedureStoreTracker.TrackerNode.newBuilder();<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      builder.setStartId(start);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>      for (int i = 0; i &lt; updated.length; ++i) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        builder.addUpdated(updated[i]);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        builder.addDeleted(deleted[i]);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      }<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      return builder.build();<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>    // ========================================================================<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    //  Grow/Merge Helpers<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    // ========================================================================<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    public boolean canGrow(final long procId) {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      return Math.abs(procId - start) &lt; MAX_NODE_SIZE;<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>    public boolean canMerge(final BitSetNode rightNode) {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      // Can just compare 'starts' since boundaries are aligned to multiples of BITS_PER_WORD.<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      assert start &lt; rightNode.start;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      return (rightNode.getEnd() - start) &lt; MAX_NODE_SIZE;<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>    public void grow(final long procId) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      int delta, offset;<a name="line.289"></a>
-<span class="sourceLineNo">290</span><a name="line.290"></a>
-<span class="sourceLineNo">291</span>      if (procId &lt; start) {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>        // add to head<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        long newStart = alignDown(procId);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>        delta = (int)(start - newStart) &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        offset = delta;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        start = newStart;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      } else {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        // Add to tail<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        long newEnd = alignUp(procId + 1);<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        delta = (int)(newEnd - getEnd()) &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        offset = 0;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      }<a name="line.302"></a>
+<span class="sourceLineNo">249</span>  public void reset() {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    this.keepDeletes = false;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    this.partial = false;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    this.map.clear();<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    resetModified();<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>  public boolean isModified(long procId) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    final Map.Entry&lt;Long, BitSetNode&gt; entry = map.floorEntry(procId);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    return entry != null &amp;&amp; entry.getValue().contains(procId) &amp;&amp;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      entry.getValue().isModified(procId);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>  }<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span>  /**<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   * If {@link #partial} is false, returns state from the bitmap. If no state is found for<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   * {@code procId}, returns YES.<a name="line.264"></a>
+<span class="sourceLineNo">265</span>   * If partial is true, tracker doesn't have complete view of system state, so it returns MAYBE<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * if there is no update for the procedure or if it doesn't have a state in bitmap. Otherwise,<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   * returns state from the bitmap.<a name="line.267"></a>
+<span class="sourceLineNo">268</span>   */<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  public DeleteState isDeleted(long procId) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    Map.Entry&lt;Long, BitSetNode&gt; entry = map.floorEntry(procId);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    if (entry != null &amp;&amp; entry.getValue().contains(procId)) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      BitSetNode node = entry.getValue();<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      DeleteState state = node.isDeleted(procId);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      return partial &amp;&amp; !node.isModified(procId) ? DeleteState.MAYBE : state;<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    return partial ? DeleteState.MAYBE : DeleteState.YES;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  }<a name="line.277"></a>
+<span class="sourceLineNo">278</span><a name="line.278"></a>
+<span class="sourceLineNo">279</span>  public long getActiveMinProcId() {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    // TODO: Cache?<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    Map.Entry&lt;Long, BitSetNode&gt; entry = map.firstEntry();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    return entry == null ? 0 : entry.getValue().getActiveMinProcId();<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>  public void setKeepDeletes(boolean keepDeletes) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    this.keepDeletes = keepDeletes;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    // If not to keep deletes, remove the BitSetNodes which are empty (i.e. contains ids of deleted<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    // procedures).<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    if (!keepDeletes) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      Iterator&lt;Map.Entry&lt;Long, BitSetNode&gt;&gt; it = map.entrySet().iterator();<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      while (it.hasNext()) {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>        Map.Entry&lt;Long, BitSetNode&gt; entry = it.next();<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        if (entry.getValue().isEmpty()) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>          it.remove();<a name="line.294"></a>
+<span class="sourceLineNo">295</span>        }<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      }<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  }<a name="line.298"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>  public boolean isPartial() {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    return partial;<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>      long[] newBitmap;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      int oldSize = updated.length;<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span>      newBitmap = new long[oldSize + delta];<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      for (int i = 0; i &lt; newBitmap.length; ++i) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        newBitmap[i] = 0;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      System.arraycopy(updated, 0, newBitmap, offset, oldSize);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      updated = newBitmap;<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>      newBitmap = new long[deleted.length + delta];<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      for (int i = 0; i &lt; newBitmap.length; ++i) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        newBitmap[i] = partial ? 0 : WORD_MASK;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      System.arraycopy(deleted, 0, newBitmap, offset, oldSize);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      deleted = newBitmap;<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 void merge(final BitSetNode rightNode) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      int delta = (int)(rightNode.getEnd() - getEnd()) &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.323"></a>
+<span class="sourceLineNo">304</span>  public void setPartialFlag(boolean isPartial) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    if (this.partial &amp;&amp; !isPartial) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        entry.getValue().unsetPartialFlag();<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>    this.partial = isPartial;<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>   * @return true, if no procedure is active, else false.<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   */<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  public boolean isEmpty() {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      if (!entry.getValue().isEmpty()) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        return false;<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>    return true;<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>      long[] newBitmap;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      int oldSize = updated.length;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      int newSize = (delta - rightNode.updated.length);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      int offset = oldSize + newSize;<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>      newBitmap = new long[oldSize + delta];<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      System.arraycopy(updated, 0, newBitmap, 0, oldSize);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      System.arraycopy(rightNode.updated, 0, newBitmap, offset, rightNode.updated.length);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      updated = newBitmap;<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>      newBitmap = new long[oldSize + delta];<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      System.arraycopy(deleted, 0, newBitmap, 0, oldSize);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      System.arraycopy(rightNode.deleted, 0, newBitmap, offset, rightNode.deleted.length);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      deleted = newBitmap;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>      for (int i = 0; i &lt; newSize; ++i) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>        updated[offset + i] = 0;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        deleted[offset + i] = partial ? 0 : WORD_MASK;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
-<span class="sourceLineNo">345</span><a name="line.345"></a>
-<span class="sourceLineNo">346</span>    @Override<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    public String toString() {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      return "BitSetNode(" + getStart() + "-" + getEnd() + ")";<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    }<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>    //  Min/Max Helpers<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    // ========================================================================<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    public long getActiveMinProcId() {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      long minProcId = start;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      for (int i = 0; i &lt; deleted.length; ++i) {<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        if (deleted[i] == 0) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>          return(minProcId);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        }<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>        if (deleted[i] != WORD_MASK) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          for (int j = 0; j &lt; BITS_PER_WORD; ++j) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>            if ((deleted[i] &amp; (1L &lt;&lt; j)) != 0) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>              return minProcId + j;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>            }<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          }<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        }<a name="line.367"></a>
-<span class="sourceLineNo">368</span><a name="line.368"></a>
-<span class="sourceLineNo">369</span>        minProcId += BITS_PER_WORD;<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      }<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      return minProcId;<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 long getActiveMaxProcId() {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      long maxProcId = getEnd();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      for (int i = deleted.length - 1; i &gt;= 0; --i) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        if (deleted[i] == 0) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          return maxProcId;<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>        if (deleted[i] != WORD_MASK) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>          for (int j = BITS_PER_WORD - 1; j &gt;= 0; --j) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>            if ((deleted[i] &amp; (1L &lt;&lt; j)) == 0) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>              return maxProcId - (BITS_PER_WORD - 1 - j);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>            }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>          }<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        maxProcId -= BITS_PER_WORD;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      return maxProcId;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>    // ========================================================================<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    //  Bitmap Helpers<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    // ========================================================================<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    private int getBitmapIndex(final long procId) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      return (int)(procId - start);<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>    private void updateState(final long procId, final boolean isDeleted) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      int bitmapIndex = getBitmapIndex(procId);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      int wordIndex = bitmapIndex &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      long value = (1L &lt;&lt; bitmapIndex);<a name="line.403"></a>
-<span class="sourceLineNo">404</span><a name="line.404"></a>
-<span class="sourceLineNo">405</span>      updated[wordIndex] |= value;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      if (isDeleted) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        deleted[wordIndex] |= value;<a name="line.407"></a>
-<span class="sourceLineNo">408</span>      } else {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        deleted[wordIndex] &amp;= ~value;<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      }<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
+<span class="sourceLineNo">325</span>  /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * @return true if all procedure was modified or deleted since last call to<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   *         {@link #resetModified()}.<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   */<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  public boolean isAllModified() {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      if (!entry.getValue().isAllModified()) {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        return false;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      }<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    }<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    return true;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>  }<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span>  /**<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   * Clears the list of updated procedure ids. This doesn't affect global list of active<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * procedure ids.<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   */<a name="line.341"></a>
+<span class="sourceLineNo">342</span>  public void resetModified() {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      entry.getValue().resetModified();<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    minModifiedProcId = Long.MAX_VALUE;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    maxModifiedProcId = Long.MIN_VALUE;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>  }<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span>  private BitSetNode getOrCreateNode(long procId) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    // If procId can fit in left node (directly or by growing it)<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    BitSetNode leftNode = null;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    boolean leftCanGrow = false;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    Map.Entry&lt;Long, BitSetNode&gt; leftEntry = map.floorEntry(procId);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    if (leftEntry != null) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      leftNode = leftEntry.getValue();<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      if (leftNode.contains(procId)) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        return leftNode;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      }<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      leftCanGrow = leftNode.canGrow(procId);<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>    // If procId can fit in right node (directly or by growing it)<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    BitSetNode rightNode = null;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    boolean rightCanGrow = false;<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    Map.Entry&lt;Long, BitSetNode&gt; rightEntry = map.ceilingEntry(procId);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    if (rightEntry != null) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      rightNode = rightEntry.getValue();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      rightCanGrow = rightNode.canGrow(procId);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      if (leftNode != null) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>        if (leftNode.canMerge(rightNode)) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>          // merge left and right node<a name="line.372"></a>
+<span class="sourceLineNo">373</span>          return mergeNodes(leftNode, rightNode);<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>        // If left and right nodes can not merge, decide which one to grow.<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        if (leftCanGrow &amp;&amp; rightCanGrow) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>          if ((procId - leftNode.getEnd()) &lt;= (rightNode.getStart() - procId)) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>            return growNode(leftNode, procId);<a name="line.379"></a>
+<span class="sourceLineNo">380</span>          }<a name="line.380"></a>
+<span class="sourceLineNo">381</span>          return growNode(rightNode, procId);<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>    }<a name="line.384"></a>
+<span class="sourceLineNo">385</span><a name="line.385"></a>
+<span class="sourceLineNo">386</span>    // grow the left node<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    if (leftCanGrow) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>      return growNode(leftNode, procId);<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>    // grow the right node<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    if (rightCanGrow) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      return growNode(rightNode, procId);<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>    // add new node if there are no left/right nodes which can be used.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    BitSetNode node = new BitSetNode(procId, partial);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    map.put(node.getStart(), node);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    return node;<a name="line.399"></a>
+<span class="sourceLineNo">400</span>  }<a name="line.400"></a>
+<span class="sourceLineNo">401</span><a name="line.401"></a>
+<span class="sourceLineNo">402</span>  /**<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * Grows {@code node} to contain {@code procId} and updates the map.<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   * @return {@link BitSetNode} instance which contains {@code procId}.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   */<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  private BitSetNode growNode(BitSetNode node, long procId) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    map.remove(node.getStart());<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    node.grow(procId);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    map.put(node.getStart(), node);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    return node;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>  }<a name="line.411"></a>
 <span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span>    // ========================================================================<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    //  Helpers<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    // ========================================================================<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    /**<a name="line.417"></a>
-<span class="sourceLineNo">418</span>     * @return upper boundary (aligned to multiple of BITS_PER_WORD) of bitmap range x belongs to.<a name="line.418"></a>
-<span class="sourceLineNo">419</span>     */<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    private static long alignUp(final long x) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      return (x + (BITS_PER_WORD - 1)) &amp; -BITS_PER_WORD;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    }<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>     * @return lower boundary (aligned to multiple of BITS_PER_WORD) of bitmap range x belongs to.<a name="line.425"></a>
-<span class="sourceLineNo">426</span>     */<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    private static long alignDown(final long x) {<a name="line.427"></a>
-<span class="sourceLineNo">428</span>      return x &amp; -BITS_PER_WORD;<a name="line.428"></a>
+<span class="sourceLineNo">413</span>  /**<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   * Merges {@code leftNode} &amp; {@code rightNode} and updates the map.<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   */<a name="line.415"></a>
+<span class="sourceLineNo">416</span>  private BitSetNode mergeNodes(BitSetNode leftNode, BitSetNode rightNode) {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    assert leftNode.getStart() &lt; rightNode.getStart();<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    leftNode.merge(rightNode);<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    map.remove(rightNode.getStart());<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    return leftNode;<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>  public void dump() {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    System.out.println("map " + map.size());<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    System.out.println("isAllModified " + isAllModified());<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    System.out.println("isEmpty " + isEmpty());<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.427"></a>
+<span class="sourceLineNo">428</span>      entry.getValue().dump();<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><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  public void resetToProto(final ProcedureProtos.ProcedureStoreTracker trackerProtoBuf) {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    reset();<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    for (ProcedureProtos.ProcedureStoreTracker.TrackerNode protoNode: trackerProtoBuf.getNodeList()) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      final BitSetNode node = new BitSetNode(protoNode);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      map.put(node.getStart(), node);<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  /**<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   * Resets internal state to same as given {@code tracker}. Does deep copy of the bitmap.<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   */<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  public void resetTo(final ProcedureStoreTracker tracker) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    resetTo(tracker, false);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>  }<a name="line.445"></a>
-<span class="sourceLineNo">446</span><a name="line.446"></a>
-<span class="sourceLineNo">447</span>  public void resetTo(final ProcedureStoreTracker tracker, final boolean resetDelete) {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    this.partial = tracker.partial;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    this.minUpdatedProcId = tracker.minUpdatedProcId;<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    this.maxUpdatedProcId = tracker.maxUpdatedProcId;<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    this.keepDeletes = tracker.keepDeletes;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : tracker.map.entrySet()) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      map.put(entry.getKey(), new BitSetNode(entry.getValue(), resetDelete));<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>  public void insert(long procId) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    insert(null, procId);<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>  public void insert(final long[] procIds) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      insert(procIds[i]);<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>  public void insert(final long procId, final long[] subProcIds) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    BitSetNode node = null;<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    node = update(node, procId);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    for (int i = 0; i &lt; subProcIds.length; ++i) {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      node = insert(node, subProcIds[i]);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>  }<a name="line.473"></a>
-<span class="sourceLineNo">474</span><a name="line.474"></a>
-<span class="sourceLineNo">475</span>  private BitSetNode insert(BitSetNode node, final long procId) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    if (node == null || !node.contains(procId)) {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      node = getOrCreateNode(procId);<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    node.update(procId);<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    trackProcIds(procId);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    return node;<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>  public void update(long procId) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    update(null, procId);<a name="line.485"></a>
-<span class="sourceLineNo">486</span>  }<a name="line.486"></a>
-<span class="sourceLineNo">487</span><a name="line.487"></a>
-<span class="sourceLineNo">488</span>  private BitSetNode update(BitSetNode node, final long procId) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    node = lookupClosestNode(node, procId);<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    assert node != null : "expected node to update procId=" + procId;<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    assert node.contains(procId) : "expected procId=" + procId + " in the node";<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    node.update(procId);<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    trackProcIds(procId);<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    return node;<a name="line.494"></a>
-<span class="sourceLineNo">495</span>  }<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>  public void delete(long procId) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    delete(null, procId);<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span>  public void delete(final long[] procIds) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    Arrays.sort(procIds);<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    BitSetNode node = null;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      node = delete(node, procIds[i]);<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    }<a name="line.506"></a>
-<span class="sourceLineNo">507</span>  }<a name="line.507"></a>
-<span class="sourceLineNo">508</span><a name="line.508"></a>
-<span class="sourceLineNo">509</span>  private BitSetNode delete(BitSetNode node, final long procId) {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    node = lookupClosestNode(node, procId);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    assert node != null : "expected node to delete procId=" + procId;<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    assert node.contains(procId) : "expected procId=" + procId + " in the node";<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    node.delete(procId);<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    if (!keepDeletes &amp;&amp; node.isEmpty()) {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      // TODO: RESET if (map.size() == 1)<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      map.remove(node.getStart());<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span>    trackProcIds(procId);<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    return node;<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>  @InterfaceAudience.Private<a name="line.523"></a>
-<span class="sourceLineNo">524</span>  public void setDeleted(final long procId, final boolean isDeleted) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    BitSetNode node = getOrCreateNode(procId);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    assert node.contains(procId) : "expected procId=" + procId + " in the node=" + node;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    node.updateState(procId, isDeleted);<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    trackProcIds(procId);<a name="line.528"></a>
-<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>  public void setDeletedIfSet(final long... procId) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    BitSetNode node = null;<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    for (int i = 0; i &lt; procId.length; ++i) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      node = lookupClosestNode(node, procId[i]);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (node != null &amp;&amp; node.isUpdated(procId[i])) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        node.delete(procId[i]);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      }<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>  }<a name="line.539"></a>
-<span class="sourceLineNo">540</span><a name="line.540"></a>
-<span class="sourceLineNo">541</span>  public void setDeletedIfSet(final ProcedureStoreTracker tracker) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    BitSetNode trackerNode = null;<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    for (BitSetNode node: map.values()) {<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      final long minProcId = node.getStart();<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      final long maxProcId = node.getEnd();<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      for (long procId = minProcId; procId &lt;= maxProcId; ++procId) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>        if (!node.isUpdated(procId)) continue;<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>        trackerNode = tracker.lookupClosestNode(trackerNode, procId);<a name="line.549"></a>
-<span class="sourceLineNo">550</span>        if (trackerNode == null || !trackerNode.contains(procId) || trackerNode.isUpdated(procId)) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>          // the procedure was removed or updated<a name="line.551"></a>
-<span class="sourceLineNo">552</span>          node.delete(procId);<a name="line.552"></a>
-<span class="sourceLineNo">553</span>        }<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      }<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    }<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  }<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>   * lookup the node containing the specified procId.<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * @param node cached node to check before doing a lookup<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   * @param procId the procId to lookup<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * @return the node that may contains the procId or null<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   */<a name="line.563"></a>
-<span class="sourceLineNo">564</span>  private BitSetNode lookupClosestNode(final BitSetNode node, final long procId) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    if (node != null &amp;&amp; node.contains(procId)) return node;<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    final Map.Entry&lt;Long, BitSetNode&gt; entry = map.floorEntry(procId);<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    return entry != null ? entry.getValue() : null;<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>  private void trackProcIds(long procId) {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    minUpdatedProcId = Math.min(minUpdatedProcId, procId);<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    maxUpdatedProcId = Math.max(maxUpdatedProcId, procId);<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  }<a name="line.573"></a>
-<span class="sourceLineNo">574</span><a name="line.574"></a>
-<span class="sourceLineNo">575</span>  public long getUpdatedMinProcId() {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    return minUpdatedProcId;<a name="line.576"></a>
-<span class="sourceLineNo">577</span>  }<a name="line.577"></a>
-<span class="sourceLineNo">578</span><a name="line.578"></a>
-<span class="sourceLineNo">579</span>  public long getUpdatedMaxProcId() {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    return maxUpdatedProcId;<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>  public void reset() {<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    this.keepDeletes = false;<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    this.partial = false;<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    this.map.clear();<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    resetUpdates();<a name="line.587"></a>
-<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>  public boolean isUpdated(long procId) {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    final Map.Entry&lt;Long, BitSetNode&gt; entry = map.floorEntry(procId);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return entry != null &amp;&amp; entry.getValue().contains(procId) &amp;&amp; entry.getValue().isUpdated(procId);<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>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * If {@link #partial} is false, returns state from the bitmap. If no state is found for<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * {@code procId}, returns YES.<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   * If partial is true, tracker doesn't have complete view of system state, so it returns MAYBE<a name="line.598"></a>
-<span class="sourceLineNo">599</span>   * if there is no update for the procedure or if it doesn't have a state in bitmap. Otherwise,<a name="line.599"></a>
-<span class="sourceLineNo">600</span>   * returns state from the bitmap.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>   */<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  public DeleteState isDeleted(long procId) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    Map.Entry&lt;Long, BitSetNode&gt; entry = map.floorEntry(procId);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    if (entry != null &amp;&amp; entry.getValue().contains(procId)) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      BitSetNode node = entry.getValue();<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      DeleteState state = node.isDeleted(procId);<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      return partial &amp;&amp; !node.isUpdated(procId) ? DeleteState.MAYBE : state;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    return partial ? DeleteState.MAYBE : DeleteState.YES;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>  }<a name="line.610"></a>
-<span class="sourceLineNo">611</span><a name="line.611"></a>
-<span class="sourceLineNo">612</span>  public long getActiveMinProcId() {<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    // TODO: Cache?<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    Map.Entry&lt;Long, BitSetNode&gt; entry = map.firstEntry();<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    return entry == null ? 0 : entry.getValue().getActiveMinProcId();<a name="line.615"></a>
-<span class="sourceLineNo">616</span>  }<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>  public void setKeepDeletes(boolean keepDeletes) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    this.keepDeletes = keepDeletes;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    // If not to keep deletes, remove the BitSetNodes which are empty (i.e. contains ids of deleted<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    // procedures).<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    if (!keepDeletes) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      Iterator&lt;Map.Entry&lt;Long, BitSetNode&gt;&gt; it = map.entrySet().iterator();<a name="line.623"></a>
-<span class="sourceLineNo">624</span>      while (it.hasNext()) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        Map.Entry&lt;Long, BitSetNode&gt; entry = it.next();<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        if (entry.getValue().isEmpty()) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>          it.remove();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        }<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>  public boolean isPartial() {<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    return partial;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  }<a name="line.635"></a>
-<span class="sourceLineNo">636</span><a name="line.636"></a>
-<span class="sourceLineNo">637</span>  public void setPartialFlag(boolean isPartial) {<a name="line.637"></a>
-<span class="s

<TRUNCATED>

[28/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html
index 2725fa1..ff29160 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html
@@ -89,142 +89,143 @@
 <span class="sourceLineNo">081</span>     * @throws IOException if there was an error fetching/deserializing the procedure<a name="line.81"></a>
 <span class="sourceLineNo">082</span>     * @return the next procedure in the iteration.<a name="line.82"></a>
 <span class="sourceLineNo">083</span>     */<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    Procedure next() throws IOException;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  }<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  /**<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * Interface passed to the ProcedureStore.load() method to handle the store-load events.<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   */<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  public interface ProcedureLoader {<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    /**<a name="line.91"></a>
-<span class="sourceLineNo">092</span>     * Called by ProcedureStore.load() to notify about the maximum proc-id in the store.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>     * @param maxProcId the highest proc-id in the store<a name="line.93"></a>
-<span class="sourceLineNo">094</span>     */<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    void setMaxProcId(long maxProcId);<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>     * Called by the ProcedureStore.load() every time a set of procedures are ready to be executed.<a name="line.98"></a>
-<span class="sourceLineNo">099</span>     * The ProcedureIterator passed to the method, has the procedure sorted in replay-order.<a name="line.99"></a>
-<span class="sourceLineNo">100</span>     * @param procIter iterator over the procedures ready to be added to the executor.<a name="line.100"></a>
-<span class="sourceLineNo">101</span>     */<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    void load(ProcedureIterator procIter) throws IOException;<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>    /**<a name="line.104"></a>
-<span class="sourceLineNo">105</span>     * Called by the ProcedureStore.load() in case we have procedures not-ready to be added to<a name="line.105"></a>
-<span class="sourceLineNo">106</span>     * the executor, which probably means they are corrupted since some information/link is missing.<a name="line.106"></a>
-<span class="sourceLineNo">107</span>     * @param procIter iterator over the procedures not ready to be added to the executor, corrupted<a name="line.107"></a>
-<span class="sourceLineNo">108</span>     */<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    void handleCorrupted(ProcedureIterator procIter) throws IOException;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  }<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  /**<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * Add the listener to the notification list.<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * @param listener The AssignmentListener to register<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   */<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  void registerListener(ProcedureStoreListener listener);<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>   * Remove the listener from the notification list.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * @param listener The AssignmentListener to unregister<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * @return true if the listner was in the list and it was removed, otherwise false.<a name="line.121"></a>
-<span class="sourceLineNo">122</span>   */<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  boolean unregisterListener(ProcedureStoreListener listener);<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>  /**<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * Start/Open the procedure store<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * @param numThreads<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   */<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  void start(int numThreads) throws IOException;<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>   * Stop/Close the procedure store<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   * @param abort true if the stop is an abort<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   */<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  void stop(boolean abort);<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  /**<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   * @return true if the store is running, otherwise false.<a name="line.138"></a>
-<span class="sourceLineNo">139</span>   */<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  boolean isRunning();<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>  /**<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * @return the number of threads/slots passed to start()<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   */<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  int getNumThreads();<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>   * Set the number of procedure running.<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * This can be used, for example, by the store to know how long to wait before a sync.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * @return how many procedures are running (may not be same as &lt;code&gt;count&lt;/code&gt;).<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   */<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  int setRunningProcedureCount(int count);<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>   * Acquire the lease for the procedure store.<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  void recoverLease() throws IOException;<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>   * Load the Procedures in the store.<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * @param loader the ProcedureLoader that will handle the store-load events<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   */<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  void load(ProcedureLoader loader) throws IOException;<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>   * When a procedure is submitted to the executor insert(proc, null) will be called.<a name="line.166"></a>
-<span class="sourceLineNo">167</span>   * 'proc' has a 'RUNNABLE' state and the initial information required to start up.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   *<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   * When a procedure is executed and it returns children insert(proc, subprocs) will be called.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * 'proc' has a 'WAITING' state and an update state.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * 'subprocs' are the children in 'RUNNABLE' state with the initial information.<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   *<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * @param proc the procedure to serialize and write to the store.<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @param subprocs the newly created child of the proc.<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   */<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  void insert(Procedure proc, Procedure[] subprocs);<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>   * Serialize a set of new procedures.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * These procedures are freshly submitted to the executor and each procedure<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * has a 'RUNNABLE' state and the initial information required to start up.<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   *<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   * @param procs the procedures to serialize and write to the store.<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   */<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  void insert(Procedure[] procs);<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>   * The specified procedure was executed,<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   * and the new state should be written to the store.<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * @param proc the procedure to serialize and write to the store.<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   */<a name="line.191"></a>
-<span class="sourceLineNo">192</span>  void update(Procedure proc);<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>   * The specified procId was removed from the executor,<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   * due to completion, abort or failure.<a name="line.196"></a>
-<span class="sourceLineNo">197</span>   * The store implementor should remove all the information about the specified procId.<a name="line.197"></a>
-<span class="sourceLineNo">198</span>   * @param procId the ID of the procedure to remove.<a name="line.198"></a>
-<span class="sourceLineNo">199</span>   */<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  void delete(long procId);<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  /**<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * The parent procedure completed.<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * Update the state and mark all the child deleted.<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * @param parentProc the parent procedure to serialize and write to the store.<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * @param subProcIds the IDs of the sub-procedure to remove.<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   */<a name="line.207"></a>
-<span class="sourceLineNo">208</span>  void delete(Procedure parentProc, long[] subProcIds);<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>  /**<a name="line.210"></a>
-<span class="sourceLineNo">211</span>   * The specified procIds were removed from the executor,<a name="line.211"></a>
-<span class="sourceLineNo">212</span>   * due to completion, abort or failure.<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * The store implementor should remove all the information about the specified procIds.<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * @param procIds the IDs of the procedures to remove.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   * @param offset the array offset from where to start to delete<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * @param count the number of IDs to delete<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   */<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  void delete(long[] procIds, int offset, int count);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>}<a name="line.219"></a>
+<span class="sourceLineNo">084</span>    @SuppressWarnings("rawtypes")<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    Procedure next() throws IOException;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  /**<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * Interface passed to the ProcedureStore.load() method to handle the store-load events.<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   */<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public interface ProcedureLoader {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    /**<a name="line.92"></a>
+<span class="sourceLineNo">093</span>     * Called by ProcedureStore.load() to notify about the maximum proc-id in the store.<a name="line.93"></a>
+<span class="sourceLineNo">094</span>     * @param maxProcId the highest proc-id in the store<a name="line.94"></a>
+<span class="sourceLineNo">095</span>     */<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    void setMaxProcId(long maxProcId);<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>     * Called by the ProcedureStore.load() every time a set of procedures are ready to be executed.<a name="line.99"></a>
+<span class="sourceLineNo">100</span>     * The ProcedureIterator passed to the method, has the procedure sorted in replay-order.<a name="line.100"></a>
+<span class="sourceLineNo">101</span>     * @param procIter iterator over the procedures ready to be added to the executor.<a name="line.101"></a>
+<span class="sourceLineNo">102</span>     */<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    void load(ProcedureIterator procIter) throws IOException;<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>     * Called by the ProcedureStore.load() in case we have procedures not-ready to be added to<a name="line.106"></a>
+<span class="sourceLineNo">107</span>     * the executor, which probably means they are corrupted since some information/link is missing.<a name="line.107"></a>
+<span class="sourceLineNo">108</span>     * @param procIter iterator over the procedures not ready to be added to the executor, corrupted<a name="line.108"></a>
+<span class="sourceLineNo">109</span>     */<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    void handleCorrupted(ProcedureIterator procIter) throws IOException;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>  /**<a name="line.113"></a>
+<span class="sourceLineNo">114</span>   * Add the listener to the notification list.<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   * @param listener The AssignmentListener to register<a name="line.115"></a>
+<span class="sourceLineNo">116</span>   */<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  void registerListener(ProcedureStoreListener listener);<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>   * Remove the listener from the notification list.<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * @param listener The AssignmentListener to unregister<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * @return true if the listner was in the list and it was removed, otherwise false.<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   */<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  boolean unregisterListener(ProcedureStoreListener listener);<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>   * Start/Open the procedure store<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * @param numThreads<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   */<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  void start(int numThreads) throws IOException;<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>   * Stop/Close the procedure store<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   * @param abort true if the stop is an abort<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   */<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  void stop(boolean abort);<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  /**<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   * @return true if the store is running, otherwise false.<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   */<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  boolean isRunning();<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>   * @return the number of threads/slots passed to start()<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   */<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  int getNumThreads();<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>   * Set the number of procedure running.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   * This can be used, for example, by the store to know how long to wait before a sync.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * @return how many procedures are running (may not be same as &lt;code&gt;count&lt;/code&gt;).<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   */<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  int setRunningProcedureCount(int count);<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * Acquire the lease for the procedure store.<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  void recoverLease() throws IOException;<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>   * Load the Procedures in the store.<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * @param loader the ProcedureLoader that will handle the store-load events<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   */<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  void load(ProcedureLoader loader) throws IOException;<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>   * When a procedure is submitted to the executor insert(proc, null) will be called.<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * 'proc' has a 'RUNNABLE' state and the initial information required to start up.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   *<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   * When a procedure is executed and it returns children insert(proc, subprocs) will be called.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * 'proc' has a 'WAITING' state and an update state.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * 'subprocs' are the children in 'RUNNABLE' state with the initial information.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   *<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   * @param proc the procedure to serialize and write to the store.<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * @param subprocs the newly created child of the proc.<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  void insert(Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs);<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>   * Serialize a set of new procedures.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * These procedures are freshly submitted to the executor and each procedure<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * has a 'RUNNABLE' state and the initial information required to start up.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   *<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * @param procs the procedures to serialize and write to the store.<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   */<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  void insert(Procedure&lt;?&gt;[] procs);<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>   * The specified procedure was executed,<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * and the new state should be written to the store.<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * @param proc the procedure to serialize and write to the store.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  void update(Procedure&lt;?&gt; proc);<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>   * The specified procId was removed from the executor,<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * due to completion, abort or failure.<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * The store implementor should remove all the information about the specified procId.<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   * @param procId the ID of the procedure to remove.<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   */<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  void delete(long procId);<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>  /**<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   * The parent procedure completed.<a name="line.204"></a>
+<span class="sourceLineNo">205</span>   * Update the state and mark all the child deleted.<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   * @param parentProc the parent procedure to serialize and write to the store.<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   * @param subProcIds the IDs of the sub-procedure to remove.<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  void delete(Procedure&lt;?&gt; parentProc, long[] subProcIds);<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>   * The specified procIds were removed from the executor,<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   * due to completion, abort or failure.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * The store implementor should remove all the information about the specified procIds.<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * @param procIds the IDs of the procedures to remove.<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * @param offset the array offset from where to start to delete<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   * @param count the number of IDs to delete<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   */<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  void delete(long[] procIds, int offset, int count);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>}<a name="line.220"></a>
 
 
 


[17/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html
new file mode 100644
index 0000000..a281f12
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html
@@ -0,0 +1,679 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.procedure2.store.wal;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureIterator;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.slf4j.Logger;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.slf4j.LoggerFactory;<a name="line.25"></a>
+<span class="sourceLineNo">026</span><a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.27"></a>
+<span class="sourceLineNo">028</span><a name="line.28"></a>
+<span class="sourceLineNo">029</span>/**<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * We keep an in-memory map of the procedures sorted by replay order. (see the details in the<a name="line.30"></a>
+<span class="sourceLineNo">031</span> * beginning of {@link ProcedureWALFormatReader}).<a name="line.31"></a>
+<span class="sourceLineNo">032</span> *<a name="line.32"></a>
+<span class="sourceLineNo">033</span> * &lt;pre&gt;<a name="line.33"></a>
+<span class="sourceLineNo">034</span> *      procedureMap = | A |   | E |   | C |   |   |   |   | G |   |   |<a name="line.34"></a>
+<span class="sourceLineNo">035</span> *                       D               B<a name="line.35"></a>
+<span class="sourceLineNo">036</span> *      replayOrderHead = C &lt;-&gt; B &lt;-&gt; E &lt;-&gt; D &lt;-&gt; A &lt;-&gt; G<a name="line.36"></a>
+<span class="sourceLineNo">037</span> *<a name="line.37"></a>
+<span class="sourceLineNo">038</span> *  We also have a lazy grouping by "root procedure", and a list of<a name="line.38"></a>
+<span class="sourceLineNo">039</span> *  unlinked procedures. If after reading all the WALs we have unlinked<a name="line.39"></a>
+<span class="sourceLineNo">040</span> *  procedures it means that we had a missing WAL or a corruption.<a name="line.40"></a>
+<span class="sourceLineNo">041</span> *      rootHead = A &lt;-&gt; D &lt;-&gt; G<a name="line.41"></a>
+<span class="sourceLineNo">042</span> *                 B     E<a name="line.42"></a>
+<span class="sourceLineNo">043</span> *                 C<a name="line.43"></a>
+<span class="sourceLineNo">044</span> *      unlinkFromLinkList = None<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * &lt;/pre&gt;<a name="line.45"></a>
+<span class="sourceLineNo">046</span> */<a name="line.46"></a>
+<span class="sourceLineNo">047</span>class WALProcedureMap {<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private static final Logger LOG = LoggerFactory.getLogger(WALProcedureMap.class);<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  private static class Entry {<a name="line.51"></a>
+<span class="sourceLineNo">052</span>    // For bucketed linked lists in hash-table.<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    private Entry hashNext;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    // child head<a name="line.54"></a>
+<span class="sourceLineNo">055</span>    private Entry childHead;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    // double-link for rootHead or childHead<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    private Entry linkNext;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    private Entry linkPrev;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    // replay double-linked-list<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    private Entry replayNext;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    private Entry replayPrev;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    // procedure-infos<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    private Procedure&lt;?&gt; procedure;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    private ProcedureProtos.Procedure proto;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    private boolean ready = false;<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>    public Entry(Entry hashNext) {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>      this.hashNext = hashNext;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    }<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>    public long getProcId() {<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      return proto.getProcId();<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    }<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>    public long getParentId() {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      return proto.getParentId();<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    }<a name="line.77"></a>
+<span class="sourceLineNo">078</span><a name="line.78"></a>
+<span class="sourceLineNo">079</span>    public boolean hasParent() {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      return proto.hasParentId();<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    }<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>    public boolean isReady() {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      return ready;<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>    public boolean isFinished() {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      if (!hasParent()) {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>        // we only consider 'root' procedures. because for the user 'finished'<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        // means when everything up to the 'root' is finished.<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        switch (proto.getState()) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>          case ROLLEDBACK:<a name="line.92"></a>
+<span class="sourceLineNo">093</span>          case SUCCESS:<a name="line.93"></a>
+<span class="sourceLineNo">094</span>            return true;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>          default:<a name="line.95"></a>
+<span class="sourceLineNo">096</span>            break;<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>      return false;<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 Procedure&lt;?&gt; convert() throws IOException {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      if (procedure == null) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>        procedure = ProcedureUtil.convertToProcedure(proto);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      return procedure;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    }<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>    @Override<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    public String toString() {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      final StringBuilder sb = new StringBuilder();<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      sb.append("Entry(");<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      sb.append(getProcId());<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      sb.append(", parentId=");<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      sb.append(getParentId());<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      sb.append(", class=");<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      sb.append(proto.getClassName());<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      sb.append(")");<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      return sb.toString();<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><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private static class EntryIterator implements ProcedureIterator {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    private final Entry replayHead;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    private Entry current;<a name="line.125"></a>
+<span class="sourceLineNo">126</span><a name="line.126"></a>
+<span class="sourceLineNo">127</span>    public EntryIterator(Entry replayHead) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      this.replayHead = replayHead;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      this.current = replayHead;<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>    @Override<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    public void reset() {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      this.current = replayHead;<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>    @Override<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    public boolean hasNext() {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      return current != null;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>    @Override<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    public boolean isNextFinished() {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      return current != null &amp;&amp; current.isFinished();<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>    @Override<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    public void skipNext() {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      current = current.replayNext;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    }<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>    @Override<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    public Procedure&lt;?&gt; next() throws IOException {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      try {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>        return current.convert();<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      } finally {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>        current = current.replayNext;<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>  }<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span>  // procedure hash table<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  private Entry[] procedureMap;<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>  // replay-order double-linked-list<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  private Entry replayOrderHead;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  private Entry replayOrderTail;<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>  // root linked-list<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  private Entry rootHead;<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>  // pending unlinked children (root not present yet)<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  private Entry childUnlinkedHead;<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>  // Track ProcId range<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  private long minModifiedProcId = Long.MAX_VALUE;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  private long maxModifiedProcId = Long.MIN_VALUE;<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>  public WALProcedureMap(int size) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    procedureMap = new Entry[size];<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    replayOrderHead = null;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    replayOrderTail = null;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    rootHead = null;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    childUnlinkedHead = null;<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>  public void add(ProcedureProtos.Procedure procProto) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    trackProcIds(procProto.getProcId());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    Entry entry = addToMap(procProto.getProcId(), procProto.hasParentId());<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    boolean newEntry = entry.proto == null;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    // We have seen procedure WALs where the entries are out of order; see HBASE-18152.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    // To compensate, only replace the Entry procedure if for sure this new procedure<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    // is indeed an entry that came later.<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    // TODO: Fix the writing of procedure info so it does not violate basic expectation, that WALs<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    // contain procedure changes goingfrom start to finish in sequence.<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    if (newEntry || isIncreasing(entry.proto, procProto)) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      entry.proto = procProto;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    }<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    addToReplayList(entry);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    if (newEntry) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      if (procProto.hasParentId()) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        childUnlinkedHead = addToLinkList(entry, childUnlinkedHead);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      } else {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        rootHead = addToLinkList(entry, rootHead);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      }<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  }<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>   * @return True if this new procedure is 'richer' than the current one else false and we log this<a name="line.210"></a>
+<span class="sourceLineNo">211</span>   *         incidence where it appears that the WAL has older entries appended after newer ones.<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   *         See HBASE-18152.<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   */<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  private static boolean isIncreasing(ProcedureProtos.Procedure current,<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      ProcedureProtos.Procedure candidate) {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    // Check that the procedures we see are 'increasing'. We used to compare<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    // procedure id first and then update time but it can legitimately go backwards if the<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    // procedure is failed or rolled back so that was unreliable. Was going to compare<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    // state but lets see if comparing update time enough (unfortunately this issue only<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    // seen under load...)<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    boolean increasing = current.getLastUpdate() &lt;= candidate.getLastUpdate();<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    if (!increasing) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      LOG.warn("NOT INCREASING! current=" + current + ", candidate=" + candidate);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    }<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    return increasing;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  }<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span>  public boolean remove(long procId) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    trackProcIds(procId);<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    Entry entry = removeFromMap(procId);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    if (entry != null) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      unlinkFromReplayList(entry);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      unlinkFromLinkList(entry);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      return true;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    }<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    return false;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  }<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>  private void trackProcIds(long procId) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    minModifiedProcId = Math.min(minModifiedProcId, procId);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    maxModifiedProcId = Math.max(maxModifiedProcId, procId);<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>  public long getMinModifiedProcId() {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    return minModifiedProcId;<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>  public long getMaxModifiedProcId() {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    return maxModifiedProcId;<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>  public boolean contains(long procId) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    return getProcedure(procId) != null;<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>  public boolean isEmpty() {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    return replayOrderHead == null;<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>  public void clear() {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      procedureMap[i] = null;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    replayOrderHead = null;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    replayOrderTail = null;<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    rootHead = null;<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    childUnlinkedHead = null;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    minModifiedProcId = Long.MAX_VALUE;<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    maxModifiedProcId = Long.MIN_VALUE;<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>  /*<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   * Merges two WalProcedureMap, the target is the "global" map, the source is the "local" map. -<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   * The entries in the hashtables are guaranteed to be unique. On replay we don't load procedures<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * that already exist in the "global" map (the one we are merging the "local" in to). - The<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * replayOrderList of the "local" nao will be appended to the "global" map replay list. - The<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   * "local" map will be cleared at the end of the operation.<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   */<a name="line.278"></a>
+<span class="sourceLineNo">279</span>  public void mergeTail(WALProcedureMap other) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    for (Entry p = other.replayOrderHead; p != null; p = p.replayNext) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      int slotIndex = getMapSlot(p.getProcId());<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      p.hashNext = procedureMap[slotIndex];<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      procedureMap[slotIndex] = p;<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>    if (replayOrderHead == null) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      replayOrderHead = other.replayOrderHead;<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      replayOrderTail = other.replayOrderTail;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      rootHead = other.rootHead;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      childUnlinkedHead = other.childUnlinkedHead;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    } else {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      // append replay list<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      assert replayOrderTail.replayNext == null;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      assert other.replayOrderHead.replayPrev == null;<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      replayOrderTail.replayNext = other.replayOrderHead;<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      other.replayOrderHead.replayPrev = replayOrderTail;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      replayOrderTail = other.replayOrderTail;<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>      // merge rootHead<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      if (rootHead == null) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        rootHead = other.rootHead;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      } else if (other.rootHead != null) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>        Entry otherTail = findLinkListTail(other.rootHead);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>        otherTail.linkNext = rootHead;<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        rootHead.linkPrev = otherTail;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        rootHead = other.rootHead;<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>      // merge childUnlinkedHead<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      if (childUnlinkedHead == null) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        childUnlinkedHead = other.childUnlinkedHead;<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      } else if (other.childUnlinkedHead != null) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        Entry otherTail = findLinkListTail(other.childUnlinkedHead);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        otherTail.linkNext = childUnlinkedHead;<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        childUnlinkedHead.linkPrev = otherTail;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        childUnlinkedHead = other.childUnlinkedHead;<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>    maxModifiedProcId = Math.max(maxModifiedProcId, other.maxModifiedProcId);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    minModifiedProcId = Math.max(minModifiedProcId, other.minModifiedProcId);<a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>    other.clear();<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>  /**<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * Returns an EntryIterator with the list of procedures ready to be added to the executor. A<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   * Procedure is ready if its children and parent are ready.<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   */<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  public ProcedureIterator fetchReady() {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    buildGraph();<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span>    Entry readyHead = null;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    Entry readyTail = null;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    Entry p = replayOrderHead;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    while (p != null) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      Entry next = p.replayNext;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      if (p.isReady()) {<a name="line.337"></a>
+<span class="sourceLineNo">338</span>        unlinkFromReplayList(p);<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        if (readyTail != null) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>          readyTail.replayNext = p;<a name="line.340"></a>
+<span class="sourceLineNo">341</span>          p.replayPrev = readyTail;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        } else {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>          p.replayPrev = null;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>          readyHead = p;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        readyTail = p;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        p.replayNext = null;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      }<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      p = next;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    // we need the hash-table lookups for parents, so this must be done<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    // out of the loop where we check isReadyToRun()<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    for (p = readyHead; p != null; p = p.replayNext) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      removeFromMap(p.getProcId());<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      unlinkFromLinkList(p);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    return readyHead != null ? new EntryIterator(readyHead) : null;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>  /**<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * Drain this map and return all procedures in it.<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  public ProcedureIterator fetchAll() {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    Entry head = replayOrderHead;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    for (Entry p = head; p != null; p = p.replayNext) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      removeFromMap(p.getProcId());<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      assert procedureMap[i] == null : "map not empty i=" + i;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    replayOrderHead = null;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    replayOrderTail = null;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    childUnlinkedHead = null;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    rootHead = null;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    return head != null ? new EntryIterator(head) : null;<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>  private void buildGraph() {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    Entry p = childUnlinkedHead;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    while (p != null) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      Entry next = p.linkNext;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      Entry rootProc = getRootProcedure(p);<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      if (rootProc != null) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>        rootProc.childHead = addToLinkList(p, rootProc.childHead);<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      }<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      p = next;<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>    for (p = rootHead; p != null; p = p.linkNext) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      checkReadyToRun(p);<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    }<a name="line.391"></a>
+<span class="sourceLineNo">392</span>  }<a name="line.392"></a>
+<span class="sourceLineNo">393</span><a name="line.393"></a>
+<span class="sourceLineNo">394</span>  private Entry getRootProcedure(Entry entry) {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    while (entry != null &amp;&amp; entry.hasParent()) {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      entry = getProcedure(entry.getParentId());<a name="line.396"></a>
+<span class="sourceLineNo">397</span>    }<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    return entry;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span>  /**<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   * (see the comprehensive explanation in the beginning of {@link ProcedureWALFormatReader}). A<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * Procedure is ready when parent and children are ready. "ready" means that we all the<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   * information that we need in-memory.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * &lt;p/&gt;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   * Example-1:&lt;br/&gt;<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   * We have two WALs, we start reading from the newest (wal-2)<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   *<a name="line.408"></a>
+<span class="sourceLineNo">409</span>   * &lt;pre&gt;<a name="line.409"></a>
+<span class="sourceLineNo">410</span>   *    wal-2 | C B |<a name="line.410"></a>
+<span class="sourceLineNo">411</span>   *    wal-1 | A B C |<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * &lt;/pre&gt;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   *<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   * If C and B don't depend on A (A is not the parent), we can start them before reading wal-1. If<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * B is the only one with parent A we can start C. We have to read one more WAL before being able<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   * to start B.<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * &lt;p/&gt;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * How do we know with the only information in B that we are not ready.<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   * &lt;ul&gt;<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * &lt;li&gt;easy case, the parent is missing from the global map&lt;/li&gt;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * &lt;li&gt;more complex case we look at the Stack IDs.&lt;/li&gt;<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * &lt;/ul&gt;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * The Stack-IDs are added to the procedure order as an incremental index tracking how many times<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * that procedure was executed, which is equivalent to the number of times we wrote the procedure<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   * to the WAL. &lt;br/&gt;<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   * In the example above:<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   *<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * &lt;pre&gt;<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   *   wal-2: B has stackId = [1, 2]<a name="line.429"></a>
+<span class="sourceLineNo">430</span>   *   wal-1: B has stackId = [1]<a name="line.430"></a>
+<span class="sourceLineNo">431</span>   *   wal-1: A has stackId = [0]<a name="line.431"></a>
+<span class="sourceLineNo">432</span>   * &lt;/pre&gt;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>   *<a name="line.433"></a>
+<span class="sourceLineNo">434</span>   * Since we know that the Stack-IDs are incremental for a Procedure, we notice that there is a gap<a name="line.434"></a>
+<span class="sourceLineNo">435</span>   * in the stackIds of B, so something was executed before.<a name="line.435"></a>
+<span class="sourceLineNo">436</span>   * &lt;p/&gt;<a name="line.436"></a>
+<span class="sourceLineNo">437</span>   * To identify when a Procedure is ready we do the sum of the stackIds of the procedure and the<a name="line.437"></a>
+<span class="sourceLineNo">438</span>   * parent. if the stackIdSum is equal to the sum of {1..maxStackId} then everything we need is<a name="line.438"></a>
+<span class="sourceLineNo">439</span>   * available.<a name="line.439"></a>
+<span class="sourceLineNo">440</span>   * &lt;p/&gt;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>   * Example-2<a name="line.441"></a>
+<span class="sourceLineNo">442</span>   *<a name="line.442"></a>
+<span class="sourceLineNo">443</span>   * &lt;pre&gt;<a name="line.443"></a>
+<span class="sourceLineNo">444</span>   *    wal-2 | A |              A stackIds = [0, 2]<a name="line.444"></a>
+<span class="sourceLineNo">445</span>   *    wal-1 | A B |            B stackIds = [1]<a name="line.445"></a>
+<span class="sourceLineNo">446</span>   * &lt;/pre&gt;<a name="line.446"></a>
+<span class="sourceLineNo">447</span>   *<a name="line.447"></a>
+<span class="sourceLineNo">448</span>   * There is a gap between A stackIds so something was executed in between.<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   */<a name="line.449"></a>
+<span class="sourceLineNo">450</span>  private boolean checkReadyToRun(Entry rootEntry) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    assert !rootEntry.hasParent() : "expected root procedure, got " + rootEntry;<a name="line.451"></a>
+<span class="sourceLineNo">452</span><a name="line.452"></a>
+<span class="sourceLineNo">453</span>    if (rootEntry.isFinished()) {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      // If the root procedure is finished, sub-procedures should be gone<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      if (rootEntry.childHead != null) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>        LOG.error("unexpected active children for root-procedure: {}", rootEntry);<a name="line.456"></a>
+<span class="sourceLineNo">457</span>        for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>          LOG.error("unexpected active children: {}", p);<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>      assert rootEntry.childHead == null : "unexpected children on root completion. " + rootEntry;<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      rootEntry.ready = true;<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      return true;<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>    int stackIdSum = 0;<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    int maxStackId = 0;<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    for (int i = 0; i &lt; rootEntry.proto.getStackIdCount(); ++i) {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      int stackId = 1 + rootEntry.proto.getStackId(i);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      maxStackId = Math.max(maxStackId, stackId);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      stackIdSum += stackId;<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      LOG.trace("stackId={} stackIdSum={} maxStackid={} {}", stackId, stackIdSum, maxStackId,<a name="line.473"></a>
+<span class="sourceLineNo">474</span>        rootEntry);<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>    for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.477"></a>
+<span class="sourceLineNo">478</span>      for (int i = 0; i &lt; p.proto.getStackIdCount(); ++i) {<a name="line.478"></a>
+<span class="sourceLineNo">479</span>        int stackId = 1 + p.proto.getStackId(i);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>        maxStackId = Math.max(maxStackId, stackId);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>        stackIdSum += stackId;<a name="line.481"></a>
+<span class="sourceLineNo">482</span>        LOG.trace("stackId={} stackIdSum={} maxStackid={} {}", stackId, stackIdSum, maxStackId, p);<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>    // The cmpStackIdSum is this formula for finding the sum of a series of numbers:<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    // http://www.wikihow.com/Sum-the-Integers-from-1-to-N#/Image:Sum-the-Integers-from-1-to-N-Step-2-Version-3.jpg<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    final int cmpStackIdSum = (maxStackId * (maxStackId + 1) / 2);<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    if (cmpStackIdSum == stackIdSum) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      rootEntry.ready = true;<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        p.ready = true;<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      }<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      return true;<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    }<a name="line.494"></a>
+<span class="sourceLineNo">495</span>    return false;<a name="line.495"></a>
+<span class="sourceLineNo">496</span>  }<a name="line.496"></a>
+<span class="sourceLineNo">497</span><a name="line.497"></a>
+<span class="sourceLineNo">498</span>  private void unlinkFromReplayList(Entry entry) {<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    if (replayOrderHead == entry) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>      replayOrderHead = entry.replayNext;<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    }<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    if (replayOrderTail == entry) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      replayOrderTail = entry.replayPrev;<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    if (entry.replayPrev != null) {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      entry.replayPrev.replayNext = entry.replayNext;<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    }<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    if (entry.replayNext != null) {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      entry.replayNext.replayPrev = entry.replayPrev;<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><a name="line.512"></a>
+<span class="sourceLineNo">513</span>  private void addToReplayList(final Entry entry) {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    unlinkFromReplayList(entry);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    entry.replayNext = replayOrderHead;<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    entry.replayPrev = null;<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    if (replayOrderHead != null) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      replayOrderHead.replayPrev = entry;<a name="line.518"></a>
+<span class="sourceLineNo">519</span>    } else {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      replayOrderTail = entry;<a name="line.520"></a>
+<span class="sourceLineNo">521</span>    }<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    replayOrderHead = entry;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>  }<a name="line.523"></a>
+<span class="sourceLineNo">524</span><a name="line.524"></a>
+<span class="sourceLineNo">525</span>  private void unlinkFromLinkList(Entry entry) {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    if (entry == rootHead) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      rootHead = entry.linkNext;<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    } else if (entry == childUnlinkedHead) {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>      childUnlinkedHead = entry.linkNext;<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    if (entry.linkPrev != null) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      entry.linkPrev.linkNext = entry.linkNext;<a name="line.532"></a>
+<span class="sourceLineNo">533</span>    }<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    if (entry.linkNext != null) {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>      entry.linkNext.linkPrev = entry.linkPrev;<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
+<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
+<span class="sourceLineNo">538</span><a name="line.538"></a>
+<span class="sourceLineNo">539</span>  private Entry addToLinkList(Entry entry, Entry linkHead) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    unlinkFromLinkList(entry);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    entry.linkNext = linkHead;<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    entry.linkPrev = null;<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    if (linkHead != null) {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      linkHead.linkPrev = entry;<a name="line.544"></a>
+<span class="sourceLineNo">545</span>    }<a name="line.545"></a>
+<span class="sourceLineNo">546</span>    return entry;<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">549</span>  private Entry findLinkListTail(Entry linkHead) {<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    Entry tail = linkHead;<a name="line.550"></a>
+<span class="sourceLineNo">551</span>    while (tail.linkNext != null) {<a name="line.551"></a>
+<span class="sourceLineNo">552</span>      tail = tail.linkNext;<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    return tail;<a name="line.554"></a>
+<span class="sourceLineNo">555</span>  }<a name="line.555"></a>
+<span class="sourceLineNo">556</span><a name="line.556"></a>
+<span class="sourceLineNo">557</span>  private Entry addToMap(long procId, boolean hasParent) {<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    int slotIndex = getMapSlot(procId);<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    Entry entry = getProcedure(slotIndex, procId);<a name="line.559"></a>
+<span class="sourceLineNo">560</span>    if (entry != null) {<a name="line.560"></a>
+<span class="sourceLineNo">561</span>      return entry;<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>    entry = new Entry(procedureMap[slotIndex]);<a name="line.564"></a>
+<span class="sourceLineNo">565</span>    procedureMap[slotIndex] = entry;<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    return entry;<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>  private Entry removeFromMap(final long procId) {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    int slotIndex = getMapSlot(procId);<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    Entry prev = null;<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    Entry entry = procedureMap[slotIndex];<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    while (entry != null) {<a name="line.573"></a>
+<span class="sourceLineNo">574</span>      if (procId == entry.getProcId()) {<a name="line.574"></a>
+<span class="sourceLineNo">575</span>        if (prev != null) {<a name="line.575"></a>
+<span class="sourceLineNo">576</span>          prev.hashNext = entry.hashNext;<a name="line.576"></a>
+<span class="sourceLineNo">577</span>        } else {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>          procedureMap[slotIndex] = entry.hashNext;<a name="line.578"></a>
+<span class="sourceLineNo">579</span>        }<a name="line.579"></a>
+<span class="sourceLineNo">580</span>        entry.hashNext = null;<a name="line.580"></a>
+<span class="sourceLineNo">581</span>        return entry;<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      }<a name="line.582"></a>
+<span class="sourceLineNo">583</span>      prev = entry;<a name="line.583"></a>
+<span class="sourceLineNo">584</span>      entry = entry.hashNext;<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    }<a name="line.585"></a>
+<span class="sourceLineNo">586</span>    return null;<a name="line.586"></a>
+<span class="sourceLineNo">587</span>  }<a name="line.587"></a>
+<span class="sourceLineNo">588</span><a name="line.588"></a>
+<span class="sourceLineNo">589</span>  private Entry getProcedure(long procId) {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    return getProcedure(getMapSlot(procId), procId);<a name="line.590"></a>
+<span class="sourceLineNo">591</span>  }<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span>  private Entry getProcedure(int slotIndex, long procId) {<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    Entry entry = procedureMap[slotIndex];<a name="line.594"></a>
+<span class="sourceLineNo">595</span>    while (entry != null) {<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      if (procId == entry.getProcId()) {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>        return entry;<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      }<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      entry = entry.hashNext;<a name="line.599"></a>
+<span class="sourceLineNo">600</span>    }<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    return null;<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>  private int getMapSlot(long procId) {<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    return (int) (Procedure.getProcIdHashCode(procId) % procedureMap.length);<a name="line.605"></a>
+<span class="sourceLineNo">606</span>  }<a name="line.606"></a>
+<span class="sourceLineNo">607</span>}<a name="line.607"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[44/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 53da923..7330857 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -1149,7 +1149,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html#add-org.apache.hadoop.hbase.procedure2.util.DelayedUtil.DelayedWithTimeout-">add(DelayedUtil.DelayedWithTimeout)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.TimeoutExecutorThread.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.TimeoutExecutorThread</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#add-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure-">add(ProcedureProtos.Procedure)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#add-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure-">add(ProcedureProtos.Procedure)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/TimeoutExecutorThread.html#add-org.apache.hadoop.hbase.procedure2.InlineChore-">add(InlineChore)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/TimeoutExecutorThread.html" title="class in org.apache.hadoop.hbase.procedure2">TimeoutExecutorThread</a></dt>
 <dd>&nbsp;</dd>
@@ -2337,7 +2337,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ServerName.html#address">address</a></span> - Variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#ADDRESS_BITS_PER_WORD">ADDRESS_BITS_PER_WORD</a></span> - Static variable in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#ADDRESS_BITS_PER_WORD">ADDRESS_BITS_PER_WORD</a></span> - Static variable in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/BatchErrors.html#addresses">addresses</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/BatchErrors.html" title="class in org.apache.hadoop.hbase.client">BatchErrors</a></dt>
 <dd>&nbsp;</dd>
@@ -2585,7 +2585,7 @@
 <div class="block">Checks if an authentication tokens exists for the connected cluster,
  obtaining one if needed and adding it to the user's credentials.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#addToLinkList-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">addToLinkList(ProcedureWALFormatReader.Entry, ProcedureWALFormatReader.Entry)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#addToLinkList-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">addToLinkList(WALProcedureMap.Entry, WALProcedureMap.Entry)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/UpdatePeerConfigProcedure.html#addToList-java.util.List-java.lang.String-org.apache.hadoop.hbase.replication.ReplicationQueueStorage-">addToList(List&lt;String&gt;, String, ReplicationQueueStorage)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/UpdatePeerConfigProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">UpdatePeerConfigProcedure</a></dt>
 <dd>&nbsp;</dd>
@@ -2593,7 +2593,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#addToMap-java.util.Map-java.lang.String-long-org.apache.hadoop.hbase.replication.ReplicationQueueStorage-">addToMap(Map&lt;String, Long&gt;, String, long, ReplicationQueueStorage)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">ModifyPeerProcedure</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#addToMap-long-boolean-">addToMap(long, boolean)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#addToMap-long-boolean-">addToMap(long, boolean)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html#addToMovedRegions-java.lang.String-org.apache.hadoop.hbase.ServerName-long-">addToMovedRegions(String, ServerName, long)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></dt>
 <dd>&nbsp;</dd>
@@ -2601,7 +2601,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#addToPendingAssignment-java.util.HashMap-java.util.Collection-">addToPendingAssignment(HashMap&lt;RegionInfo, RegionStateNode&gt;, Collection&lt;RegionInfo&gt;)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#addToReplayList-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">addToReplayList(ProcedureWALFormatReader.Entry)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#addToReplayList-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">addToReplayList(WALProcedureMap.Entry)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/favored/FavoredNodesManager.html#addToReplicaLoad-org.apache.hadoop.hbase.client.RegionInfo-java.util.List-">addToReplicaLoad(RegionInfo, List&lt;ServerName&gt;)</a></span> - Method in class org.apache.hadoop.hbase.favored.<a href="org/apache/hadoop/hbase/favored/FavoredNodesManager.html" title="class in org.apache.hadoop.hbase.favored">FavoredNodesManager</a></dt>
 <dd>&nbsp;</dd>
@@ -2885,9 +2885,9 @@
 <dd>
 <div class="block">Aligns a number to 8.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#alignDown-long-">alignDown(long)</a></span> - Static method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#alignDown-long-">alignDown(long)</a></span> - Static method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#alignUp-long-">alignUp(long)</a></span> - Static method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#alignUp-long-">alignUp(long)</a></span> - Static method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/ServerNonceManager.OperationContext.html#ALL_FLAG_BITS">ALL_FLAG_BITS</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/ServerNonceManager.OperationContext.html" title="class in org.apache.hadoop.hbase.regionserver">ServerNonceManager.OperationContext</a></dt>
 <dd>&nbsp;</dd>
@@ -6041,15 +6041,17 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/BitComparator.html#bitOperator">bitOperator</a></span> - Variable in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/BitComparator.html" title="class in org.apache.hadoop.hbase.filter">BitComparator</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#BITS_PER_WORD">BITS_PER_WORD</a></span> - Static variable in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#BITS_PER_WORD">BITS_PER_WORD</a></span> - Static variable in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#BitSetNode-long-boolean-">BitSetNode(long, boolean)</a></span> - Constructor for class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#BitSetNode-long-long:A-long:A-">BitSetNode(long, long[], long[])</a></span> - Constructor for class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></dt>
+<dt><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">BitSetNode</span></a> - Class in <a href="org/apache/hadoop/hbase/procedure2/store/package-summary.html">org.apache.hadoop.hbase.procedure2.store</a></dt>
+<dd>
+<div class="block">A bitmap which can grow/merge with other <a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store"><code>BitSetNode</code></a> (if certain conditions are met).</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#BitSetNode-long-boolean-">BitSetNode(long, boolean)</a></span> - Constructor for class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#BitSetNode-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode-">BitSetNode(ProcedureProtos.ProcedureStoreTracker.TrackerNode)</a></span> - Constructor for class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#BitSetNode-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode-">BitSetNode(ProcedureProtos.ProcedureStoreTracker.TrackerNode)</a></span> - Constructor for class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#BitSetNode-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-boolean-">BitSetNode(ProcedureStoreTracker.BitSetNode, boolean)</a></span> - Constructor for class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#BitSetNode-org.apache.hadoop.hbase.procedure2.store.BitSetNode-boolean-">BitSetNode(BitSetNode, boolean)</a></span> - Constructor for class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/BloomFilterUtil.html#bitvals">bitvals</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/BloomFilterUtil.html" title="class in org.apache.hadoop.hbase.util">BloomFilterUtil</a></dt>
 <dd>
@@ -7294,7 +7296,7 @@
 <dd>
 <div class="block">Create a request to grant user permissions.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#buildGraph--">buildGraph()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#buildGraph--">buildGraph()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#buildHoldingCleanupTracker--">buildHoldingCleanupTracker()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a></dt>
 <dd>&nbsp;</dd>
@@ -9159,11 +9161,11 @@
 <dd>
 <div class="block">Are there enough available resources to allow execution?</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#canGrow-long-">canGrow(long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#canGrow-long-">canGrow(long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/TimestampsFilter.html#canHint">canHint</a></span> - Variable in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TimestampsFilter.html" title="class in org.apache.hadoop.hbase.filter">TimestampsFilter</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#canMerge-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-">canMerge(ProcedureStoreTracker.BitSetNode)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#canMerge-org.apache.hadoop.hbase.procedure2.store.BitSetNode-">canMerge(BitSetNode)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/StoreFileScanner.html#canOptimizeForNonNullColumn">canOptimizeForNonNullColumn</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a></dt>
 <dd>&nbsp;</dd>
@@ -10928,8 +10930,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegion.html#checkReadsEnabled--">checkReadsEnabled()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#checkReadyToRun-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">checkReadyToRun(ProcedureWALFormatReader.Entry)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></dt>
-<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#checkReadyToRun-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">checkReadyToRun(WALProcedureMap.Entry)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></dt>
+<dd>
+<div class="block">(see the comprehensive explanation in the beginning of <a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><code>ProcedureWALFormatReader</code></a>).</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/HBaseFsck.html#checkRegionBoundaries">checkRegionBoundaries</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/HBaseFsck.html#checkRegionBoundaries--">checkRegionBoundaries()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a></dt>
@@ -11257,7 +11261,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/visibility/expression/NonLeafExpressionNode.html#childExps">childExps</a></span> - Variable in class org.apache.hadoop.hbase.security.visibility.expression.<a href="org/apache/hadoop/hbase/security/visibility/expression/NonLeafExpressionNode.html" title="class in org.apache.hadoop.hbase.security.visibility.expression">NonLeafExpressionNode</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#childHead">childHead</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#childHead">childHead</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html#childrenChangedFuture">childrenChangedFuture</a></span> - Variable in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a></dt>
 <dd>&nbsp;</dd>
@@ -11267,7 +11271,7 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/Procedure.html#childrenLatch">childrenLatch</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#childUnlinkedHead">childUnlinkedHead</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#childUnlinkedHead">childUnlinkedHead</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/ExportSnapshot.Options.html#CHMOD">CHMOD</a></span> - Static variable in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/ExportSnapshot.Options.html" title="class in org.apache.hadoop.hbase.snapshot">ExportSnapshot.Options</a></dt>
 <dd>&nbsp;</dd>
@@ -11961,7 +11965,7 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/SimpleProcedureScheduler.html#clear--">clear()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/SimpleProcedureScheduler.html" title="class in org.apache.hadoop.hbase.procedure2">SimpleProcedureScheduler</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#clear--">clear()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#clear--">clear()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/NoOpRegionSizeStore.html#clear--">clear()</a></span> - Method in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/NoOpRegionSizeStore.html" title="class in org.apache.hadoop.hbase.quotas">NoOpRegionSizeStore</a></dt>
 <dd>&nbsp;</dd>
@@ -17389,9 +17393,9 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#contains-int:A-int-">contains(int[], int)</a></span> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#contains-long-">contains(long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#contains-long-">contains(long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#contains-long-">contains(long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#contains-long-">contains(long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/CellFlatMap.CellFlatMapCollection.html#contains-java.lang.Object-">contains(Object)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/CellFlatMap.CellFlatMapCollection.html" title="class in org.apache.hadoop.hbase.regionserver">CellFlatMap.CellFlatMapCollection</a></dt>
 <dd>&nbsp;</dd>
@@ -17694,13 +17698,13 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/RemoteProcedureException.html#convert--">convert()</a></span> - Method in exception org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/RemoteProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureException</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#convert--">convert()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#convert--">convert()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></dt>
 <dd>
 <div class="block">Convert to
  org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode
  protobuf.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#convert--">convert()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#convert--">convert()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html#convert-org.apache.hadoop.hbase.protobuf.generated.ClientProtos.PrepareBulkLoadRequest-">convert(ClientProtos.PrepareBulkLoadRequest)</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html" title="class in org.apache.hadoop.hbase.security.access">SecureBulkLoadEndpoint</a></dt>
 <dd>
@@ -21617,7 +21621,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/BlockCachesIterator.html#current">current</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/BlockCachesIterator.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCachesIterator</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#current">current</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html#current">current</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.EntryIterator</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/KeyValueHeap.html#current">current</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a></dt>
 <dd>
@@ -24411,9 +24415,11 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/example/BulkDeleteEndpoint.html#delete-com.google.protobuf.RpcController-org.apache.hadoop.hbase.coprocessor.example.generated.BulkDeleteProtos.BulkDeleteRequest-com.google.protobuf.RpcCallback-">delete(RpcController, BulkDeleteProtos.BulkDeleteRequest, RpcCallback&lt;BulkDeleteProtos.BulkDeleteResponse&gt;)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.example.<a href="org/apache/hadoop/hbase/coprocessor/example/BulkDeleteEndpoint.html" title="class in org.apache.hadoop.hbase.coprocessor.example">BulkDeleteEndpoint</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#delete-long-">delete(long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#delete-long-">delete(long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store">NoopProcedureStore</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#delete-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">delete(Procedure, long[])</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store">NoopProcedureStore</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#delete-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">delete(Procedure&lt;?&gt;, long[])</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store">NoopProcedureStore</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#delete-long:A-int-int-">delete(long[], int, int)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store">NoopProcedureStore</a></dt>
 <dd>&nbsp;</dd>
@@ -24422,7 +24428,7 @@
 <div class="block">The specified procId was removed from the executor,
  due to completion, abort or failure.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#delete-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">delete(Procedure, long[])</a></span> - Method in interface org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#delete-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">delete(Procedure&lt;?&gt;, long[])</a></span> - Method in interface org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore</a></dt>
 <dd>
 <div class="block">The parent procedure completed.</div>
 </dd>
@@ -24431,17 +24437,15 @@
 <div class="block">The specified procIds were removed from the executor,
  due to completion, abort or failure.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#delete-long-">delete(long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#delete-long-">delete(long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#delete-long:A-">delete(long[])</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#delete-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">delete(ProcedureStoreTracker.BitSetNode, long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#delete-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">delete(BitSetNode, long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#delete-long-">delete(long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#delete-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">delete(Procedure, long[])</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#delete-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">delete(Procedure&lt;?&gt;, long[])</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#delete-long:A-int-int-">delete(long[], int, int)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a></dt>
 <dd>&nbsp;</dd>
@@ -24665,7 +24669,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/CompactionTool.CompactionWorker.html#deleteCompacted">deleteCompacted</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/CompactionTool.CompactionWorker.html" title="class in org.apache.hadoop.hbase.regionserver">CompactionTool.CompactionWorker</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#deleted">deleted</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#deleted">deleted</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></dt>
 <dd>
 <div class="block">Keeps track of procedure ids which belong to this bitmap's range and have been deleted.</div>
 </dd>
@@ -26922,7 +26926,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSyncUp.DummyServer.html#DummyServer-java.lang.String-">DummyServer(String)</a></span> - Constructor for class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSyncUp.DummyServer.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSyncUp.DummyServer</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#dump--">dump()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#dump--">dump()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#dump--">dump()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a></dt>
 <dd>&nbsp;</dd>
@@ -28372,7 +28376,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/SingleResponse.Entry.html#Entry--">Entry()</a></span> - Constructor for class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/SingleResponse.Entry.html" title="class in org.apache.hadoop.hbase.client">SingleResponse.Entry</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#Entry-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">Entry(ProcedureWALFormatReader.Entry)</a></span> - Constructor for class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#Entry-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">Entry(WALProcedureMap.Entry)</a></span> - Constructor for class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.html#entry">entry</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.html" title="class in org.apache.hadoop.hbase.regionserver.wal">RingBufferTruck</a></dt>
 <dd>&nbsp;</dd>
@@ -28408,7 +28412,7 @@
 <dd>
 <div class="block">Total # of key/value entries, i.e.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#EntryIterator-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">EntryIterator(ProcedureWALFormatReader.Entry)</a></span> - Constructor for class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html#EntryIterator-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">EntryIterator(WALProcedureMap.Entry)</a></span> - Constructor for class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.EntryIterator</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#entryReader">entryReader</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper</a></dt>
 <dd>&nbsp;</dd>
@@ -30923,8 +30927,10 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/QuotaCache.QuotaRefresherChore.html#fetch-java.lang.String-java.util.concurrent.ConcurrentHashMap-org.apache.hadoop.hbase.quotas.QuotaCache.Fetcher-">fetch(String, ConcurrentHashMap&lt;K, V&gt;, QuotaCache.Fetcher&lt;K, V&gt;)</a></span> - Method in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/QuotaCache.QuotaRefresherChore.html" title="class in org.apache.hadoop.hbase.quotas">QuotaCache.QuotaRefresherChore</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#fetchAll--">fetchAll()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></dt>
-<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#fetchAll--">fetchAll()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></dt>
+<dd>
+<div class="block">Drain this map and return all procedures in it.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/QuotaObserverChore.html#fetchAllTablesWithQuotasDefined--">fetchAllTablesWithQuotasDefined()</a></span> - Method in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/QuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">QuotaObserverChore</a></dt>
 <dd>
 <div class="block">Computes the set of all tables that have quotas defined.</div>
@@ -30937,8 +30943,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/QuotaCache.QuotaRefresherChore.html#fetchNamespaceQuotaState--">fetchNamespaceQuotaState()</a></span> - Method in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/QuotaCache.QuotaRefresherChore.html" title="class in org.apache.hadoop.hbase.quotas">QuotaCache.QuotaRefresherChore</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#fetchReady--">fetchReady()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></dt>
-<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#fetchReady--">fetchReady()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></dt>
+<dd>
+<div class="block">Returns an EntryIterator with the list of procedures ready to be added to the executor.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/ProtobufStreamingOutput.html#fetchSize">fetchSize</a></span> - Variable in class org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/ProtobufStreamingOutput.html" title="class in org.apache.hadoop.hbase.rest">ProtobufStreamingOutput</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#fetchSlavesAddresses-org.apache.hadoop.hbase.zookeeper.ZKWatcher-">fetchSlavesAddresses(ZKWatcher)</a></span> - Static method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">HBaseReplicationEndpoint</a></dt>
@@ -32122,7 +32130,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/mapreduce/MapReduceBackupMergeJob.html#findInputDirectories-org.apache.hadoop.fs.FileSystem-java.lang.String-org.apache.hadoop.hbase.TableName-java.lang.String:A-">findInputDirectories(FileSystem, String, TableName, String[])</a></span> - Method in class org.apache.hadoop.hbase.backup.mapreduce.<a href="org/apache/hadoop/hbase/backup/mapreduce/MapReduceBackupMergeJob.html" title="class in org.apache.hadoop.hbase.backup.mapreduce">MapReduceBackupMergeJob</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#findLinkListTail-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">findLinkListTail(ProcedureWALFormatReader.Entry)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#findLinkListTail-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">findLinkListTail(WALProcedureMap.Entry)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/SequenceIdAccounting.html#findLower-java.util.Map-">findLower(Map&lt;byte[], Long&gt;)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/SequenceIdAccounting.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SequenceIdAccounting</a></dt>
 <dd>
@@ -34701,9 +34709,9 @@
 <dd>
 <div class="block">Gets the current active master, if available.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#getActiveMaxProcId--">getActiveMaxProcId()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#getActiveMaxProcId--">getActiveMaxProcId()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#getActiveMinProcId--">getActiveMinProcId()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#getActiveMinProcId--">getActiveMinProcId()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#getActiveMinProcId--">getActiveMinProcId()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a></dt>
 <dd>&nbsp;</dd>
@@ -35613,7 +35621,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/thrift2/ThriftServer.html#getBindAddress-org.apache.hadoop.conf.Configuration-org.apache.hbase.thirdparty.org.apache.commons.cli.CommandLine-">getBindAddress(Configuration, CommandLine)</a></span> - Method in class org.apache.hadoop.hbase.thrift2.<a href="org/apache/hadoop/hbase/thrift2/ThriftServer.html" title="class in org.apache.hadoop.hbase.thrift2">ThriftServer</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#getBitmapIndex-long-">getBitmapIndex(long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#getBitmapIndex-long-">getBitmapIndex(long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/BlockCache.html#getBlock-org.apache.hadoop.hbase.io.hfile.BlockCacheKey-boolean-boolean-boolean-">getBlock(BlockCacheKey, boolean, boolean, boolean)</a></span> - Method in interface org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></dt>
 <dd>
@@ -38890,7 +38898,7 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/errorhandling/TimeoutException.html#getEnd--">getEnd()</a></span> - Method in exception org.apache.hadoop.hbase.errorhandling.<a href="org/apache/hadoop/hbase/errorhandling/TimeoutException.html" title="class in org.apache.hadoop.hbase.errorhandling">TimeoutException</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#getEnd--">getEnd()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#getEnd--">getEnd()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/RegionInfo.html#getEndKey--">getEndKey()</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></dt>
 <dd>&nbsp;</dd>
@@ -42210,7 +42218,7 @@
 <dd>
 <div class="block">Get the application's mapper class.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#getMapSlot-long-">getMapSlot(long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#getMapSlot-long-">getMapSlot(long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Admin.html#getMaster--">getMaster()</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>&nbsp;</dd>
@@ -42584,7 +42592,10 @@
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/balancer/ClusterLoadState.html#getMaxLoad--">getMaxLoad()</a></span> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/ClusterLoadState.html" title="class in org.apache.hadoop.hbase.master.balancer">ClusterLoadState</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#getMaxLogId-org.apache.hadoop.fs.FileStatus:A-">getMaxLogId(FileStatus[])</a></span> - Static method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Make sure that the file set are gotten by calling <a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#getLogFiles--"><code>WALProcedureStore.getLogFiles()</code></a>, where we will sort
+ the file set by log id.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/SnapshotDescriptionUtils.html#getMaxMasterTimeout-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription.Type-long-">getMaxMasterTimeout(Configuration, SnapshotProtos.SnapshotDescription.Type, long)</a></span> - Static method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/SnapshotDescriptionUtils.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotDescriptionUtils</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/example/ExampleMasterObserverWithMetrics.html#getMaxMemory--">getMaxMemory()</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.example.<a href="org/apache/hadoop/hbase/coprocessor/example/ExampleMasterObserverWithMetrics.html" title="class in org.apache.hadoop.hbase.coprocessor.example">ExampleMasterObserverWithMetrics</a></dt>
@@ -42607,6 +42618,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/HBaseFsck.html#getMaxMerge--">getMaxMerge()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#getMaxModifiedProcId--">getMaxModifiedProcId()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/HBaseFsck.html#getMaxOverlapsToSideline--">getMaxOverlapsToSideline()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/HBaseFsck.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/thrift/IncrementCoalescer.html#getMaxPoolSize--">getMaxPoolSize()</a></span> - Method in class org.apache.hadoop.hbase.thrift.<a href="org/apache/hadoop/hbase/thrift/IncrementCoalescer.html" title="class in org.apache.hadoop.hbase.thrift">IncrementCoalescer</a></dt>
@@ -42617,8 +42630,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#getMaxProcId--">getMaxProcId()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#getMaxProcId--">getMaxProcId()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/thrift/IncrementCoalescer.html#getMaxQueueSize--">getMaxQueueSize()</a></span> - Method in class org.apache.hadoop.hbase.thrift.<a href="org/apache/hadoop/hbase/thrift/IncrementCoalescer.html" title="class in org.apache.hadoop.hbase.thrift">IncrementCoalescer</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/thrift/IncrementCoalescerMBean.html#getMaxQueueSize--">getMaxQueueSize()</a></span> - Method in interface org.apache.hadoop.hbase.thrift.<a href="org/apache/hadoop/hbase/thrift/IncrementCoalescerMBean.html" title="interface in org.apache.hadoop.hbase.thrift">IncrementCoalescerMBean</a></dt>
@@ -43452,6 +43463,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/compactions/CompactionConfiguration.html#getMinLocalityToForceCompact--">getMinLocalityToForceCompact()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.compactions.<a href="org/apache/hadoop/hbase/regionserver/compactions/CompactionConfiguration.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionConfiguration</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#getMinModifiedProcId--">getMinModifiedProcId()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.html#getMinorVersion--">getMinorVersion()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/FixedFileTrailer.html" title="class in org.apache.hadoop.hbase.io.hfile">FixedFileTrailer</a></dt>
 <dd>
 <div class="block">Returns the minor version of this HFile format</div>
@@ -43460,8 +43473,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html#getMinProcId--">getMinProcId()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#getMinProcId--">getMinProcId()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/CompactionPipeline.html#getMinSequenceId--">getMinSequenceId()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/CompactionPipeline.html" title="class in org.apache.hadoop.hbase.regionserver">CompactionPipeline</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html#getMinSequenceId--">getMinSequenceId()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.html" title="class in org.apache.hadoop.hbase.regionserver">CompositeImmutableSegment</a></dt>
@@ -43690,6 +43701,10 @@
 <dd>
 <div class="block">Get the modification time of this store file.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#getModifiedMaxProcId--">getModifiedMaxProcId()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#getModifiedMinProcId--">getModifiedMinProcId()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html#getModTime--">getModTime()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/HBaseFsck.HbckInfo.html" title="class in org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/example/TableHFileArchiveTracker.html#getMonitor--">getMonitor()</a></span> - Method in class org.apache.hadoop.hbase.backup.example.<a href="org/apache/hadoop/hbase/backup/example/TableHFileArchiveTracker.html" title="class in org.apache.hadoop.hbase.backup.example">TableHFileArchiveTracker</a></dt>
@@ -45400,7 +45415,7 @@
 <dd>
 <div class="block">Returns the full path of the immediate parent of the specified node.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#getParentId--">getParentId()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#getParentId--">getParentId()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/Procedure.html#getParentProcId--">getParentProcId()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></dt>
 <dd>&nbsp;</dd>
@@ -46029,9 +46044,9 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#getProcedure-java.lang.Class-long-">getProcedure(Class&lt;T&gt;, long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#getProcedure-long-">getProcedure(long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#getProcedure-long-">getProcedure(long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#getProcedure-int-long-">getProcedure(int, long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#getProcedure-int-long-">getProcedure(int, long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/CoordinatedStateManager.html#getProcedureCoordinatorRpcs-java.lang.String-java.lang.String-">getProcedureCoordinatorRpcs(String, String)</a></span> - Method in interface org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/CoordinatedStateManager.html" title="interface in org.apache.hadoop.hbase">CoordinatedStateManager</a></dt>
 <dd>
@@ -46146,7 +46161,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/Procedure.html#getProcId--">getProcId()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#getProcId--">getProcId()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#getProcId--">getProcId()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/Procedure.html#getProcIdHashCode-long-">getProcIdHashCode(long)</a></span> - Static method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></dt>
 <dd>
@@ -48558,7 +48573,7 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/token/ZKSecretWatcher.html#getRootKeyZNode--">getRootKeyZNode()</a></span> - Method in class org.apache.hadoop.hbase.security.token.<a href="org/apache/hadoop/hbase/security/token/ZKSecretWatcher.html" title="class in org.apache.hadoop.hbase.security.token">ZKSecretWatcher</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#getRootProcedure-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">getRootProcedure(ProcedureWALFormatReader.Entry)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#getRootProcedure-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">getRootProcedure(WALProcedureMap.Entry)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/Procedure.html#getRootProcedureId-java.util.Map-org.apache.hadoop.hbase.procedure2.Procedure-">getRootProcedureId(Map&lt;Long, Procedure&lt;T&gt;&gt;, Procedure&lt;T&gt;)</a></span> - Static method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></dt>
 <dd>
@@ -50632,7 +50647,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/errorhandling/TimeoutException.html#getStart--">getStart()</a></span> - Method in exception org.apache.hadoop.hbase.errorhandling.<a href="org/apache/hadoop/hbase/errorhandling/TimeoutException.html" title="class in org.apache.hadoop.hbase.errorhandling">TimeoutException</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#getStart--">getStart()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#getStart--">getStart()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html#getStartcode--">getStartcode()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></dt>
 <dd>&nbsp;</dd>
@@ -53629,10 +53644,6 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/EncryptionUtil.html#getUnwrapKey-org.apache.hadoop.conf.Configuration-java.lang.String-org.apache.hadoop.hbase.shaded.protobuf.generated.EncryptionProtos.WrappedKey-org.apache.hadoop.hbase.io.crypto.Cipher-">getUnwrapKey(Configuration, String, EncryptionProtos.WrappedKey, Cipher)</a></span> - Static method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/EncryptionUtil.html" title="class in org.apache.hadoop.hbase.security">EncryptionUtil</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#getUpdatedMaxProcId--">getUpdatedMaxProcId()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#getUpdatedMinProcId--">getUpdatedMinProcId()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#getUpdatesBlockedMsHighWater--">getUpdatesBlockedMsHighWater()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getUpdatesBlockedTime--">getUpdatesBlockedTime()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a></dt>
@@ -55136,11 +55147,11 @@
 <dd>
 <div class="block">Group service to retrieve the user group information</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#grow-long-">grow(long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#grow-long-">grow(long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/util/ByteSlot.html#GROW_ALIGN">GROW_ALIGN</a></span> - Static variable in class org.apache.hadoop.hbase.procedure2.util.<a href="org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#growNode-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">growNode(ProcedureStoreTracker.BitSetNode, long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#growNode-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">growNode(BitSetNode, long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a></dt>
 <dd>
 <div class="block">Grows <code>node</code> to contain <code>procId</code> and updates the map.</div>
 </dd>
@@ -56176,7 +56187,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/HashTable.HashMapper.html#HashMapper--">HashMapper()</a></span> - Constructor for class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/HashTable.HashMapper.html" title="class in org.apache.hadoop.hbase.mapreduce">HashTable.HashMapper</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#hashNext">hashNext</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#hashNext">hashNext</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/HashTable.ResultHasher.html#hashResult-org.apache.hadoop.hbase.client.Result-">hashResult(Result)</a></span> - Method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/HashTable.ResultHasher.html" title="class in org.apache.hadoop.hbase.mapreduce">HashTable.ResultHasher</a></dt>
 <dd>&nbsp;</dd>
@@ -56287,7 +56298,7 @@
 <dd>
 <div class="block">Returns true if the iterator has more elements.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#hasNext--">hasNext()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html#hasNext--">hasNext()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.EntryIterator</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/QuotaRetriever.Iter.html#hasNext--">hasNext()</a></span> - Method in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/QuotaRetriever.Iter.html" title="class in org.apache.hadoop.hbase.quotas">QuotaRetriever.Iter</a></dt>
 <dd>&nbsp;</dd>
@@ -56346,7 +56357,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/Procedure.html#hasParent--">hasParent()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#hasParent--">hasParent()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#hasParent--">hasParent()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/LockAndQueue.html#hasParentLock-org.apache.hadoop.hbase.procedure2.Procedure-">hasParentLock(Procedure&lt;?&gt;)</a></span> - 

<TRUNCATED>

[09/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/testapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html b/testapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
index 0c894de..65a28b9 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html
@@ -179,4145 +179,4146 @@
 <span class="sourceLineNo">171</span> * avoiding port contention if another local HBase instance is already running).<a name="line.171"></a>
 <span class="sourceLineNo">172</span> * &lt;p&gt;To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"<a name="line.172"></a>
 <span class="sourceLineNo">173</span> * setting it to true.<a name="line.173"></a>
-<span class="sourceLineNo">174</span> */<a name="line.174"></a>
-<span class="sourceLineNo">175</span>@InterfaceAudience.Public<a name="line.175"></a>
-<span class="sourceLineNo">176</span>@SuppressWarnings("deprecation")<a name="line.176"></a>
-<span class="sourceLineNo">177</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<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>   * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * used in mini dfs.<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   * @deprecated can be used only with mini dfs<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   */<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  @Deprecated<a name="line.185"></a>
-<span class="sourceLineNo">186</span>  private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>  public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  /**<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * The default number of regions per regionserver when creating a pre-split<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * table.<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">174</span> * For triggering test.<a name="line.174"></a>
+<span class="sourceLineNo">175</span> */<a name="line.175"></a>
+<span class="sourceLineNo">176</span>@InterfaceAudience.Public<a name="line.176"></a>
+<span class="sourceLineNo">177</span>@SuppressWarnings("deprecation")<a name="line.177"></a>
+<span class="sourceLineNo">178</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<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>   * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * used in mini dfs.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * @deprecated can be used only with mini dfs<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   */<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  @Deprecated<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>  public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * The default number of regions per regionserver when creating a pre-split<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   * table.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>   */<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.194"></a>
 <span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>  public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>  private MiniDFSCluster dfsCluster = null;<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>  private volatile HBaseCluster hbaseCluster = null;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private MiniMRCluster mrCluster = null;<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>  /** If there is a mini cluster running for this testing utility instance. */<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  private volatile boolean miniClusterRunning;<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  private String hadoopLogDir;<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>  /** Directory on test filesystem where we put the data for this instance of<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    * HBaseTestingUtility*/<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  private Path dataTestDirOnTestFS = null;<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>  /**<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * Shared cluster connection.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   */<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  private volatile Connection connection;<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>  /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  private static String FS_URI;<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>  /** This is for unit tests parameterized with a single boolean. */<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  public static final List&lt;Object[]&gt; MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<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>   * Checks to see if a specific port is available.<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   *<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @param port the port number to check for availability<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the port is available, or &lt;tt&gt;false&lt;/tt&gt; if not<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   */<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  public static boolean available(int port) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    ServerSocket ss = null;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    DatagramSocket ds = null;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    try {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      ss = new ServerSocket(port);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      ss.setReuseAddress(true);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      ds = new DatagramSocket(port);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      ds.setReuseAddress(true);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      return true;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    } catch (IOException e) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      // Do nothing<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    } finally {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      if (ds != null) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        ds.close();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      }<a name="line.244"></a>
-<span class="sourceLineNo">245</span><a name="line.245"></a>
-<span class="sourceLineNo">246</span>      if (ss != null) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        try {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          ss.close();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        } catch (IOException e) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          /* should not be thrown */<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><a name="line.254"></a>
-<span class="sourceLineNo">255</span>    return false;<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>  /**<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * Create all combinations of Bloom filters and compression algorithms for<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * testing.<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   */<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  private static List&lt;Object[]&gt; bloomAndCompressionCombinations() {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    for (Compression.Algorithm comprAlgo :<a name="line.264"></a>
-<span class="sourceLineNo">265</span>         HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      for (BloomType bloomType : BloomType.values()) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>        configurations.add(new Object[] { comprAlgo, bloomType });<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>    return Collections.unmodifiableList(configurations);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  /**<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * Create combination of memstoreTS and tags<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  private static List&lt;Object[]&gt; memStoreTSAndTagsCombination() {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    configurations.add(new Object[] { false, false });<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    configurations.add(new Object[] { false, true });<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    configurations.add(new Object[] { true, false });<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    configurations.add(new Object[] { true, true });<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    return Collections.unmodifiableList(configurations);<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>  public static List&lt;Object[]&gt; memStoreTSTagsAndOffheapCombination() {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    configurations.add(new Object[] { false, false, true });<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    configurations.add(new Object[] { false, false, false });<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    configurations.add(new Object[] { false, true, true });<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    configurations.add(new Object[] { false, true, false });<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    configurations.add(new Object[] { true, false, true });<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    configurations.add(new Object[] { true, false, false });<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    configurations.add(new Object[] { true, true, true });<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    configurations.add(new Object[] { true, true, false });<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    return Collections.unmodifiableList(configurations);<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>  public static final Collection&lt;Object[]&gt; BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      bloomAndCompressionCombinations();<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>  public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.197"></a>
+<span class="sourceLineNo">198</span>  public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>  private MiniDFSCluster dfsCluster = null;<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>  private volatile HBaseCluster hbaseCluster = null;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  private MiniMRCluster mrCluster = null;<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>  /** If there is a mini cluster running for this testing utility instance. */<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  private volatile boolean miniClusterRunning;<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>  private String hadoopLogDir;<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>  /** Directory on test filesystem where we put the data for this instance of<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    * HBaseTestingUtility*/<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  private Path dataTestDirOnTestFS = null;<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>   * Shared cluster connection.<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   */<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  private volatile Connection connection;<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>  /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  private static String FS_URI;<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>  /** This is for unit tests parameterized with a single boolean. */<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  public static final List&lt;Object[]&gt; MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<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>   * Checks to see if a specific port is available.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   *<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * @param port the port number to check for availability<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the port is available, or &lt;tt&gt;false&lt;/tt&gt; if not<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  public static boolean available(int port) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    ServerSocket ss = null;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    DatagramSocket ds = null;<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    try {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      ss = new ServerSocket(port);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      ss.setReuseAddress(true);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      ds = new DatagramSocket(port);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      ds.setReuseAddress(true);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      return true;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    } catch (IOException e) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      // Do nothing<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    } finally {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      if (ds != null) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        ds.close();<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      }<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>      if (ss != null) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        try {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          ss.close();<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        } catch (IOException e) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          /* should not be thrown */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      }<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    }<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>    return false;<a name="line.256"></a>
+<span class="sourceLineNo">257</span>  }<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span>  /**<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * Create all combinations of Bloom filters and compression algorithms for<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * testing.<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   */<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  private static List&lt;Object[]&gt; bloomAndCompressionCombinations() {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    for (Compression.Algorithm comprAlgo :<a name="line.265"></a>
+<span class="sourceLineNo">266</span>         HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      for (BloomType bloomType : BloomType.values()) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>        configurations.add(new Object[] { comprAlgo, bloomType });<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>    return Collections.unmodifiableList(configurations);<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>   * Create combination of memstoreTS and tags<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   */<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  private static List&lt;Object[]&gt; memStoreTSAndTagsCombination() {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    configurations.add(new Object[] { false, false });<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    configurations.add(new Object[] { false, true });<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    configurations.add(new Object[] { true, false });<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    configurations.add(new Object[] { true, true });<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    return Collections.unmodifiableList(configurations);<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>  public static List&lt;Object[]&gt; memStoreTSTagsAndOffheapCombination() {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    configurations.add(new Object[] { false, false, true });<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    configurations.add(new Object[] { false, false, false });<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    configurations.add(new Object[] { false, true, true });<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    configurations.add(new Object[] { false, true, false });<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    configurations.add(new Object[] { true, false, true });<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    configurations.add(new Object[] { true, false, false });<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    configurations.add(new Object[] { true, true, true });<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    configurations.add(new Object[] { true, true, false });<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    return Collections.unmodifiableList(configurations);<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>  public static final Collection&lt;Object[]&gt; BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      bloomAndCompressionCombinations();<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>   * &lt;p&gt;Create an HBaseTestingUtility using a default configuration.<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   *<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   *<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * &lt;p&gt;Previously, there was a distinction between the type of utility returned by<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * at which point they will switch to using mini DFS for storage.<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   */<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  public HBaseTestingUtility() {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    this(HBaseConfiguration.create());<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  }<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span>  /**<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * &lt;p&gt;Create an HBaseTestingUtility using a given configuration.<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   *<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   *<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * &lt;p&gt;Previously, there was a distinction between the type of utility returned by<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * at which point they will switch to using mini DFS for storage.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   *<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * @param conf The configuration to use for further operations<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   */<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    super(conf);<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>    // a hbase checksum verification failure will cause unit tests to fail<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.336"></a>
-<span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>    // Save this for when setting default file:// breaks things<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    if (this.conf.get("fs.defaultFS") != null) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    // Every cluster is a local cluster until we start DFS<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    // Note that conf could be null, but this.conf will not be<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    String dataTestDir = getDataTestDir().toString();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    this.conf.set("fs.defaultFS","file:///");<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    // If the value for random ports isn't set set it to true, thus making<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    // tests opt-out for random port assignment<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  }<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>  /**<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility()} instead<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * @return a normal HBaseTestingUtility<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   */<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  @Deprecated<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  public static HBaseTestingUtility createLocalHTU() {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    return new HBaseTestingUtility();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>  /**<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility(Configuration)} instead<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * @return a normal HBaseTestingUtility<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   */<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  @Deprecated<a name="line.371"></a>
-<span class="sourceLineNo">372</span>  public static HBaseTestingUtility createLocalHTU(Configuration c) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    return new HBaseTestingUtility(c);<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>   * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   */<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    closeRegionAndWAL((HRegion)r);<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>  /**<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   */<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    if (r == null) return;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    r.close();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    if (r.getWAL() == null) return;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    r.getWAL().close();<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  /**<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   * Returns this classes's instance of {@link Configuration}.  Be careful how<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   * you use the returned Configuration since {@link Connection} instances<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   * can be shared.  The Map of Connections is keyed by the Configuration.  If<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * say, a Connection was being used against a cluster that had been shutdown,<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * be wholesome.  Rather than use the return direct, its usually best to<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * make a copy and use that.  Do<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * &lt;code&gt;Configuration c = new Configuration(INSTANCE.getConfiguration());&lt;/code&gt;<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * @return Instance of Configuration.<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   */<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  @Override<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  public Configuration getConfiguration() {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    return super.getConfiguration();<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>  public void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    this.hbaseCluster = hbaseCluster;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>  }<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>  /**<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * Give it a random name so can have many concurrent tests running if<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * we need to.  It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * System property, as it's what minidfscluster bases<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   * it data dir on.  Moding a System property is not the way to do concurrent<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * instances -- another instance could grab the temporary<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * value unintentionally -- but not anything can do about it at moment;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * single instance only is how the minidfscluster works.<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   *<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * We also create the underlying directory for<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   *  hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   *  in the conf, and as a system property for hadoop.tmp.dir<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   *<a name="line.426"></a>
-<span class="sourceLineNo">427</span>   * @return The calculated data test build directory, if newly-created.<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   */<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  @Override<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  protected Path setupDataTestDir() {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    Path testPath = super.setupDataTestDir();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    if (null == testPath) {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      return null;<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>    createSubDirAndSystemProperty(<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      "hadoop.log.dir",<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      testPath, "hadoop-log-dir");<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>    // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    //  we want our own value to ensure uniqueness on the same machine<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    createSubDirAndSystemProperty(<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      "hadoop.tmp.dir",<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      testPath, "hadoop-tmp-dir");<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>    // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    createSubDir(<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      "mapreduce.cluster.local.dir",<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      testPath, "mapred-local-dir");<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>    return testPath;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  private void createSubDirAndSystemProperty(<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    String propertyName, Path parent, String subDirName){<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    String sysValue = System.getProperty(propertyName);<a name="line.457"></a>
-<span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span>    if (sysValue != null) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // There is already a value set. So we do nothing but hope<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      //  that there will be no conflicts<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.462"></a>
-<span class="sourceLineNo">463</span>        sysValue + " so I do NOT create it in " + parent);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      String confValue = conf.get(propertyName);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      if (confValue != null &amp;&amp; !confValue.endsWith(sysValue)){<a name="line.465"></a>
-<span class="sourceLineNo">466</span>       LOG.warn(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>         propertyName + " property value differs in configuration and system: "+<a name="line.467"></a>
-<span class="sourceLineNo">468</span>         "Configuration="+confValue+" while System="+sysValue+<a name="line.468"></a>
-<span class="sourceLineNo">469</span>         " Erasing configuration value by system value."<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>      conf.set(propertyName, sysValue);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    } else {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      // Ok, it's not set, so we create it as a subdirectory<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      createSubDir(propertyName, parent, subDirName);<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      System.setProperty(propertyName, conf.get(propertyName));<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span>  /**<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * @return Where to write test data on the test filesystem; Returns working directory<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * for the test filesystem by default<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * @see #setupDataTestDirOnTestFS()<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   * @see #getTestFileSystem()<a name="line.484"></a>
-<span class="sourceLineNo">485</span>   */<a name="line.485"></a>
-<span class="sourceLineNo">486</span>  private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    FileSystem fs = getTestFileSystem();<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.488"></a>
-<span class="sourceLineNo">489</span>  }<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>  /**<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * @return META table descriptor<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * @deprecated since 2.0 version and will be removed in 3.0 version.<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   *             use {@link #getMetaTableDescriptorBuilder()}<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   */<a name="line.495"></a>
-<span class="sourceLineNo">496</span>  @Deprecated<a name="line.496"></a>
-<span class="sourceLineNo">497</span>  public HTableDescriptor getMetaTableDescriptor() {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    return new ImmutableHTableDescriptor(getMetaTableDescriptorBuilder().build());<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span>  /**<a name="line.501"></a>
-<span class="sourceLineNo">502</span>   * @return META table descriptor<a name="line.502"></a>
-<span class="sourceLineNo">503</span>   */<a name="line.503"></a>
-<span class="sourceLineNo">504</span>  public TableDescriptorBuilder getMetaTableDescriptorBuilder() {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    try {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      return FSTableDescriptors.createMetaTableDescriptorBuilder(conf);<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    } catch (IOException e) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      throw new RuntimeException("Unable to create META table descriptor", e);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<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>  /**<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.514"></a>
-<span class="sourceLineNo">515</span>   * if the test relies on it.<a name="line.515"></a>
-<span class="sourceLineNo">516</span>   * @return a unique path in the test filesystem<a name="line.516"></a>
-<span class="sourceLineNo">517</span>   */<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  public Path getDataTestDirOnTestFS() throws IOException {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    if (dataTestDirOnTestFS == null) {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      setupDataTestDirOnTestFS();<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>    return dataTestDirOnTestFS;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>  }<a name="line.524"></a>
-<span class="sourceLineNo">525</span><a name="line.525"></a>
-<span class="sourceLineNo">526</span>  /**<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.527"></a>
-<span class="sourceLineNo">528</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * if the test relies on it.<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * @return a unique path in the test filesystem<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   * @param subdirName name of the subdir to create under the base test dir<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   */<a name="line.532"></a>
-<span class="sourceLineNo">533</span>  public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
-<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span>  /**<a name="line.537"></a>
-<span class="sourceLineNo">538</span>   * Sets up a path in test filesystem to be used by tests.<a name="line.538"></a>
-<span class="sourceLineNo">539</span>   * Creates a new directory if not already setup.<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   */<a name="line.540"></a>
-<span class="sourceLineNo">541</span>  private void setupDataTestDirOnTestFS() throws IOException {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    if (dataTestDirOnTestFS != null) {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      LOG.warn("Data test on test fs dir already setup in "<a name="line.543"></a>
-<span class="sourceLineNo">544</span>          + dataTestDirOnTestFS.toString());<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      return;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    dataTestDirOnTestFS = getNewDataTestDirOnTestFS();<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 up a new path in test filesystem to be used by tests.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   */<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  private Path getNewDataTestDirOnTestFS() throws IOException {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    //The file system can be either local, mini dfs, or if the configuration<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    //is supplied externally, it can be an external cluster FS. If it is a local<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    //file system, the tests should use getBaseTestDir, otherwise, we can use<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    //the working directory, and create a unique sub dir there<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    FileSystem fs = getTestFileSystem();<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    Path newDataTestDir;<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    String randomStr = getRandomUUID().toString();<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    if (fs.getUri().getScheme().equals(FileSystem.getLocal(conf).getUri().getScheme())) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      newDataTestDir = new Path(getDataTestDir(), randomStr);<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      File dataTestDir = new File(newDataTestDir.toString());<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      if (deleteOnExit()) dataTestDir.deleteOnExit();<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    } else {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      Path base = getBaseTestDirOnTestFS();<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      newDataTestDir = new Path(base, randomStr);<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      if (deleteOnExit()) fs.deleteOnExit(newDataTestDir);<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    return newDataTestDir;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>  /**<a name="line.573"></a>
-<span class="sourceLineNo">574</span>   * Cleans the test data directory on the test filesystem.<a name="line.574"></a>
-<span class="sourceLineNo">575</span>   * @return True if we removed the test dirs<a name="line.575"></a>
-<span class="sourceLineNo">576</span>   * @throws IOException<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   */<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  public boolean cleanupDataTestDirOnTestFS() throws IOException {<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    boolean ret = getTestFileSystem().delete(dataTestDirOnTestFS, true);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    if (ret)<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      dataTestDirOnTestFS = null;<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    return ret;<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>   * Cleans a subdirectory under the test data directory on the test filesystem.<a name="line.586"></a>
-<span class="sourceLineNo">587</span>   * @return True if we removed child<a name="line.587"></a>
-<span class="sourceLineNo">588</span>   * @throws IOException<a name="line.588"></a>
-<span class="sourceLineNo">589</span>   */<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  public boolean cleanupDataTestDirOnTestFS(String subdirName) throws IOException {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    Path cpath = getDataTestDirOnTestFS(subdirName);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return getTestFileSystem().delete(cpath, true);<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>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * Start a minidfscluster.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * @param servers How many DNs to start.<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   * @throws Exception<a name="line.598"></a>
-<span class="sourceLineNo">599</span>   * @see #shutdownMiniDFSCluster()<a name="line.599"></a>
-<span class="sourceLineNo">600</span>   * @return The mini dfs cluster created.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>   */<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  public MiniDFSCluster startMiniDFSCluster(int servers) throws Exception {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    return startMiniDFSCluster(servers, null);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>  }<a name="line.604"></a>
-<span class="sourceLineNo">605</span><a name="line.605"></a>
-<span class="sourceLineNo">606</span>  /**<a name="line.606"></a>
-<span class="sourceLineNo">607</span>   * Start a minidfscluster.<a name="line.607"></a>
-<span class="sourceLineNo">608</span>   * This is useful if you want to run datanode on distinct hosts for things<a name="line.608"></a>
-<span class="sourceLineNo">609</span>   * like HDFS block location verification.<a name="line.609"></a>
-<span class="sourceLineNo">610</span>   * If you start MiniDFSCluster without host names, all instances of the<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * datanodes will have the same host name.<a name="line.611"></a>
-<span class="sourceLineNo">612</span>   * @param hosts hostnames DNs to run on.<a name="line.612"></a>
-<span class="sourceLineNo">613</span>   * @throws Exception<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * @see #shutdownMiniDFSCluster()<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @return The mini dfs cluster created.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   */<a name="line.616"></a>
-<span class="sourceLineNo">617</span>  public MiniDFSCluster startMiniDFSCluster(final String hosts[])<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  throws Exception {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    if ( hosts != null &amp;&amp; hosts.length != 0) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return startMiniDFSCluster(hosts.length, hosts);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    } else {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      return startMiniDFSCluster(1, null);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    }<a name="line.623"></a>
-<span class="sourceLineNo">624</span>  }<a name="line.624"></a>
-<span class="sourceLineNo">625</span><a name="line.625"></a>
-<span class="sourceLineNo">626</span>  /**<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   * Start a minidfscluster.<a name="line.627"></a>
-<span class="sourceLineNo">628</span>   * Can only create one.<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   * @param servers How many DNs to start.<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   * @param hosts hostnames DNs to run on.<a name="line.630"></a>
-<span class="sourceLineNo">631</span>   * @throws Exception<a name="line.631"></a>
-<span class="sourceLineNo">632</span>   * @see #shutdownMiniDFSCluster()<a name="line.632"></a>
-<span class="sourceLineNo">633</span>   * @return The mini dfs cluster created.<a name="line.633"></a>
-<span class="sourceLineNo">634</span>   */<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  public MiniDFSCluster startMiniDFSCluster(int servers, final String hosts[])<a name="line.635"></a>
-<span class="sourceLineNo">636</span>  throws Exception {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    return startMiniDFSCluster(servers, null, hosts);<a name="line.637"></a>
-<span class="sourceLineNo">638</span>  }<a name="line.638"></a>
-<span class="sourceLineNo">639</span><a name="line.639"></a>
-<span class="sourceLineNo">640</span>  private void setFs() throws IOException {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    if(this.dfsCluster == null){<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      LOG.info("Skipping setting fs because dfsCluster is null");<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      return;<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    }<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    FileSystem fs = this.dfsCluster.getFileSystem();<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    FSUtils.setFsDefault(this.conf, new Path(fs.getUri()));<a name="line.646"></a>
-<span class="sourceLineNo">647</span><a name="line.647"></a>
-<span class="sourceLineNo">648</span>    // re-enable this check with dfs<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    conf.unset(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>  }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span>  public MiniDFSCluster startMiniDFSCluster(int servers, final  String racks[], String hosts[])<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      throws Exception {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    createDirsAndSetProperties();<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    EditLogFileOutputStream.setShouldSkipFsyncForTesting(true);<a name="line.655"></a>
-<span class="sourceLineNo">656</span><a name="line.656"></a>
-<span class="sourceLineNo">657</span>    // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    org.apache.log4j.Logger.getLogger(org.apache.hadoop.metrics2.util.MBeans.class).<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        setLevel(org.apache.log4j.Level.ERROR);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    org.apache.log4j.Logger.getLogger(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class).<a name="line.660"></a>
-<span class="sourceLineNo">661</span>        setLevel(org.apache.log4j.Level.ERROR);<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>    TraceUtil.initTracer(conf);<a name="line.663"></a>
-<span class="sourceLineNo">664</span><a name="line.664"></a>
-<span class="sourceLineNo">665</span>    this.dfsCluster = new MiniDFSCluster(0, this.conf, servers, true, true,<a name="line.665"></a>
-<span class="sourceLineNo">666</span>        true, null, racks, hosts, null);<a name="line.666"></a>
-<span class="sourceLineNo">667</span><a name="line.667"></a>
-<span class="sourceLineNo">668</span>    // Set this just-started cluster as our filesystem.<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    setFs();<a name="line.669"></a>
-<span class="sourceLineNo">670</span><a name="line.670"></a>
-<span class="sourceLineNo">671</span>    // Wait for the cluster to be totally up<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    this.dfsCluster.waitClusterUp();<a name="line.672"></a>
-<span class="sourceLineNo">673</span><a name="line.673"></a>
-<span class="sourceLineNo">674</span>    //reset the test directory for test file system<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    dataTestDirOnTestFS = null;<a name="line.675"></a>
-<span class="sourceLineNo">676</span>    String dataTestDir = getDataTestDir().toString();<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    conf.set(HConstants.HBASE_DIR, dataTestDir);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>    return this.dfsCluster;<a name="line.680"></a>
-<span class="sourceLineNo">681</span>  }<a name="line.681"></a>
-<span class="sourceLineNo">682</span><a name="line.682"></a>
-<span class="sourceLineNo">683</span>  public MiniDFSCluster startMiniDFSClusterForTestWAL(int namenodePort) throws IOException {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    createDirsAndSetProperties();<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    dfsCluster = new MiniDFSCluster(namenodePort, conf, 5, false, true, true, null,<a name="line.685"></a>
-<span class="sourceLineNo">686</span>        null, null, null);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>    return dfsCluster;<a name="line.687"></a>
-<span class="sourceLineNo">688</span>  }<a name="line.688"></a>
-<span class="sourceLineNo">689</span><a name="line.689"></a>
-<span class="sourceLineNo">690</span>  /** This is used before starting HDFS and map-reduce mini-clusters */<a name="line.690"></a>
-<span class="sourceLineNo">691</span>  private void createDirsAndSetProperties() throws IOException {<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    setupClusterTestDir();<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    conf.set(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    System.setProperty(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    createDirAndSetProperty("cache_data", "test.cache.data");<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    createDirAndSetProperty("hadoop_tmp", "hadoop.tmp.dir");<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    hadoopLogDir = createDirAndSetProperty("hadoop_logs", "hadoop.log.dir");<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    createDirAndSetProperty("mapred_local", "mapreduce.cluster.local.dir");<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    createDirAndSetProperty("mapred_temp", "mapreduce.cluster.temp.dir");<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    enableShortCircuit();<a name="line.700"></a>
-<span class="sourceLineNo">701</span><a name="line.701"></a>
-<span class="sourceLineNo">702</span>    Path root = getDataTestDirOnTestFS("hadoop");<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    conf.set(MapreduceTestingShim.getMROutputDirProp(),<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      new Path(root, "mapred-output-dir").toString());<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    conf.set("mapreduce.jobtracker.system.dir", new Path(root, "mapred-system-dir").toString());<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    conf.set("mapreduce.jobtracker.staging.root.dir",<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      new Path(root, "mapreduce-jobtracker-staging-root-dir").toString());<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    conf.set("mapreduce.job.working.dir", new Path(root, "mapred-working-dir").toString());<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    conf.set("yarn.app.mapreduce.am.staging-dir",<a name="line.709"></a>
-<span class="sourceLineNo">710</span>      new Path(root, "mapreduce-am-staging-root-dir").toString());<a name="line.710"></a>
-<span class="sourceLineNo">711</span>  }<a name="line.711"></a>
-<span class="sourceLineNo">712</span><a name="line.712"></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>   * &lt;p&gt;Create an HBaseTestingUtility using a default configuration.<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   *<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   *<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   * &lt;p&gt;Previously, there was a distinction between the type of utility returned by<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * at which point they will switch to using mini DFS for storage.<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   */<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  public HBaseTestingUtility() {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    this(HBaseConfiguration.create());<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>   * &lt;p&gt;Create an HBaseTestingUtility using a given configuration.<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   *<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   *<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * &lt;p&gt;Previously, there was a distinction between the type of utility returned by<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.328"></a>
+<span class="sourceLineNo">329</span>   * at which point they will switch to using mini DFS for storage.<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   *<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   * @param conf The configuration to use for further operations<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    super(conf);<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>    // a hbase checksum verification failure will cause unit tests to fail<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>    // Save this for when setting default file:// breaks things<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    if (this.conf.get("fs.defaultFS") != null) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    }<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    // Every cluster is a local cluster until we start DFS<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    // Note that conf could be null, but this.conf will not be<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    String dataTestDir = getDataTestDir().toString();<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    this.conf.set("fs.defaultFS","file:///");<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    // If the value for random ports isn't set set it to true, thus making<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    // tests opt-out for random port assignment<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>  /**<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility()} instead<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * @return a normal HBaseTestingUtility<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  @Deprecated<a name="line.363"></a>
+<span class="sourceLineNo">364</span>  public static HBaseTestingUtility createLocalHTU() {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    return new HBaseTestingUtility();<a name="line.365"></a>
+<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>  /**<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility(Configuration)} instead<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   * @return a normal HBaseTestingUtility<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   */<a name="line.371"></a>
+<span class="sourceLineNo">372</span>  @Deprecated<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  public static HBaseTestingUtility createLocalHTU(Configuration c) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    return new HBaseTestingUtility(c);<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>  /**<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    closeRegionAndWAL((HRegion)r);<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>  /**<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   */<a name="line.386"></a>
+<span class="sourceLineNo">387</span>  public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    if (r == null) return;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    r.close();<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    if (r.getWAL() == null) return;<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    r.getWAL().close();<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>  /**<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * Returns this classes's instance of {@link Configuration}.  Be careful how<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * you use the returned Configuration since {@link Connection} instances<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   * can be shared.  The Map of Connections is keyed by the Configuration.  If<a name="line.397"></a>
+<span class="sourceLineNo">398</span>   * say, a Connection was being used against a cluster that had been shutdown,<a name="line.398"></a>
+<span class="sourceLineNo">399</span>   * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.399"></a>
+<span class="sourceLineNo">400</span>   * be wholesome.  Rather than use the return direct, its usually best to<a name="line.400"></a>
+<span class="sourceLineNo">401</span>   * make a copy and use that.  Do<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   * &lt;code&gt;Configuration c = new Configuration(INSTANCE.getConfiguration());&lt;/code&gt;<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * @return Instance of Configuration.<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  @Override<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  public Configuration getConfiguration() {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    return super.getConfiguration();<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 void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    this.hbaseCluster = hbaseCluster;<a name="line.411"></a>
+<span class="sourceLineNo">412</span>  }<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>  /**<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   * Give it a random name so can have many concurrent tests running if<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * we need to.  It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * System property, as it's what minidfscluster bases<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   * it data dir on.  Moding a System property is not the way to do concurrent<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * instances -- another instance could grab the temporary<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * value unintentionally -- but not anything can do about it at moment;<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * single instance only is how the minidfscluster works.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   *<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * We also create the underlying directory for<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   *  hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   *  in the conf, and as a system property for hadoop.tmp.dir<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   *<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @return The calculated data test build directory, if newly-created.<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   */<a name="line.429"></a>
+<span class="sourceLineNo">430</span>  @Override<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  protected Path setupDataTestDir() {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    Path testPath = super.setupDataTestDir();<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    if (null == testPath) {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      return null;<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    }<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span>    createSubDirAndSystemProperty(<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      "hadoop.log.dir",<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      testPath, "hadoop-log-dir");<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>    // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    //  we want our own value to ensure uniqueness on the same machine<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    createSubDirAndSystemProperty(<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      "hadoop.tmp.dir",<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      testPath, "hadoop-tmp-dir");<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>    // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    createSubDir(<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      "mapreduce.cluster.local.dir",<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      testPath, "mapred-local-dir");<a name="line.450"></a>
+<span class="sourceLineNo">451</span><a name="line.451"></a>
+<span class="sourceLineNo">452</span>    return testPath;<a name="line.452"></a>
+<span class="sourceLineNo">453</span>  }<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>  private void createSubDirAndSystemProperty(<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    String propertyName, Path parent, String subDirName){<a name="line.456"></a>
+<span class="sourceLineNo">457</span><a name="line.457"></a>
+<span class="sourceLineNo">458</span>    String sysValue = System.getProperty(propertyName);<a name="line.458"></a>
+<span class="sourceLineNo">459</span><a name="line.459"></a>
+<span class="sourceLineNo">460</span>    if (sysValue != null) {<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      // There is already a value set. So we do nothing but hope<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      //  that there will be no conflicts<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        sysValue + " so I do NOT create it in " + parent);<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      String confValue = conf.get(propertyName);<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      if (confValue != null &amp;&amp; !confValue.endsWith(sysValue)){<a name="line.466"></a>
+<span class="sourceLineNo">467</span>       LOG.warn(<a name="line.467"></a>
+<span class="sourceLineNo">468</span>         propertyName + " property value differs in configuration and system: "+<a name="line.468"></a>
+<span class="sourceLineNo">469</span>         "Configuration="+confValue+" while System="+sysValue+<a name="line.469"></a>
+<span class="sourceLineNo">470</span>         " Erasing configuration value by system value."<a name="line.470"></a>
+<span class="sourceLineNo">471</span>       );<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      }<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      conf.set(propertyName, sysValue);<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    } else {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      // Ok, it's not set, so we create it as a subdirectory<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      createSubDir(propertyName, parent, subDirName);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      System.setProperty(propertyName, conf.get(propertyName));<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
+<span class="sourceLineNo">480</span><a name="line.480"></a>
+<span class="sourceLineNo">481</span>  /**<a name="line.481"></a>
+<span class="sourceLineNo">482</span>   * @return Where to write test data on the test filesystem; Returns working directory<a name="line.482"></a>
+<span class="sourceLineNo">483</span>   * for the test filesystem by default<a name="line.483"></a>
+<span class="sourceLineNo">484</span>   * @see #setupDataTestDirOnTestFS()<a name="line.484"></a>
+<span class="sourceLineNo">485</span>   * @see #getTestFileSystem()<a name="line.485"></a>
+<span class="sourceLineNo">486</span>   */<a name="line.486"></a>
+<span class="sourceLineNo">487</span>  private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    FileSystem fs = getTestFileSystem();<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.489"></a>
+<span class="sourceLineNo">490</span>  }<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>   * @return META table descriptor<a name="line.493"></a>
+<span class="sourceLineNo">494</span>   * @deprecated since 2.0 version and will be removed in 3.0 version.<a name="line.494"></a>
+<span class="sourceLineNo">495</span>   *             use {@link #getMetaTableDescriptorBuilder()}<a name="line.495"></a>
+<span class="sourceLineNo">496</span>   */<a name="line.496"></a>
+<span class="sourceLineNo">497</span>  @Deprecated<a name="line.497"></a>
+<span class="sourceLineNo">498</span>  public HTableDescriptor getMetaTableDescriptor() {<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    return new ImmutableHTableDescriptor(getMetaTableDescriptorBuilder().build());<a name="line.499"></a>
+<span class="sourceLineNo">500</span>  }<a name="line.500"></a>
+<span class="sourceLineNo">501</span><a name="line.501"></a>
+<span class="sourceLineNo">502</span>  /**<a name="line.502"></a>
+<span class="sourceLineNo">503</span>   * @return META table descriptor<a name="line.503"></a>
+<span class="sourceLineNo">504</span>   */<a name="line.504"></a>
+<span class="sourceLineNo">505</span>  public TableDescriptorBuilder getMetaTableDescriptorBuilder() {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    try {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      return FSTableDescriptors.createMetaTableDescriptorBuilder(conf);<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    } catch (IOException e) {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      throw new RuntimeException("Unable to create META table descriptor", e);<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><a name="line.512"></a>
+<span class="sourceLineNo">513</span>  /**<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.514"></a>
+<span class="sourceLineNo">515</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.515"></a>
+<span class="sourceLineNo">516</span>   * if the test relies on it.<a name="line.516"></a>
+<span class="sourceLineNo">517</span>   * @return a unique path in the test filesystem<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   */<a name="line.518"></a>
+<span class="sourceLineNo">519</span>  public Path getDataTestDirOnTestFS() throws IOException {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    if (dataTestDirOnTestFS == null) {<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      setupDataTestDirOnTestFS();<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>    return dataTestDirOnTestFS;<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  }<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>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.528"></a>
+<span class="sourceLineNo">529</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.529"></a>
+<span class="sourceLineNo">530</span>   * if the test relies on it.<a name="line.530"></a>
+<span class="sourceLineNo">531</span>   * @return a unique path in the test filesystem<a name="line.531"></a>
+<span class="sourceLineNo">532</span>   * @param subdirName name of the subdir to create under the base test dir<a name="line.532"></a>
+<span class="sourceLineNo">533</span>   */<a name="line.533"></a>
+<span class="sourceLineNo">534</span>  public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.535"></a>
+<span class="sourceLineNo">536</span>  }<a name="line.536"></a>
+<span class="sourceLineNo">537</span><a name="line.537"></a>
+<span class="s

<TRUNCATED>

[43/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.NewestLogFilter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.NewestLogFilter.html b/devapidocs/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.NewestLogFilter.html
index e3d918f..5a2fccf 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.NewestLogFilter.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.NewestLogFilter.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.html#line.355">IncrementalBackupManager.NewestLogFilter</a>
+<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.html#line.366">IncrementalBackupManager.NewestLogFilter</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 org.apache.hadoop.fs.PathFilter</pre>
 </li>
@@ -210,7 +210,7 @@ implements org.apache.hadoop.fs.PathFilter</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>lastBackupTS</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.NewestLogFilter.html#line.356">lastBackupTS</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.NewestLogFilter.html#line.367">lastBackupTS</a></pre>
 </li>
 </ul>
 </li>
@@ -227,7 +227,7 @@ implements org.apache.hadoop.fs.PathFilter</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>NewestLogFilter</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.NewestLogFilter.html#line.358">NewestLogFilter</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.NewestLogFilter.html#line.369">NewestLogFilter</a>()</pre>
 </li>
 </ul>
 </li>
@@ -244,7 +244,7 @@ implements org.apache.hadoop.fs.PathFilter</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>setLastBackupTS</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.NewestLogFilter.html#line.361">setLastBackupTS</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;ts)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.NewestLogFilter.html#line.372">setLastBackupTS</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;ts)</pre>
 </li>
 </ul>
 <a name="accept-org.apache.hadoop.fs.Path-">
@@ -253,7 +253,7 @@ implements org.apache.hadoop.fs.PathFilter</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>accept</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.NewestLogFilter.html#line.366">accept</a>(org.apache.hadoop.fs.Path&nbsp;path)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.NewestLogFilter.html#line.377">accept</a>(org.apache.hadoop.fs.Path&nbsp;path)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>accept</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.fs.PathFilter</code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/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 2cd8945..06e7f45 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/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
 <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/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/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 f29bee9..8a494dd 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -555,24 +555,24 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/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/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/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/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/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/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/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/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/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/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/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/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/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
index 329f62f..e67b778 100644
--- a/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
@@ -201,8 +201,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&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/RegionObserver.MutationType.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">RegionObserver.MutationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MetaTableMetrics.MetaTableOps.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">MetaTableMetrics.MetaTableOps</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/RegionObserver.MutationType.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">RegionObserver.MutationType</span></a></li>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/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 56ffc0b..e9e5081 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/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/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/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/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/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/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 26e45f8..28fa2af 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/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.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/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..c12ae36 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -354,8 +354,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.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
 </ul>
 </li>
 </ul>

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/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 0eb8d48..569f158 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/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">PeerProcedureInterface.PeerOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/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 1252921..c13cf86 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/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/Procedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/Procedure.html b/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/Procedure.html
index 7de037e..fd7415c 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/Procedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/Procedure.html
@@ -1596,60 +1596,60 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#delete-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">delete</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;parentProc,
+<td class="colLast"><span class="typeNameLabel">ProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#delete-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">delete</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;parentProc,
       long[]&nbsp;subProcIds)</code>
 <div class="block">The parent procedure completed.</div>
 </td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">NoopProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#delete-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">delete</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
+<td class="colLast"><span class="typeNameLabel">NoopProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#delete-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">delete</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
       long[]&nbsp;subprocs)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;procs)</code>
+<td class="colLast"><span class="typeNameLabel">ProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;procs)</code>
 <div class="block">Serialize a set of new procedures.</div>
 </td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">NoopProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;proc)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">NoopProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;proc)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
-      <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</code>
+<td class="colLast"><span class="typeNameLabel">ProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+      <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;subprocs)</code>
 <div class="block">When a procedure is submitted to the executor insert(proc, null) will be called.</div>
 </td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
-      <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</code>
+<td class="colLast"><span class="typeNameLabel">ProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+      <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;subprocs)</code>
 <div class="block">When a procedure is submitted to the executor insert(proc, null) will be called.</div>
 </td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">NoopProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
-      <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">NoopProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+      <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;subprocs)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">NoopProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
-      <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">NoopProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+      <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;subprocs)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#update-org.apache.hadoop.hbase.procedure2.Procedure-">update</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</code>
+<td class="colLast"><span class="typeNameLabel">ProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#update-org.apache.hadoop.hbase.procedure2.Procedure-">update</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc)</code>
 <div class="block">The specified procedure was executed,
  and the new state should be written to the store.</div>
 </td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">NoopProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#update-org.apache.hadoop.hbase.procedure2.Procedure-">update</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">NoopProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#update-org.apache.hadoop.hbase.procedure2.Procedure-">update</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc)</code>&nbsp;</td>
 </tr>
 </tbody>
 </table>
@@ -1666,8 +1666,8 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.Entry.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#procedure">procedure</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.Entry.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#procedure">procedure</a></span></code>&nbsp;</td>
 </tr>
 </tbody>
 </table>
@@ -1679,12 +1679,12 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.Entry.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#convert--">convert</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.Entry.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#convert--">convert</a></span>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.EntryIterator.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#next--">next</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.EntryIterator.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html#next--">next</a></span>()</code>&nbsp;</td>
 </tr>
 </tbody>
 </table>
@@ -1697,22 +1697,22 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">WALProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#delete-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">delete</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
+<td class="colLast"><span class="typeNameLabel">WALProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#delete-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">delete</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
       long[]&nbsp;subProcIds)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">WALProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;procs)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;procs)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">WALProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
-      <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+      <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;subprocs)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">WALProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
-      <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+      <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;subprocs)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
@@ -1720,49 +1720,49 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">WALProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#update-org.apache.hadoop.hbase.procedure2.Procedure-">update</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureStore.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#update-org.apache.hadoop.hbase.procedure2.Procedure-">update</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">ProcedureWALFormat.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#writeDelete-org.apache.hadoop.hbase.procedure2.util.ByteSlot-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">writeDelete</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
-           <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
+           <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
            long[]&nbsp;subprocs)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">ProcedureWALFormat.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#writeEntry-org.apache.hadoop.hbase.procedure2.util.ByteSlot-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry.Type-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">writeEntry</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
           org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry.Type&nbsp;type,
-          <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
-          <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</code>&nbsp;</td>
+          <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+          <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;subprocs)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">ProcedureWALFormat.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#writeEntry-org.apache.hadoop.hbase.procedure2.util.ByteSlot-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry.Type-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">writeEntry</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
           org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry.Type&nbsp;type,
-          <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
-          <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</code>&nbsp;</td>
+          <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+          <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;subprocs)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">ProcedureWALFormat.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#writeInsert-org.apache.hadoop.hbase.procedure2.util.ByteSlot-org.apache.hadoop.hbase.procedure2.Procedure-">writeInsert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
-           <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</code>&nbsp;</td>
+           <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">ProcedureWALFormat.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#writeInsert-org.apache.hadoop.hbase.procedure2.util.ByteSlot-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">writeInsert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
-           <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
-           <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</code>&nbsp;</td>
+           <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+           <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;subprocs)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">ProcedureWALFormat.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#writeInsert-org.apache.hadoop.hbase.procedure2.util.ByteSlot-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">writeInsert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
-           <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
-           <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</code>&nbsp;</td>
+           <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+           <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;subprocs)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="typeNameLabel">ProcedureWALFormat.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#writeUpdate-org.apache.hadoop.hbase.procedure2.util.ByteSlot-org.apache.hadoop.hbase.procedure2.Procedure-">writeUpdate</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
-           <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</code>&nbsp;</td>
+           <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc)</code>&nbsp;</td>
 </tr>
 </tbody>
 </table>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/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 127ec6b..ee9366f 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/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
 </ul>
 </li>
 </ul>


[08/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index 378f807..a4536ff 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -21955,7 +21955,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#isDeleted-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker-long-">isDeleted(ProcedureStoreTracker, long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">TestProcedureStoreTracker</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#isDeleted-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">isDeleted(ProcedureStoreTracker.BitSetNode, long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">TestProcedureStoreTracker</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html#isDeleted-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">isDeleted(BitSetNode, long)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">TestProcedureStoreTracker</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestInterfaceAlign.html#isDeprecated-java.lang.reflect.Method-">isDeprecated(Method)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestInterfaceAlign.html" title="class in org.apache.hadoop.hbase.client">TestInterfaceAlign</a></dt>
 <dd>&nbsp;</dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html b/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html
index 60b2272..a3fdb10 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html
@@ -105,7 +105,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static interface <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3781">HBaseTestingUtility.PortAllocator.AvailablePortChecker</a></pre>
+<pre>static interface <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3782">HBaseTestingUtility.PortAllocator.AvailablePortChecker</a></pre>
 </li>
 </ul>
 </div>
@@ -149,7 +149,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>available</h4>
-<pre>boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html#line.3782">available</a>(int&nbsp;port)</pre>
+<pre>boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html#line.3783">available</a>(int&nbsp;port)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html b/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html
index e22f906..2b3ce65 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3720">HBaseTestingUtility.PortAllocator</a>
+<pre>static class <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.3721">HBaseTestingUtility.PortAllocator</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -250,7 +250,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>MIN_RANDOM_PORT</h4>
-<pre>private static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3721">MIN_RANDOM_PORT</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3722">MIN_RANDOM_PORT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.PortAllocator.MIN_RANDOM_PORT">Constant Field Values</a></dd>
@@ -263,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>MAX_RANDOM_PORT</h4>
-<pre>private static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3722">MAX_RANDOM_PORT</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3723">MAX_RANDOM_PORT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HBaseTestingUtility.PortAllocator.MAX_RANDOM_PORT">Constant Field Values</a></dd>
@@ -276,7 +276,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>takenRandomPorts</h4>
-<pre>private 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="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; <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3725">takenRandomPorts</a></pre>
+<pre>private 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="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; <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3726">takenRandomPorts</a></pre>
 <div class="block">A set of ports that have been claimed using <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#randomFreePort--"><code>randomFreePort()</code></a>.</div>
 </li>
 </ul>
@@ -286,7 +286,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>random</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3727">random</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3728">random</a></pre>
 </li>
 </ul>
 <a name="portChecker">
@@ -295,7 +295,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>portChecker</h4>
-<pre>private final&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html" title="interface in org.apache.hadoop.hbase">HBaseTestingUtility.PortAllocator.AvailablePortChecker</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3728">portChecker</a></pre>
+<pre>private final&nbsp;<a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html" title="interface in org.apache.hadoop.hbase">HBaseTestingUtility.PortAllocator.AvailablePortChecker</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3729">portChecker</a></pre>
 </li>
 </ul>
 </li>
@@ -312,7 +312,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>PortAllocator</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3730">PortAllocator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a>&nbsp;random)</pre>
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3731">PortAllocator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a>&nbsp;random)</pre>
 </li>
 </ul>
 <a name="PortAllocator-java.util.Random-org.apache.hadoop.hbase.HBaseTestingUtility.PortAllocator.AvailablePortChecker-">
@@ -321,7 +321,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>PortAllocator</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3746">PortAllocator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a>&nbsp;random,
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3747">PortAllocator</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a>&nbsp;random,
                      <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.AvailablePortChecker.html" title="interface in org.apache.hadoop.hbase">HBaseTestingUtility.PortAllocator.AvailablePortChecker</a>&nbsp;portChecker)</pre>
 </li>
 </ul>
@@ -339,7 +339,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>randomFreePort</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3755">randomFreePort</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3756">randomFreePort</a>()</pre>
 <div class="block">Returns a random free port and marks that port as taken. Not thread-safe. Expected to be
  called from single-threaded test setup code/</div>
 </li>
@@ -350,7 +350,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>randomPort</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3776">randomPort</a>()</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html#line.3777">randomPort</a>()</pre>
 <div class="block">Returns a random port. These ports cannot be registered with IANA and are
  intended for dynamic allocation (see http://bit.ly/dynports).</div>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html b/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
index f92edd1..8076874 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2122">HBaseTestingUtility.SeenRowTracker</a>
+<pre>public static class <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.html#line.2123">HBaseTestingUtility.SeenRowTracker</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">A tracker for tracking and validating table rows
  generated with <a href="../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html#loadTable-org.apache.hadoop.hbase.client.Table-byte:A-"><code>HBaseTestingUtility.loadTable(Table, byte[])</code></a></div>
@@ -231,7 +231,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>dim</h4>
-<pre>int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2123">dim</a></pre>
+<pre>int <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2124">dim</a></pre>
 </li>
 </ul>
 <a name="seenRows">
@@ -240,7 +240,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>seenRows</h4>
-<pre>int[][][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2124">seenRows</a></pre>
+<pre>int[][][] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2125">seenRows</a></pre>
 </li>
 </ul>
 <a name="startRow">
@@ -249,7 +249,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>startRow</h4>
-<pre>byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2125">startRow</a></pre>
+<pre>byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2126">startRow</a></pre>
 </li>
 </ul>
 <a name="stopRow">
@@ -258,7 +258,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>stopRow</h4>
-<pre>byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2126">stopRow</a></pre>
+<pre>byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2127">stopRow</a></pre>
 </li>
 </ul>
 </li>
@@ -275,7 +275,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SeenRowTracker</h4>
-<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2128">SeenRowTracker</a>(byte[]&nbsp;startRow,
+<pre>public&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2129">SeenRowTracker</a>(byte[]&nbsp;startRow,
                       byte[]&nbsp;stopRow)</pre>
 </li>
 </ul>
@@ -293,7 +293,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>reset</h4>
-<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2133">reset</a>()</pre>
+<pre>void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2134">reset</a>()</pre>
 </li>
 </ul>
 <a name="i-byte-">
@@ -302,7 +302,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>i</h4>
-<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2139">i</a>(byte&nbsp;b)</pre>
+<pre>int&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2140">i</a>(byte&nbsp;b)</pre>
 </li>
 </ul>
 <a name="addRow-byte:A-">
@@ -311,7 +311,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addRow</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2143">addRow</a>(byte[]&nbsp;row)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2144">addRow</a>(byte[]&nbsp;row)</pre>
 </li>
 </ul>
 <a name="validate--">
@@ -320,7 +320,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>validate</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2150">validate</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html#line.2151">validate</a>()</pre>
 <div class="block">Validate that all the rows between startRow and stopRow are seen exactly once, and
  all other rows none</div>
 </li>


[04/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html
index 0c894de..65a28b9 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/HBaseTestingUtility.PortAllocator.html
@@ -179,4145 +179,4146 @@
 <span class="sourceLineNo">171</span> * avoiding port contention if another local HBase instance is already running).<a name="line.171"></a>
 <span class="sourceLineNo">172</span> * &lt;p&gt;To preserve test data directories, pass the system property "hbase.testing.preserve.testdir"<a name="line.172"></a>
 <span class="sourceLineNo">173</span> * setting it to true.<a name="line.173"></a>
-<span class="sourceLineNo">174</span> */<a name="line.174"></a>
-<span class="sourceLineNo">175</span>@InterfaceAudience.Public<a name="line.175"></a>
-<span class="sourceLineNo">176</span>@SuppressWarnings("deprecation")<a name="line.176"></a>
-<span class="sourceLineNo">177</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<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>   * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.181"></a>
-<span class="sourceLineNo">182</span>   * used in mini dfs.<a name="line.182"></a>
-<span class="sourceLineNo">183</span>   * @deprecated can be used only with mini dfs<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   */<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  @Deprecated<a name="line.185"></a>
-<span class="sourceLineNo">186</span>  private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>  public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  /**<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * The default number of regions per regionserver when creating a pre-split<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * table.<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">174</span> * For triggering test.<a name="line.174"></a>
+<span class="sourceLineNo">175</span> */<a name="line.175"></a>
+<span class="sourceLineNo">176</span>@InterfaceAudience.Public<a name="line.176"></a>
+<span class="sourceLineNo">177</span>@SuppressWarnings("deprecation")<a name="line.177"></a>
+<span class="sourceLineNo">178</span>public class HBaseTestingUtility extends HBaseZKTestingUtility {<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>   * System property key to get test directory value. Name is as it is because mini dfs has<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * hard-codings to put test data here. It should NOT be used directly in HBase, as it's a property<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * used in mini dfs.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * @deprecated can be used only with mini dfs<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   */<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  @Deprecated<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  private static final String TEST_DIRECTORY_KEY = "test.build.data";<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>  public static final String REGIONS_PER_SERVER_KEY = "hbase.test.regions-per-server";<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  /**<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * The default number of regions per regionserver when creating a pre-split<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   * table.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>   */<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  public static final int DEFAULT_REGIONS_PER_SERVER = 3;<a name="line.194"></a>
 <span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>  public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>  private MiniDFSCluster dfsCluster = null;<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>  private volatile HBaseCluster hbaseCluster = null;<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  private MiniMRCluster mrCluster = null;<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>  /** If there is a mini cluster running for this testing utility instance. */<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  private volatile boolean miniClusterRunning;<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  private String hadoopLogDir;<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span>  /** Directory on test filesystem where we put the data for this instance of<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    * HBaseTestingUtility*/<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  private Path dataTestDirOnTestFS = null;<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span>  /**<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * Shared cluster connection.<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   */<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  private volatile Connection connection;<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>  /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  private static String FS_URI;<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>  /** This is for unit tests parameterized with a single boolean. */<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  public static final List&lt;Object[]&gt; MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<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>   * Checks to see if a specific port is available.<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   *<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @param port the port number to check for availability<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the port is available, or &lt;tt&gt;false&lt;/tt&gt; if not<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   */<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  public static boolean available(int port) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    ServerSocket ss = null;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    DatagramSocket ds = null;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    try {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      ss = new ServerSocket(port);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      ss.setReuseAddress(true);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      ds = new DatagramSocket(port);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      ds.setReuseAddress(true);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      return true;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    } catch (IOException e) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      // Do nothing<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    } finally {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      if (ds != null) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        ds.close();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      }<a name="line.244"></a>
-<span class="sourceLineNo">245</span><a name="line.245"></a>
-<span class="sourceLineNo">246</span>      if (ss != null) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        try {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          ss.close();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        } catch (IOException e) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          /* should not be thrown */<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><a name="line.254"></a>
-<span class="sourceLineNo">255</span>    return false;<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>  /**<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * Create all combinations of Bloom filters and compression algorithms for<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   * testing.<a name="line.260"></a>
-<span class="sourceLineNo">261</span>   */<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  private static List&lt;Object[]&gt; bloomAndCompressionCombinations() {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    for (Compression.Algorithm comprAlgo :<a name="line.264"></a>
-<span class="sourceLineNo">265</span>         HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      for (BloomType bloomType : BloomType.values()) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>        configurations.add(new Object[] { comprAlgo, bloomType });<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>    return Collections.unmodifiableList(configurations);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  /**<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * Create combination of memstoreTS and tags<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  private static List&lt;Object[]&gt; memStoreTSAndTagsCombination() {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    configurations.add(new Object[] { false, false });<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    configurations.add(new Object[] { false, true });<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    configurations.add(new Object[] { true, false });<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    configurations.add(new Object[] { true, true });<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    return Collections.unmodifiableList(configurations);<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>  public static List&lt;Object[]&gt; memStoreTSTagsAndOffheapCombination() {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    configurations.add(new Object[] { false, false, true });<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    configurations.add(new Object[] { false, false, false });<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    configurations.add(new Object[] { false, true, true });<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    configurations.add(new Object[] { false, true, false });<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    configurations.add(new Object[] { true, false, true });<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    configurations.add(new Object[] { true, false, false });<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    configurations.add(new Object[] { true, true, true });<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    configurations.add(new Object[] { true, true, false });<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    return Collections.unmodifiableList(configurations);<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>  public static final Collection&lt;Object[]&gt; BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      bloomAndCompressionCombinations();<a name="line.299"></a>
-<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>  public static final String PRESPLIT_TEST_TABLE_KEY = "hbase.test.pre-split-table";<a name="line.197"></a>
+<span class="sourceLineNo">198</span>  public static final boolean PRESPLIT_TEST_TABLE = true;<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span>  private MiniDFSCluster dfsCluster = null;<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>  private volatile HBaseCluster hbaseCluster = null;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  private MiniMRCluster mrCluster = null;<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>  /** If there is a mini cluster running for this testing utility instance. */<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  private volatile boolean miniClusterRunning;<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>  private String hadoopLogDir;<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>  /** Directory on test filesystem where we put the data for this instance of<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    * HBaseTestingUtility*/<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  private Path dataTestDirOnTestFS = null;<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>   * Shared cluster connection.<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   */<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  private volatile Connection connection;<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>  /** Filesystem URI used for map-reduce mini-cluster setup */<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  private static String FS_URI;<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>  /** This is for unit tests parameterized with a single boolean. */<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  public static final List&lt;Object[]&gt; MEMSTORETS_TAGS_PARAMETRIZED = memStoreTSAndTagsCombination();<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>   * Checks to see if a specific port is available.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   *<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * @param port the port number to check for availability<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the port is available, or &lt;tt&gt;false&lt;/tt&gt; if not<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  public static boolean available(int port) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    ServerSocket ss = null;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    DatagramSocket ds = null;<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    try {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      ss = new ServerSocket(port);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      ss.setReuseAddress(true);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      ds = new DatagramSocket(port);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      ds.setReuseAddress(true);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      return true;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    } catch (IOException e) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      // Do nothing<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    } finally {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      if (ds != null) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        ds.close();<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      }<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>      if (ss != null) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        try {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          ss.close();<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        } catch (IOException e) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          /* should not be thrown */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        }<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      }<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    }<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span>    return false;<a name="line.256"></a>
+<span class="sourceLineNo">257</span>  }<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span>  /**<a name="line.259"></a>
+<span class="sourceLineNo">260</span>   * Create all combinations of Bloom filters and compression algorithms for<a name="line.260"></a>
+<span class="sourceLineNo">261</span>   * testing.<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   */<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  private static List&lt;Object[]&gt; bloomAndCompressionCombinations() {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    for (Compression.Algorithm comprAlgo :<a name="line.265"></a>
+<span class="sourceLineNo">266</span>         HBaseCommonTestingUtility.COMPRESSION_ALGORITHMS) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      for (BloomType bloomType : BloomType.values()) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>        configurations.add(new Object[] { comprAlgo, bloomType });<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>    return Collections.unmodifiableList(configurations);<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>   * Create combination of memstoreTS and tags<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   */<a name="line.276"></a>
+<span class="sourceLineNo">277</span>  private static List&lt;Object[]&gt; memStoreTSAndTagsCombination() {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    configurations.add(new Object[] { false, false });<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    configurations.add(new Object[] { false, true });<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    configurations.add(new Object[] { true, false });<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    configurations.add(new Object[] { true, true });<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    return Collections.unmodifiableList(configurations);<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>  public static List&lt;Object[]&gt; memStoreTSTagsAndOffheapCombination() {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    List&lt;Object[]&gt; configurations = new ArrayList&lt;&gt;();<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    configurations.add(new Object[] { false, false, true });<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    configurations.add(new Object[] { false, false, false });<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    configurations.add(new Object[] { false, true, true });<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    configurations.add(new Object[] { false, true, false });<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    configurations.add(new Object[] { true, false, true });<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    configurations.add(new Object[] { true, false, false });<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    configurations.add(new Object[] { true, true, true });<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    configurations.add(new Object[] { true, true, false });<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    return Collections.unmodifiableList(configurations);<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>  public static final Collection&lt;Object[]&gt; BLOOM_AND_COMPRESSION_COMBINATIONS =<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      bloomAndCompressionCombinations();<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>   * &lt;p&gt;Create an HBaseTestingUtility using a default configuration.<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   *<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.307"></a>
-<span class="sourceLineNo">308</span>   *<a name="line.308"></a>
-<span class="sourceLineNo">309</span>   * &lt;p&gt;Previously, there was a distinction between the type of utility returned by<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * at which point they will switch to using mini DFS for storage.<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   */<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  public HBaseTestingUtility() {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    this(HBaseConfiguration.create());<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  }<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span>  /**<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * &lt;p&gt;Create an HBaseTestingUtility using a given configuration.<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   *<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   *<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * &lt;p&gt;Previously, there was a distinction between the type of utility returned by<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * at which point they will switch to using mini DFS for storage.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   *<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * @param conf The configuration to use for further operations<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   */<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    super(conf);<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>    // a hbase checksum verification failure will cause unit tests to fail<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.336"></a>
-<span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>    // Save this for when setting default file:// breaks things<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    if (this.conf.get("fs.defaultFS") != null) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    // Every cluster is a local cluster until we start DFS<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    // Note that conf could be null, but this.conf will not be<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    String dataTestDir = getDataTestDir().toString();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    this.conf.set("fs.defaultFS","file:///");<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    // If the value for random ports isn't set set it to true, thus making<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    // tests opt-out for random port assignment<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  }<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>  /**<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility()} instead<a name="line.359"></a>
-<span class="sourceLineNo">360</span>   * @return a normal HBaseTestingUtility<a name="line.360"></a>
-<span class="sourceLineNo">361</span>   */<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  @Deprecated<a name="line.362"></a>
-<span class="sourceLineNo">363</span>  public static HBaseTestingUtility createLocalHTU() {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    return new HBaseTestingUtility();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>  /**<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility(Configuration)} instead<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * @return a normal HBaseTestingUtility<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   */<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  @Deprecated<a name="line.371"></a>
-<span class="sourceLineNo">372</span>  public static HBaseTestingUtility createLocalHTU(Configuration c) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    return new HBaseTestingUtility(c);<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>   * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   */<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    closeRegionAndWAL((HRegion)r);<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>  /**<a name="line.383"></a>
-<span class="sourceLineNo">384</span>   * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.384"></a>
-<span class="sourceLineNo">385</span>   */<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    if (r == null) return;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    r.close();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    if (r.getWAL() == null) return;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    r.getWAL().close();<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  /**<a name="line.393"></a>
-<span class="sourceLineNo">394</span>   * Returns this classes's instance of {@link Configuration}.  Be careful how<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   * you use the returned Configuration since {@link Connection} instances<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   * can be shared.  The Map of Connections is keyed by the Configuration.  If<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * say, a Connection was being used against a cluster that had been shutdown,<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   * be wholesome.  Rather than use the return direct, its usually best to<a name="line.399"></a>
-<span class="sourceLineNo">400</span>   * make a copy and use that.  Do<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * &lt;code&gt;Configuration c = new Configuration(INSTANCE.getConfiguration());&lt;/code&gt;<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * @return Instance of Configuration.<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   */<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  @Override<a name="line.404"></a>
-<span class="sourceLineNo">405</span>  public Configuration getConfiguration() {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    return super.getConfiguration();<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>  public void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    this.hbaseCluster = hbaseCluster;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>  }<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>  /**<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * Give it a random name so can have many concurrent tests running if<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * we need to.  It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   * System property, as it's what minidfscluster bases<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   * it data dir on.  Moding a System property is not the way to do concurrent<a name="line.418"></a>
-<span class="sourceLineNo">419</span>   * instances -- another instance could grab the temporary<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * value unintentionally -- but not anything can do about it at moment;<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * single instance only is how the minidfscluster works.<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   *<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * We also create the underlying directory for<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   *  hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   *  in the conf, and as a system property for hadoop.tmp.dir<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   *<a name="line.426"></a>
-<span class="sourceLineNo">427</span>   * @return The calculated data test build directory, if newly-created.<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   */<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  @Override<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  protected Path setupDataTestDir() {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    Path testPath = super.setupDataTestDir();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    if (null == testPath) {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      return null;<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>    createSubDirAndSystemProperty(<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      "hadoop.log.dir",<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      testPath, "hadoop-log-dir");<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>    // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    //  we want our own value to ensure uniqueness on the same machine<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    createSubDirAndSystemProperty(<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      "hadoop.tmp.dir",<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      testPath, "hadoop-tmp-dir");<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>    // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    createSubDir(<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      "mapreduce.cluster.local.dir",<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      testPath, "mapred-local-dir");<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>    return testPath;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  private void createSubDirAndSystemProperty(<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    String propertyName, Path parent, String subDirName){<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    String sysValue = System.getProperty(propertyName);<a name="line.457"></a>
-<span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span>    if (sysValue != null) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // There is already a value set. So we do nothing but hope<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      //  that there will be no conflicts<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.462"></a>
-<span class="sourceLineNo">463</span>        sysValue + " so I do NOT create it in " + parent);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      String confValue = conf.get(propertyName);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      if (confValue != null &amp;&amp; !confValue.endsWith(sysValue)){<a name="line.465"></a>
-<span class="sourceLineNo">466</span>       LOG.warn(<a name="line.466"></a>
-<span class="sourceLineNo">467</span>         propertyName + " property value differs in configuration and system: "+<a name="line.467"></a>
-<span class="sourceLineNo">468</span>         "Configuration="+confValue+" while System="+sysValue+<a name="line.468"></a>
-<span class="sourceLineNo">469</span>         " Erasing configuration value by system value."<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>      conf.set(propertyName, sysValue);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    } else {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      // Ok, it's not set, so we create it as a subdirectory<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      createSubDir(propertyName, parent, subDirName);<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      System.setProperty(propertyName, conf.get(propertyName));<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
-<span class="sourceLineNo">478</span>  }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span>  /**<a name="line.480"></a>
-<span class="sourceLineNo">481</span>   * @return Where to write test data on the test filesystem; Returns working directory<a name="line.481"></a>
-<span class="sourceLineNo">482</span>   * for the test filesystem by default<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   * @see #setupDataTestDirOnTestFS()<a name="line.483"></a>
-<span class="sourceLineNo">484</span>   * @see #getTestFileSystem()<a name="line.484"></a>
-<span class="sourceLineNo">485</span>   */<a name="line.485"></a>
-<span class="sourceLineNo">486</span>  private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    FileSystem fs = getTestFileSystem();<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.488"></a>
-<span class="sourceLineNo">489</span>  }<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>  /**<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * @return META table descriptor<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * @deprecated since 2.0 version and will be removed in 3.0 version.<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   *             use {@link #getMetaTableDescriptorBuilder()}<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   */<a name="line.495"></a>
-<span class="sourceLineNo">496</span>  @Deprecated<a name="line.496"></a>
-<span class="sourceLineNo">497</span>  public HTableDescriptor getMetaTableDescriptor() {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    return new ImmutableHTableDescriptor(getMetaTableDescriptorBuilder().build());<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span>  /**<a name="line.501"></a>
-<span class="sourceLineNo">502</span>   * @return META table descriptor<a name="line.502"></a>
-<span class="sourceLineNo">503</span>   */<a name="line.503"></a>
-<span class="sourceLineNo">504</span>  public TableDescriptorBuilder getMetaTableDescriptorBuilder() {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    try {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      return FSTableDescriptors.createMetaTableDescriptorBuilder(conf);<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    } catch (IOException e) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      throw new RuntimeException("Unable to create META table descriptor", e);<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<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>  /**<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.513"></a>
-<span class="sourceLineNo">514</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.514"></a>
-<span class="sourceLineNo">515</span>   * if the test relies on it.<a name="line.515"></a>
-<span class="sourceLineNo">516</span>   * @return a unique path in the test filesystem<a name="line.516"></a>
-<span class="sourceLineNo">517</span>   */<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  public Path getDataTestDirOnTestFS() throws IOException {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    if (dataTestDirOnTestFS == null) {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      setupDataTestDirOnTestFS();<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>    return dataTestDirOnTestFS;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>  }<a name="line.524"></a>
-<span class="sourceLineNo">525</span><a name="line.525"></a>
-<span class="sourceLineNo">526</span>  /**<a name="line.526"></a>
-<span class="sourceLineNo">527</span>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.527"></a>
-<span class="sourceLineNo">528</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * if the test relies on it.<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * @return a unique path in the test filesystem<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   * @param subdirName name of the subdir to create under the base test dir<a name="line.531"></a>
-<span class="sourceLineNo">532</span>   */<a name="line.532"></a>
-<span class="sourceLineNo">533</span>  public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
-<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span>  /**<a name="line.537"></a>
-<span class="sourceLineNo">538</span>   * Sets up a path in test filesystem to be used by tests.<a name="line.538"></a>
-<span class="sourceLineNo">539</span>   * Creates a new directory if not already setup.<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   */<a name="line.540"></a>
-<span class="sourceLineNo">541</span>  private void setupDataTestDirOnTestFS() throws IOException {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>    if (dataTestDirOnTestFS != null) {<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      LOG.warn("Data test on test fs dir already setup in "<a name="line.543"></a>
-<span class="sourceLineNo">544</span>          + dataTestDirOnTestFS.toString());<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      return;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    dataTestDirOnTestFS = getNewDataTestDirOnTestFS();<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 up a new path in test filesystem to be used by tests.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   */<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  private Path getNewDataTestDirOnTestFS() throws IOException {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    //The file system can be either local, mini dfs, or if the configuration<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    //is supplied externally, it can be an external cluster FS. If it is a local<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    //file system, the tests should use getBaseTestDir, otherwise, we can use<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    //the working directory, and create a unique sub dir there<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    FileSystem fs = getTestFileSystem();<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    Path newDataTestDir;<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    String randomStr = getRandomUUID().toString();<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    if (fs.getUri().getScheme().equals(FileSystem.getLocal(conf).getUri().getScheme())) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      newDataTestDir = new Path(getDataTestDir(), randomStr);<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      File dataTestDir = new File(newDataTestDir.toString());<a name="line.563"></a>
-<span class="sourceLineNo">564</span>      if (deleteOnExit()) dataTestDir.deleteOnExit();<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    } else {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      Path base = getBaseTestDirOnTestFS();<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      newDataTestDir = new Path(base, randomStr);<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      if (deleteOnExit()) fs.deleteOnExit(newDataTestDir);<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    return newDataTestDir;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>  /**<a name="line.573"></a>
-<span class="sourceLineNo">574</span>   * Cleans the test data directory on the test filesystem.<a name="line.574"></a>
-<span class="sourceLineNo">575</span>   * @return True if we removed the test dirs<a name="line.575"></a>
-<span class="sourceLineNo">576</span>   * @throws IOException<a name="line.576"></a>
-<span class="sourceLineNo">577</span>   */<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  public boolean cleanupDataTestDirOnTestFS() throws IOException {<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    boolean ret = getTestFileSystem().delete(dataTestDirOnTestFS, true);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    if (ret)<a name="line.580"></a>
-<span class="sourceLineNo">581</span>      dataTestDirOnTestFS = null;<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    return ret;<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>   * Cleans a subdirectory under the test data directory on the test filesystem.<a name="line.586"></a>
-<span class="sourceLineNo">587</span>   * @return True if we removed child<a name="line.587"></a>
-<span class="sourceLineNo">588</span>   * @throws IOException<a name="line.588"></a>
-<span class="sourceLineNo">589</span>   */<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  public boolean cleanupDataTestDirOnTestFS(String subdirName) throws IOException {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    Path cpath = getDataTestDirOnTestFS(subdirName);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return getTestFileSystem().delete(cpath, true);<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>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * Start a minidfscluster.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * @param servers How many DNs to start.<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   * @throws Exception<a name="line.598"></a>
-<span class="sourceLineNo">599</span>   * @see #shutdownMiniDFSCluster()<a name="line.599"></a>
-<span class="sourceLineNo">600</span>   * @return The mini dfs cluster created.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>   */<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  public MiniDFSCluster startMiniDFSCluster(int servers) throws Exception {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    return startMiniDFSCluster(servers, null);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>  }<a name="line.604"></a>
-<span class="sourceLineNo">605</span><a name="line.605"></a>
-<span class="sourceLineNo">606</span>  /**<a name="line.606"></a>
-<span class="sourceLineNo">607</span>   * Start a minidfscluster.<a name="line.607"></a>
-<span class="sourceLineNo">608</span>   * This is useful if you want to run datanode on distinct hosts for things<a name="line.608"></a>
-<span class="sourceLineNo">609</span>   * like HDFS block location verification.<a name="line.609"></a>
-<span class="sourceLineNo">610</span>   * If you start MiniDFSCluster without host names, all instances of the<a name="line.610"></a>
-<span class="sourceLineNo">611</span>   * datanodes will have the same host name.<a name="line.611"></a>
-<span class="sourceLineNo">612</span>   * @param hosts hostnames DNs to run on.<a name="line.612"></a>
-<span class="sourceLineNo">613</span>   * @throws Exception<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * @see #shutdownMiniDFSCluster()<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @return The mini dfs cluster created.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   */<a name="line.616"></a>
-<span class="sourceLineNo">617</span>  public MiniDFSCluster startMiniDFSCluster(final String hosts[])<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  throws Exception {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    if ( hosts != null &amp;&amp; hosts.length != 0) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return startMiniDFSCluster(hosts.length, hosts);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    } else {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      return startMiniDFSCluster(1, null);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    }<a name="line.623"></a>
-<span class="sourceLineNo">624</span>  }<a name="line.624"></a>
-<span class="sourceLineNo">625</span><a name="line.625"></a>
-<span class="sourceLineNo">626</span>  /**<a name="line.626"></a>
-<span class="sourceLineNo">627</span>   * Start a minidfscluster.<a name="line.627"></a>
-<span class="sourceLineNo">628</span>   * Can only create one.<a name="line.628"></a>
-<span class="sourceLineNo">629</span>   * @param servers How many DNs to start.<a name="line.629"></a>
-<span class="sourceLineNo">630</span>   * @param hosts hostnames DNs to run on.<a name="line.630"></a>
-<span class="sourceLineNo">631</span>   * @throws Exception<a name="line.631"></a>
-<span class="sourceLineNo">632</span>   * @see #shutdownMiniDFSCluster()<a name="line.632"></a>
-<span class="sourceLineNo">633</span>   * @return The mini dfs cluster created.<a name="line.633"></a>
-<span class="sourceLineNo">634</span>   */<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  public MiniDFSCluster startMiniDFSCluster(int servers, final String hosts[])<a name="line.635"></a>
-<span class="sourceLineNo">636</span>  throws Exception {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    return startMiniDFSCluster(servers, null, hosts);<a name="line.637"></a>
-<span class="sourceLineNo">638</span>  }<a name="line.638"></a>
-<span class="sourceLineNo">639</span><a name="line.639"></a>
-<span class="sourceLineNo">640</span>  private void setFs() throws IOException {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    if(this.dfsCluster == null){<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      LOG.info("Skipping setting fs because dfsCluster is null");<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      return;<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    }<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    FileSystem fs = this.dfsCluster.getFileSystem();<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    FSUtils.setFsDefault(this.conf, new Path(fs.getUri()));<a name="line.646"></a>
-<span class="sourceLineNo">647</span><a name="line.647"></a>
-<span class="sourceLineNo">648</span>    // re-enable this check with dfs<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    conf.unset(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>  }<a name="line.650"></a>
-<span class="sourceLineNo">651</span><a name="line.651"></a>
-<span class="sourceLineNo">652</span>  public MiniDFSCluster startMiniDFSCluster(int servers, final  String racks[], String hosts[])<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      throws Exception {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    createDirsAndSetProperties();<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    EditLogFileOutputStream.setShouldSkipFsyncForTesting(true);<a name="line.655"></a>
-<span class="sourceLineNo">656</span><a name="line.656"></a>
-<span class="sourceLineNo">657</span>    // Error level to skip some warnings specific to the minicluster. See HBASE-4709<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    org.apache.log4j.Logger.getLogger(org.apache.hadoop.metrics2.util.MBeans.class).<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        setLevel(org.apache.log4j.Level.ERROR);<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    org.apache.log4j.Logger.getLogger(org.apache.hadoop.metrics2.impl.MetricsSystemImpl.class).<a name="line.660"></a>
-<span class="sourceLineNo">661</span>        setLevel(org.apache.log4j.Level.ERROR);<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>    TraceUtil.initTracer(conf);<a name="line.663"></a>
-<span class="sourceLineNo">664</span><a name="line.664"></a>
-<span class="sourceLineNo">665</span>    this.dfsCluster = new MiniDFSCluster(0, this.conf, servers, true, true,<a name="line.665"></a>
-<span class="sourceLineNo">666</span>        true, null, racks, hosts, null);<a name="line.666"></a>
-<span class="sourceLineNo">667</span><a name="line.667"></a>
-<span class="sourceLineNo">668</span>    // Set this just-started cluster as our filesystem.<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    setFs();<a name="line.669"></a>
-<span class="sourceLineNo">670</span><a name="line.670"></a>
-<span class="sourceLineNo">671</span>    // Wait for the cluster to be totally up<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    this.dfsCluster.waitClusterUp();<a name="line.672"></a>
-<span class="sourceLineNo">673</span><a name="line.673"></a>
-<span class="sourceLineNo">674</span>    //reset the test directory for test file system<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    dataTestDirOnTestFS = null;<a name="line.675"></a>
-<span class="sourceLineNo">676</span>    String dataTestDir = getDataTestDir().toString();<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    conf.set(HConstants.HBASE_DIR, dataTestDir);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>    return this.dfsCluster;<a name="line.680"></a>
-<span class="sourceLineNo">681</span>  }<a name="line.681"></a>
-<span class="sourceLineNo">682</span><a name="line.682"></a>
-<span class="sourceLineNo">683</span>  public MiniDFSCluster startMiniDFSClusterForTestWAL(int namenodePort) throws IOException {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    createDirsAndSetProperties();<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    dfsCluster = new MiniDFSCluster(namenodePort, conf, 5, false, true, true, null,<a name="line.685"></a>
-<span class="sourceLineNo">686</span>        null, null, null);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>    return dfsCluster;<a name="line.687"></a>
-<span class="sourceLineNo">688</span>  }<a name="line.688"></a>
-<span class="sourceLineNo">689</span><a name="line.689"></a>
-<span class="sourceLineNo">690</span>  /** This is used before starting HDFS and map-reduce mini-clusters */<a name="line.690"></a>
-<span class="sourceLineNo">691</span>  private void createDirsAndSetProperties() throws IOException {<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    setupClusterTestDir();<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    conf.set(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    System.setProperty(TEST_DIRECTORY_KEY, clusterTestDir.getPath());<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    createDirAndSetProperty("cache_data", "test.cache.data");<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    createDirAndSetProperty("hadoop_tmp", "hadoop.tmp.dir");<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    hadoopLogDir = createDirAndSetProperty("hadoop_logs", "hadoop.log.dir");<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    createDirAndSetProperty("mapred_local", "mapreduce.cluster.local.dir");<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    createDirAndSetProperty("mapred_temp", "mapreduce.cluster.temp.dir");<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    enableShortCircuit();<a name="line.700"></a>
-<span class="sourceLineNo">701</span><a name="line.701"></a>
-<span class="sourceLineNo">702</span>    Path root = getDataTestDirOnTestFS("hadoop");<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    conf.set(MapreduceTestingShim.getMROutputDirProp(),<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      new Path(root, "mapred-output-dir").toString());<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    conf.set("mapreduce.jobtracker.system.dir", new Path(root, "mapred-system-dir").toString());<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    conf.set("mapreduce.jobtracker.staging.root.dir",<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      new Path(root, "mapreduce-jobtracker-staging-root-dir").toString());<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    conf.set("mapreduce.job.working.dir", new Path(root, "mapred-working-dir").toString());<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    conf.set("yarn.app.mapreduce.am.staging-dir",<a name="line.709"></a>
-<span class="sourceLineNo">710</span>      new Path(root, "mapreduce-am-staging-root-dir").toString());<a name="line.710"></a>
-<span class="sourceLineNo">711</span>  }<a name="line.711"></a>
-<span class="sourceLineNo">712</span><a name="line.712"></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>   * &lt;p&gt;Create an HBaseTestingUtility using a default configuration.<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   *<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.306"></a>
+<span class="sourceLineNo">307</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.307"></a>
+<span class="sourceLineNo">308</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.308"></a>
+<span class="sourceLineNo">309</span>   *<a name="line.309"></a>
+<span class="sourceLineNo">310</span>   * &lt;p&gt;Previously, there was a distinction between the type of utility returned by<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * at which point they will switch to using mini DFS for storage.<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   */<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  public HBaseTestingUtility() {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    this(HBaseConfiguration.create());<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>   * &lt;p&gt;Create an HBaseTestingUtility using a given configuration.<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   *<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * &lt;p&gt;Initially, all tmp files are written to a local test data directory.<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * Once {@link #startMiniDFSCluster} is called, either directly or via<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * {@link #startMiniCluster()}, tmp data will be written to the DFS directory instead.<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   *<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * &lt;p&gt;Previously, there was a distinction between the type of utility returned by<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   * {@link #createLocalHTU()} and this constructor; this is no longer the case. All<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   * HBaseTestingUtility objects will behave as local until a DFS cluster is started,<a name="line.328"></a>
+<span class="sourceLineNo">329</span>   * at which point they will switch to using mini DFS for storage.<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   *<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   * @param conf The configuration to use for further operations<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  public HBaseTestingUtility(@Nullable Configuration conf) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    super(conf);<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>    // a hbase checksum verification failure will cause unit tests to fail<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    ChecksumUtil.generateExceptionForChecksumFailureForTest(true);<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>    // Save this for when setting default file:// breaks things<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    if (this.conf.get("fs.defaultFS") != null) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      this.conf.set("original.defaultFS", this.conf.get("fs.defaultFS"));<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    }<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    if (this.conf.get(HConstants.HBASE_DIR) != null) {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      this.conf.set("original.hbase.dir", this.conf.get(HConstants.HBASE_DIR));<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    }<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    // Every cluster is a local cluster until we start DFS<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    // Note that conf could be null, but this.conf will not be<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    String dataTestDir = getDataTestDir().toString();<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    this.conf.set("fs.defaultFS","file:///");<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    this.conf.set(HConstants.HBASE_DIR, "file://" + dataTestDir);<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    LOG.debug("Setting {} to {}", HConstants.HBASE_DIR, dataTestDir);<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    this.conf.setBoolean(CommonFSUtils.UNSAFE_STREAM_CAPABILITY_ENFORCE,false);<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    // If the value for random ports isn't set set it to true, thus making<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    // tests opt-out for random port assignment<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    this.conf.setBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS,<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        this.conf.getBoolean(LocalHBaseCluster.ASSIGN_RANDOM_PORTS, true));<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>  /**<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility()} instead<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * @return a normal HBaseTestingUtility<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  @Deprecated<a name="line.363"></a>
+<span class="sourceLineNo">364</span>  public static HBaseTestingUtility createLocalHTU() {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    return new HBaseTestingUtility();<a name="line.365"></a>
+<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>  /**<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * @deprecated use {@link HBaseTestingUtility#HBaseTestingUtility(Configuration)} instead<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   * @return a normal HBaseTestingUtility<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   */<a name="line.371"></a>
+<span class="sourceLineNo">372</span>  @Deprecated<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  public static HBaseTestingUtility createLocalHTU(Configuration c) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    return new HBaseTestingUtility(c);<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>  /**<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * Close both the region {@code r} and it's underlying WAL. For use in tests.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  public static void closeRegionAndWAL(final Region r) throws IOException {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    closeRegionAndWAL((HRegion)r);<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>  /**<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * Close both the HRegion {@code r} and it's underlying WAL. For use in tests.<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   */<a name="line.386"></a>
+<span class="sourceLineNo">387</span>  public static void closeRegionAndWAL(final HRegion r) throws IOException {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    if (r == null) return;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    r.close();<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    if (r.getWAL() == null) return;<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    r.getWAL().close();<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>  /**<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * Returns this classes's instance of {@link Configuration}.  Be careful how<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * you use the returned Configuration since {@link Connection} instances<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   * can be shared.  The Map of Connections is keyed by the Configuration.  If<a name="line.397"></a>
+<span class="sourceLineNo">398</span>   * say, a Connection was being used against a cluster that had been shutdown,<a name="line.398"></a>
+<span class="sourceLineNo">399</span>   * see {@link #shutdownMiniCluster()}, then the Connection will no longer<a name="line.399"></a>
+<span class="sourceLineNo">400</span>   * be wholesome.  Rather than use the return direct, its usually best to<a name="line.400"></a>
+<span class="sourceLineNo">401</span>   * make a copy and use that.  Do<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   * &lt;code&gt;Configuration c = new Configuration(INSTANCE.getConfiguration());&lt;/code&gt;<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * @return Instance of Configuration.<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  @Override<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  public Configuration getConfiguration() {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    return super.getConfiguration();<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 void setHBaseCluster(HBaseCluster hbaseCluster) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    this.hbaseCluster = hbaseCluster;<a name="line.411"></a>
+<span class="sourceLineNo">412</span>  }<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>  /**<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * Home our data in a dir under {@link #DEFAULT_BASE_TEST_DIRECTORY}.<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   * Give it a random name so can have many concurrent tests running if<a name="line.416"></a>
+<span class="sourceLineNo">417</span>   * we need to.  It needs to amend the {@link #TEST_DIRECTORY_KEY}<a name="line.417"></a>
+<span class="sourceLineNo">418</span>   * System property, as it's what minidfscluster bases<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   * it data dir on.  Moding a System property is not the way to do concurrent<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * instances -- another instance could grab the temporary<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * value unintentionally -- but not anything can do about it at moment;<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * single instance only is how the minidfscluster works.<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   *<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   * We also create the underlying directory for<a name="line.424"></a>
+<span class="sourceLineNo">425</span>   *  hadoop.log.dir, mapreduce.cluster.local.dir and hadoop.tmp.dir, and set the values<a name="line.425"></a>
+<span class="sourceLineNo">426</span>   *  in the conf, and as a system property for hadoop.tmp.dir<a name="line.426"></a>
+<span class="sourceLineNo">427</span>   *<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @return The calculated data test build directory, if newly-created.<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   */<a name="line.429"></a>
+<span class="sourceLineNo">430</span>  @Override<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  protected Path setupDataTestDir() {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    Path testPath = super.setupDataTestDir();<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    if (null == testPath) {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      return null;<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    }<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span>    createSubDirAndSystemProperty(<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      "hadoop.log.dir",<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      testPath, "hadoop-log-dir");<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>    // This is defaulted in core-default.xml to /tmp/hadoop-${user.name}, but<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    //  we want our own value to ensure uniqueness on the same machine<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    createSubDirAndSystemProperty(<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      "hadoop.tmp.dir",<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      testPath, "hadoop-tmp-dir");<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span>    // Read and modified in org.apache.hadoop.mapred.MiniMRCluster<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    createSubDir(<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      "mapreduce.cluster.local.dir",<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      testPath, "mapred-local-dir");<a name="line.450"></a>
+<span class="sourceLineNo">451</span><a name="line.451"></a>
+<span class="sourceLineNo">452</span>    return testPath;<a name="line.452"></a>
+<span class="sourceLineNo">453</span>  }<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>  private void createSubDirAndSystemProperty(<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    String propertyName, Path parent, String subDirName){<a name="line.456"></a>
+<span class="sourceLineNo">457</span><a name="line.457"></a>
+<span class="sourceLineNo">458</span>    String sysValue = System.getProperty(propertyName);<a name="line.458"></a>
+<span class="sourceLineNo">459</span><a name="line.459"></a>
+<span class="sourceLineNo">460</span>    if (sysValue != null) {<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      // There is already a value set. So we do nothing but hope<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      //  that there will be no conflicts<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      LOG.info("System.getProperty(\""+propertyName+"\") already set to: "+<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        sysValue + " so I do NOT create it in " + parent);<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      String confValue = conf.get(propertyName);<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      if (confValue != null &amp;&amp; !confValue.endsWith(sysValue)){<a name="line.466"></a>
+<span class="sourceLineNo">467</span>       LOG.warn(<a name="line.467"></a>
+<span class="sourceLineNo">468</span>         propertyName + " property value differs in configuration and system: "+<a name="line.468"></a>
+<span class="sourceLineNo">469</span>         "Configuration="+confValue+" while System="+sysValue+<a name="line.469"></a>
+<span class="sourceLineNo">470</span>         " Erasing configuration value by system value."<a name="line.470"></a>
+<span class="sourceLineNo">471</span>       );<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      }<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      conf.set(propertyName, sysValue);<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    } else {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      // Ok, it's not set, so we create it as a subdirectory<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      createSubDir(propertyName, parent, subDirName);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      System.setProperty(propertyName, conf.get(propertyName));<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span>  }<a name="line.479"></a>
+<span class="sourceLineNo">480</span><a name="line.480"></a>
+<span class="sourceLineNo">481</span>  /**<a name="line.481"></a>
+<span class="sourceLineNo">482</span>   * @return Where to write test data on the test filesystem; Returns working directory<a name="line.482"></a>
+<span class="sourceLineNo">483</span>   * for the test filesystem by default<a name="line.483"></a>
+<span class="sourceLineNo">484</span>   * @see #setupDataTestDirOnTestFS()<a name="line.484"></a>
+<span class="sourceLineNo">485</span>   * @see #getTestFileSystem()<a name="line.485"></a>
+<span class="sourceLineNo">486</span>   */<a name="line.486"></a>
+<span class="sourceLineNo">487</span>  private Path getBaseTestDirOnTestFS() throws IOException {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    FileSystem fs = getTestFileSystem();<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    return new Path(fs.getWorkingDirectory(), "test-data");<a name="line.489"></a>
+<span class="sourceLineNo">490</span>  }<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>   * @return META table descriptor<a name="line.493"></a>
+<span class="sourceLineNo">494</span>   * @deprecated since 2.0 version and will be removed in 3.0 version.<a name="line.494"></a>
+<span class="sourceLineNo">495</span>   *             use {@link #getMetaTableDescriptorBuilder()}<a name="line.495"></a>
+<span class="sourceLineNo">496</span>   */<a name="line.496"></a>
+<span class="sourceLineNo">497</span>  @Deprecated<a name="line.497"></a>
+<span class="sourceLineNo">498</span>  public HTableDescriptor getMetaTableDescriptor() {<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    return new ImmutableHTableDescriptor(getMetaTableDescriptorBuilder().build());<a name="line.499"></a>
+<span class="sourceLineNo">500</span>  }<a name="line.500"></a>
+<span class="sourceLineNo">501</span><a name="line.501"></a>
+<span class="sourceLineNo">502</span>  /**<a name="line.502"></a>
+<span class="sourceLineNo">503</span>   * @return META table descriptor<a name="line.503"></a>
+<span class="sourceLineNo">504</span>   */<a name="line.504"></a>
+<span class="sourceLineNo">505</span>  public TableDescriptorBuilder getMetaTableDescriptorBuilder() {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    try {<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      return FSTableDescriptors.createMetaTableDescriptorBuilder(conf);<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    } catch (IOException e) {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      throw new RuntimeException("Unable to create META table descriptor", e);<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><a name="line.512"></a>
+<span class="sourceLineNo">513</span>  /**<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.514"></a>
+<span class="sourceLineNo">515</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.515"></a>
+<span class="sourceLineNo">516</span>   * if the test relies on it.<a name="line.516"></a>
+<span class="sourceLineNo">517</span>   * @return a unique path in the test filesystem<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   */<a name="line.518"></a>
+<span class="sourceLineNo">519</span>  public Path getDataTestDirOnTestFS() throws IOException {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    if (dataTestDirOnTestFS == null) {<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      setupDataTestDirOnTestFS();<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>    return dataTestDirOnTestFS;<a name="line.524"></a>
+<span class="sourceLineNo">525</span>  }<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>   * Returns a Path in the test filesystem, obtained from {@link #getTestFileSystem()}<a name="line.528"></a>
+<span class="sourceLineNo">529</span>   * to write temporary test data. Call this method after setting up the mini dfs cluster<a name="line.529"></a>
+<span class="sourceLineNo">530</span>   * if the test relies on it.<a name="line.530"></a>
+<span class="sourceLineNo">531</span>   * @return a unique path in the test filesystem<a name="line.531"></a>
+<span class="sourceLineNo">532</span>   * @param subdirName name of the subdir to create under the base test dir<a name="line.532"></a>
+<span class="sourceLineNo">533</span>   */<a name="line.533"></a>
+<span class="sourceLineNo">534</span>  public Path getDataTestDirOnTestFS(final String subdirName) throws IOException {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    return new Path(getDataTestDirOnTestFS(), subdirName);<a name="line.535"></a>
+<span class="sourceLineNo">536</span>  }<a name="line.53

<TRUNCATED>

[30/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.NewestLogFilter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.NewestLogFilter.html b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.NewestLogFilter.html
index 65bab27..81fc69e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.NewestLogFilter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.NewestLogFilter.html
@@ -304,92 +304,103 @@
 <span class="sourceLineNo">296</span>        currentLogFile = log.getPath().toString();<a name="line.296"></a>
 <span class="sourceLineNo">297</span>        resultLogFiles.add(currentLogFile);<a name="line.297"></a>
 <span class="sourceLineNo">298</span>        currentLogTS = BackupUtils.getCreationTime(log.getPath());<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        // newestTimestamps is up-to-date with the current list of hosts<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        // so newestTimestamps.get(host) will not be null.<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        if (currentLogTS &gt; newestTimestamps.get(host)) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>          newestLogs.add(currentLogFile);<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>    // Include the .oldlogs files too.<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    FileStatus[] oldlogs = fs.listStatus(oldLogDir);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    for (FileStatus oldlog : oldlogs) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      p = oldlog.getPath();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      currentLogFile = p.toString();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      if (AbstractFSWALProvider.isMetaFile(p)) {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        if (LOG.isDebugEnabled()) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          LOG.debug("Skip .meta log file: " + currentLogFile);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        }<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        continue;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      host = BackupUtils.parseHostFromOldLog(p);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      if (host == null) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        continue;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      currentLogTS = BackupUtils.getCreationTime(p);<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      oldTimeStamp = olderTimestamps.get(host);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      /*<a name="line.324"></a>
-<span class="sourceLineNo">325</span>       * It is possible that there is no old timestamp in backup system table for this host. At the<a name="line.325"></a>
-<span class="sourceLineNo">326</span>       * time of our last backup operation, this rs did not exist. The reason can be one of the two:<a name="line.326"></a>
-<span class="sourceLineNo">327</span>       * 1. The rs already left/crashed. Its logs were moved to .oldlogs. 2. The rs was added after<a name="line.327"></a>
-<span class="sourceLineNo">328</span>       * our last backup.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>       */<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      if (oldTimeStamp == null) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        if (currentLogTS &lt; Long.parseLong(savedStartCode)) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>          // This log file is really old, its region server was before our last backup.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>          continue;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        } else {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          resultLogFiles.add(currentLogFile);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        }<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      } else if (currentLogTS &gt; oldTimeStamp) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        resultLogFiles.add(currentLogFile);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>      // It is possible that a host in .oldlogs is an obsolete region server<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      // so newestTimestamps.get(host) here can be null.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      // Even if these logs belong to a obsolete region server, we still need<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      // to include they to avoid loss of edits for backup.<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      Long newTimestamp = newestTimestamps.get(host);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      if (newTimestamp != null &amp;&amp; currentLogTS &gt; newTimestamp) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        newestLogs.add(currentLogFile);<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      }<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    // remove newest log per host because they are still in use<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    resultLogFiles.removeAll(newestLogs);<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    return resultLogFiles;<a name="line.352"></a>
-<span class="sourceLineNo">353</span>  }<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span>  static class NewestLogFilter implements PathFilter {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    private Long lastBackupTS = 0L;<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>    public NewestLogFilter() {<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>    protected void setLastBackupTS(Long ts) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      this.lastBackupTS = ts;<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    }<a name="line.363"></a>
-<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>    @Override<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    public boolean accept(Path path) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      // skip meta table log -- ts.meta file<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      if (AbstractFSWALProvider.isMetaFile(path)) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        if (LOG.isDebugEnabled()) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>          LOG.debug("Skip .meta log file: " + path.getName());<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        return false;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      }<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      long timestamp;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      try {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>        timestamp = BackupUtils.getCreationTime(path);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        return timestamp &gt; lastBackupTS;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      } catch (Exception e) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        LOG.warn("Cannot read timestamp of log file " + path);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        return false;<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>  }<a name="line.383"></a>
-<span class="sourceLineNo">384</span>}<a name="line.384"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>        // If newestTimestamps.get(host) is null, means that<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        // either RS (host) has been restarted recently with different port number<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        // or RS is down (was decommisioned). In any case, we treat this<a name="line.302"></a>
+<span class="sourceLineNo">303</span>        // log file as eligible for inclusion into incremental backup log list<a name="line.303"></a>
+<span class="sourceLineNo">304</span>        Long ts = newestTimestamps.get(host);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        if (ts ==  null) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>          LOG.warn("ORPHAN log found: " + log + " host=" + host);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>          LOG.debug("Known hosts (from newestTimestamps):");<a name="line.307"></a>
+<span class="sourceLineNo">308</span>          for (String s: newestTimestamps.keySet()) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>            LOG.debug(s);<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>        if (ts == null || currentLogTS &gt; ts) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>          newestLogs.add(currentLogFile);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      }<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    }<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span>    // Include the .oldlogs files too.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    FileStatus[] oldlogs = fs.listStatus(oldLogDir);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    for (FileStatus oldlog : oldlogs) {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      p = oldlog.getPath();<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      currentLogFile = p.toString();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      if (AbstractFSWALProvider.isMetaFile(p)) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        if (LOG.isDebugEnabled()) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>          LOG.debug("Skip .meta log file: " + currentLogFile);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        }<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        continue;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      host = BackupUtils.parseHostFromOldLog(p);<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      if (host == null) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        continue;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      }<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      currentLogTS = BackupUtils.getCreationTime(p);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      oldTimeStamp = olderTimestamps.get(host);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      /*<a name="line.335"></a>
+<span class="sourceLineNo">336</span>       * It is possible that there is no old timestamp in backup system table for this host. At the<a name="line.336"></a>
+<span class="sourceLineNo">337</span>       * time of our last backup operation, this rs did not exist. The reason can be one of the two:<a name="line.337"></a>
+<span class="sourceLineNo">338</span>       * 1. The rs already left/crashed. Its logs were moved to .oldlogs. 2. The rs was added after<a name="line.338"></a>
+<span class="sourceLineNo">339</span>       * our last backup.<a name="line.339"></a>
+<span class="sourceLineNo">340</span>       */<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      if (oldTimeStamp == null) {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        if (currentLogTS &lt; Long.parseLong(savedStartCode)) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>          // This log file is really old, its region server was before our last backup.<a name="line.343"></a>
+<span class="sourceLineNo">344</span>          continue;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        } else {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>          resultLogFiles.add(currentLogFile);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        }<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      } else if (currentLogTS &gt; oldTimeStamp) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        resultLogFiles.add(currentLogFile);<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>      // It is possible that a host in .oldlogs is an obsolete region server<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      // so newestTimestamps.get(host) here can be null.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      // Even if these logs belong to a obsolete region server, we still need<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      // to include they to avoid loss of edits for backup.<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      Long newTimestamp = newestTimestamps.get(host);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      if (newTimestamp == null || currentLogTS &gt; newTimestamp) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        newestLogs.add(currentLogFile);<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      }<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    // remove newest log per host because they are still in use<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    resultLogFiles.removeAll(newestLogs);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    return resultLogFiles;<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>  static class NewestLogFilter implements PathFilter {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    private Long lastBackupTS = 0L;<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span>    public NewestLogFilter() {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>    protected void setLastBackupTS(Long ts) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      this.lastBackupTS = ts;<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>    @Override<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    public boolean accept(Path path) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      // skip meta table log -- ts.meta file<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      if (AbstractFSWALProvider.isMetaFile(path)) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        if (LOG.isDebugEnabled()) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>          LOG.debug("Skip .meta log file: " + path.getName());<a name="line.381"></a>
+<span class="sourceLineNo">382</span>        }<a name="line.382"></a>
+<span class="sourceLineNo">383</span>        return false;<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      }<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      long timestamp;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      try {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        timestamp = BackupUtils.getCreationTime(path);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        return timestamp &gt; lastBackupTS;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      } catch (Exception e) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>        LOG.warn("Cannot read timestamp of log file " + path);<a name="line.390"></a>
+<span class="sourceLineNo">391</span>        return false;<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>  }<a name="line.394"></a>
+<span class="sourceLineNo">395</span>}<a name="line.395"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.html b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.html
index 65bab27..81fc69e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/backup/impl/IncrementalBackupManager.html
@@ -304,92 +304,103 @@
 <span class="sourceLineNo">296</span>        currentLogFile = log.getPath().toString();<a name="line.296"></a>
 <span class="sourceLineNo">297</span>        resultLogFiles.add(currentLogFile);<a name="line.297"></a>
 <span class="sourceLineNo">298</span>        currentLogTS = BackupUtils.getCreationTime(log.getPath());<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        // newestTimestamps is up-to-date with the current list of hosts<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        // so newestTimestamps.get(host) will not be null.<a name="line.300"></a>
-<span class="sourceLineNo">301</span>        if (currentLogTS &gt; newestTimestamps.get(host)) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>          newestLogs.add(currentLogFile);<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>    // Include the .oldlogs files too.<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    FileStatus[] oldlogs = fs.listStatus(oldLogDir);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    for (FileStatus oldlog : oldlogs) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      p = oldlog.getPath();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      currentLogFile = p.toString();<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      if (AbstractFSWALProvider.isMetaFile(p)) {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        if (LOG.isDebugEnabled()) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          LOG.debug("Skip .meta log file: " + currentLogFile);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        }<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        continue;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      host = BackupUtils.parseHostFromOldLog(p);<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      if (host == null) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        continue;<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      }<a name="line.321"></a>
-<span class="sourceLineNo">322</span>      currentLogTS = BackupUtils.getCreationTime(p);<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      oldTimeStamp = olderTimestamps.get(host);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      /*<a name="line.324"></a>
-<span class="sourceLineNo">325</span>       * It is possible that there is no old timestamp in backup system table for this host. At the<a name="line.325"></a>
-<span class="sourceLineNo">326</span>       * time of our last backup operation, this rs did not exist. The reason can be one of the two:<a name="line.326"></a>
-<span class="sourceLineNo">327</span>       * 1. The rs already left/crashed. Its logs were moved to .oldlogs. 2. The rs was added after<a name="line.327"></a>
-<span class="sourceLineNo">328</span>       * our last backup.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>       */<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      if (oldTimeStamp == null) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        if (currentLogTS &lt; Long.parseLong(savedStartCode)) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>          // This log file is really old, its region server was before our last backup.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>          continue;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        } else {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          resultLogFiles.add(currentLogFile);<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        }<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      } else if (currentLogTS &gt; oldTimeStamp) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        resultLogFiles.add(currentLogFile);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>      // It is possible that a host in .oldlogs is an obsolete region server<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      // so newestTimestamps.get(host) here can be null.<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      // Even if these logs belong to a obsolete region server, we still need<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      // to include they to avoid loss of edits for backup.<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      Long newTimestamp = newestTimestamps.get(host);<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      if (newTimestamp != null &amp;&amp; currentLogTS &gt; newTimestamp) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        newestLogs.add(currentLogFile);<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      }<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    // remove newest log per host because they are still in use<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    resultLogFiles.removeAll(newestLogs);<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    return resultLogFiles;<a name="line.352"></a>
-<span class="sourceLineNo">353</span>  }<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span>  static class NewestLogFilter implements PathFilter {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    private Long lastBackupTS = 0L;<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>    public NewestLogFilter() {<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>    protected void setLastBackupTS(Long ts) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      this.lastBackupTS = ts;<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    }<a name="line.363"></a>
-<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span>    @Override<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    public boolean accept(Path path) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      // skip meta table log -- ts.meta file<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      if (AbstractFSWALProvider.isMetaFile(path)) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>        if (LOG.isDebugEnabled()) {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>          LOG.debug("Skip .meta log file: " + path.getName());<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        }<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        return false;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      }<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      long timestamp;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      try {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>        timestamp = BackupUtils.getCreationTime(path);<a name="line.376"></a>
-<span class="sourceLineNo">377</span>        return timestamp &gt; lastBackupTS;<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      } catch (Exception e) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        LOG.warn("Cannot read timestamp of log file " + path);<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        return false;<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>  }<a name="line.383"></a>
-<span class="sourceLineNo">384</span>}<a name="line.384"></a>
+<span class="sourceLineNo">299</span><a name="line.299"></a>
+<span class="sourceLineNo">300</span>        // If newestTimestamps.get(host) is null, means that<a name="line.300"></a>
+<span class="sourceLineNo">301</span>        // either RS (host) has been restarted recently with different port number<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        // or RS is down (was decommisioned). In any case, we treat this<a name="line.302"></a>
+<span class="sourceLineNo">303</span>        // log file as eligible for inclusion into incremental backup log list<a name="line.303"></a>
+<span class="sourceLineNo">304</span>        Long ts = newestTimestamps.get(host);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        if (ts ==  null) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>          LOG.warn("ORPHAN log found: " + log + " host=" + host);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>          LOG.debug("Known hosts (from newestTimestamps):");<a name="line.307"></a>
+<span class="sourceLineNo">308</span>          for (String s: newestTimestamps.keySet()) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>            LOG.debug(s);<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>        if (ts == null || currentLogTS &gt; ts) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>          newestLogs.add(currentLogFile);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      }<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    }<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span>    // Include the .oldlogs files too.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    FileStatus[] oldlogs = fs.listStatus(oldLogDir);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    for (FileStatus oldlog : oldlogs) {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      p = oldlog.getPath();<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      currentLogFile = p.toString();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      if (AbstractFSWALProvider.isMetaFile(p)) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        if (LOG.isDebugEnabled()) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>          LOG.debug("Skip .meta log file: " + currentLogFile);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        }<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        continue;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      host = BackupUtils.parseHostFromOldLog(p);<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      if (host == null) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        continue;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      }<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      currentLogTS = BackupUtils.getCreationTime(p);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      oldTimeStamp = olderTimestamps.get(host);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      /*<a name="line.335"></a>
+<span class="sourceLineNo">336</span>       * It is possible that there is no old timestamp in backup system table for this host. At the<a name="line.336"></a>
+<span class="sourceLineNo">337</span>       * time of our last backup operation, this rs did not exist. The reason can be one of the two:<a name="line.337"></a>
+<span class="sourceLineNo">338</span>       * 1. The rs already left/crashed. Its logs were moved to .oldlogs. 2. The rs was added after<a name="line.338"></a>
+<span class="sourceLineNo">339</span>       * our last backup.<a name="line.339"></a>
+<span class="sourceLineNo">340</span>       */<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      if (oldTimeStamp == null) {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        if (currentLogTS &lt; Long.parseLong(savedStartCode)) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>          // This log file is really old, its region server was before our last backup.<a name="line.343"></a>
+<span class="sourceLineNo">344</span>          continue;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        } else {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>          resultLogFiles.add(currentLogFile);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        }<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      } else if (currentLogTS &gt; oldTimeStamp) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        resultLogFiles.add(currentLogFile);<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>      // It is possible that a host in .oldlogs is an obsolete region server<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      // so newestTimestamps.get(host) here can be null.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      // Even if these logs belong to a obsolete region server, we still need<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      // to include they to avoid loss of edits for backup.<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      Long newTimestamp = newestTimestamps.get(host);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      if (newTimestamp == null || currentLogTS &gt; newTimestamp) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        newestLogs.add(currentLogFile);<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      }<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    // remove newest log per host because they are still in use<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    resultLogFiles.removeAll(newestLogs);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    return resultLogFiles;<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>  static class NewestLogFilter implements PathFilter {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    private Long lastBackupTS = 0L;<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span>    public NewestLogFilter() {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>    protected void setLastBackupTS(Long ts) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      this.lastBackupTS = ts;<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>    @Override<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    public boolean accept(Path path) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      // skip meta table log -- ts.meta file<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      if (AbstractFSWALProvider.isMetaFile(path)) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        if (LOG.isDebugEnabled()) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>          LOG.debug("Skip .meta log file: " + path.getName());<a name="line.381"></a>
+<span class="sourceLineNo">382</span>        }<a name="line.382"></a>
+<span class="sourceLineNo">383</span>        return false;<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      }<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      long timestamp;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      try {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>        timestamp = BackupUtils.getCreationTime(path);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        return timestamp &gt; lastBackupTS;<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      } catch (Exception e) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>        LOG.warn("Cannot read timestamp of log file " + path);<a name="line.390"></a>
+<span class="sourceLineNo">391</span>        return false;<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>  }<a name="line.394"></a>
+<span class="sourceLineNo">395</span>}<a name="line.395"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html
new file mode 100644
index 0000000..8dc2d73
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html
@@ -0,0 +1,469 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.procedure2.store;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.util.Arrays;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.DeleteState;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>/**<a name="line.26"></a>
+<span class="sourceLineNo">027</span> * A bitmap which can grow/merge with other {@link BitSetNode} (if certain conditions are met).<a name="line.27"></a>
+<span class="sourceLineNo">028</span> * Boundaries of bitmap are aligned to multiples of {@link BitSetNode#BITS_PER_WORD}. So the range<a name="line.28"></a>
+<span class="sourceLineNo">029</span> * of a {@link BitSetNode} is from [x * K, y * K) where x and y are integers, y &gt; x and K is<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * BITS_PER_WORD.<a name="line.30"></a>
+<span class="sourceLineNo">031</span> * &lt;p/&gt;<a name="line.31"></a>
+<span class="sourceLineNo">032</span> * We have two main bit sets to describe the state of procedures, the meanings are:<a name="line.32"></a>
+<span class="sourceLineNo">033</span> *<a name="line.33"></a>
+<span class="sourceLineNo">034</span> * &lt;pre&gt;<a name="line.34"></a>
+<span class="sourceLineNo">035</span> *  ----------------------<a name="line.35"></a>
+<span class="sourceLineNo">036</span> * | modified | deleted |  meaning<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * |     0    |   0     |  proc exists, but hasn't been updated since last resetUpdates().<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * |     1    |   0     |  proc was updated (but not deleted).<a name="line.38"></a>
+<span class="sourceLineNo">039</span> * |     1    |   1     |  proc was deleted.<a name="line.39"></a>
+<span class="sourceLineNo">040</span> * |     0    |   1     |  proc doesn't exist (maybe never created, maybe deleted in past).<a name="line.40"></a>
+<span class="sourceLineNo">041</span> * ----------------------<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * &lt;/pre&gt;<a name="line.42"></a>
+<span class="sourceLineNo">043</span> *<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * The meaning of modified is that, we have modified the state of the procedure, no matter insert,<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * update, or delete. And if it is an insert or update, we will set the deleted to 0, if not we will<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * set the delete to 1.<a name="line.46"></a>
+<span class="sourceLineNo">047</span> * &lt;p/&gt;<a name="line.47"></a>
+<span class="sourceLineNo">048</span> * For a non-partial BitSetNode, the initial modified value is 0 and deleted value is 1. For the<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * partial one, the initial modified value is 0 and the initial deleted value is also 0. In<a name="line.49"></a>
+<span class="sourceLineNo">050</span> * {@link #unsetPartialFlag()} we will reset the deleted to 1 if it is not modified.<a name="line.50"></a>
+<span class="sourceLineNo">051</span> */<a name="line.51"></a>
+<span class="sourceLineNo">052</span>@InterfaceAudience.Private<a name="line.52"></a>
+<span class="sourceLineNo">053</span>class BitSetNode {<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private static final long WORD_MASK = 0xffffffffffffffffL;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  private static final int ADDRESS_BITS_PER_WORD = 6;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  private static final int BITS_PER_WORD = 1 &lt;&lt; ADDRESS_BITS_PER_WORD;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private static final int MAX_NODE_SIZE = 1 &lt;&lt; ADDRESS_BITS_PER_WORD;<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>   * Mimics {@link ProcedureStoreTracker#partial}. It will effect how we fill the new deleted bits<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * when growing.<a name="line.61"></a>
+<span class="sourceLineNo">062</span>   */<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private boolean partial;<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>  /**<a name="line.65"></a>
+<span class="sourceLineNo">066</span>   * Set of procedures which have been modified since last {@link #resetModified()}. Useful to track<a name="line.66"></a>
+<span class="sourceLineNo">067</span>   * procedures which have been modified since last WAL write.<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   */<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  private long[] modified;<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>  /**<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   * Keeps track of procedure ids which belong to this bitmap's range and have been deleted. This<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   * represents global state since it's not reset on WAL rolls.<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   */<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  private long[] deleted;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  /**<a name="line.76"></a>
+<span class="sourceLineNo">077</span>   * Offset of bitmap i.e. procedure id corresponding to first bit.<a name="line.77"></a>
+<span class="sourceLineNo">078</span>   */<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  private long start;<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>  public void dump() {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    System.out.printf("%06d:%06d min=%d max=%d%n", getStart(), getEnd(), getActiveMinProcId(),<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      getActiveMaxProcId());<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    System.out.println("Modified:");<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    for (int i = 0; i &lt; modified.length; ++i) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      for (int j = 0; j &lt; BITS_PER_WORD; ++j) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>        System.out.print((modified[i] &amp; (1L &lt;&lt; j)) != 0 ? "1" : "0");<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      }<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      System.out.println(" " + i);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    System.out.println();<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    System.out.println("Delete:");<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    for (int i = 0; i &lt; deleted.length; ++i) {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      for (int j = 0; j &lt; BITS_PER_WORD; ++j) {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>        System.out.print((deleted[i] &amp; (1L &lt;&lt; j)) != 0 ? "1" : "0");<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      }<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      System.out.println(" " + i);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    }<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    System.out.println();<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 BitSetNode(long procId, boolean partial) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    start = alignDown(procId);<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>    int count = 1;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    modified = new long[count];<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    deleted = new long[count];<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    if (!partial) {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      Arrays.fill(deleted, WORD_MASK);<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>    this.partial = partial;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    updateState(procId, false);<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>  public BitSetNode(ProcedureProtos.ProcedureStoreTracker.TrackerNode data) {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    start = data.getStartId();<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    int size = data.getUpdatedCount();<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    assert size == data.getDeletedCount();<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    modified = new long[size];<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    deleted = new long[size];<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    for (int i = 0; i &lt; size; ++i) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      modified[i] = data.getUpdated(i);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      deleted[i] = data.getDeleted(i);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    }<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    partial = false;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>  public BitSetNode(BitSetNode other, boolean resetDelete) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    this.start = other.start;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    this.partial = other.partial;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    this.modified = other.modified.clone();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    // The resetDelete will be set to true when building cleanup tracker.<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    // The intention here is that, if a procedure is not modified in this tracker, then we do not<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    // need to take care of it, so we will set deleted to true for these bits, i.e, if modified is<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    // 0, then we set deleted to 1, otherwise keep it as is. So here, the equation is<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    // deleted |= ~modified, i.e,<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    if (resetDelete) {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      this.deleted = new long[other.deleted.length];<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      for (int i = 0; i &lt; this.deleted.length; ++i) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        this.deleted[i] |= ~(other.modified[i]);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      }<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    } else {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      this.deleted = other.deleted.clone();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    }<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  }<a name="line.146"></a>
+<span class="sourceLineNo">147</span><a name="line.147"></a>
+<span class="sourceLineNo">148</span>  public void insertOrUpdate(final long procId) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    updateState(procId, false);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>  public void delete(final long procId) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    updateState(procId, true);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span>  public long getStart() {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    return start;<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>  public long getEnd() {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    return start + (modified.length &lt;&lt; ADDRESS_BITS_PER_WORD) - 1;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  }<a name="line.162"></a>
+<span class="sourceLineNo">163</span><a name="line.163"></a>
+<span class="sourceLineNo">164</span>  public boolean contains(final long procId) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    return start &lt;= procId &amp;&amp; procId &lt;= getEnd();<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  }<a name="line.166"></a>
+<span class="sourceLineNo">167</span><a name="line.167"></a>
+<span class="sourceLineNo">168</span>  public DeleteState isDeleted(final long procId) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    int bitmapIndex = getBitmapIndex(procId);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    int wordIndex = bitmapIndex &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    if (wordIndex &gt;= deleted.length) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      return DeleteState.MAYBE;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    }<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    return (deleted[wordIndex] &amp; (1L &lt;&lt; bitmapIndex)) != 0 ? DeleteState.YES : DeleteState.NO;<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>  public boolean isModified(long procId) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    int bitmapIndex = getBitmapIndex(procId);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    int wordIndex = bitmapIndex &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    if (wordIndex &gt;= modified.length) {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      return false;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    }<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    return (modified[wordIndex] &amp; (1L &lt;&lt; bitmapIndex)) != 0;<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>  /**<a name="line.186"></a>
+<span class="sourceLineNo">187</span>   * @return true, if all the procedures has been modified.<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   */<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  public boolean isAllModified() {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    // TODO: cache the value<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    for (int i = 0; i &lt; modified.length; ++i) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      if ((modified[i] | deleted[i]) != WORD_MASK) {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        return 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>    return true;<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>   * @return true, if there are no active procedures in this BitSetNode, else false.<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   */<a name="line.201"></a>
+<span class="sourceLineNo">202</span>  public boolean isEmpty() {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    // TODO: cache the value<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    for (int i = 0; i &lt; deleted.length; ++i) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      if (deleted[i] != WORD_MASK) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>        return false;<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>    return true;<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>  public void resetModified() {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    Arrays.fill(modified, 0);<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>  public void unsetPartialFlag() {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    partial = false;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    for (int i = 0; i &lt; modified.length; ++i) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      for (int j = 0; j &lt; BITS_PER_WORD; ++j) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        if ((modified[i] &amp; (1L &lt;&lt; j)) == 0) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>          deleted[i] |= (1L &lt;&lt; j);<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>    }<a name="line.224"></a>
+<span class="sourceLineNo">225</span>  }<a name="line.225"></a>
+<span class="sourceLineNo">226</span><a name="line.226"></a>
+<span class="sourceLineNo">227</span>  /**<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * Convert to<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * protobuf.<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   */<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  public ProcedureProtos.ProcedureStoreTracker.TrackerNode convert() {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    ProcedureProtos.ProcedureStoreTracker.TrackerNode.Builder builder =<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      ProcedureProtos.ProcedureStoreTracker.TrackerNode.newBuilder();<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    builder.setStartId(start);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    for (int i = 0; i &lt; modified.length; ++i) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      builder.addUpdated(modified[i]);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      builder.addDeleted(deleted[i]);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    return builder.build();<a name="line.240"></a>
+<span class="sourceLineNo">241</span>  }<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span>  // ========================================================================<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  // Grow/Merge Helpers<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  // ========================================================================<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  public boolean canGrow(final long procId) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    return Math.abs(procId - start) &lt; MAX_NODE_SIZE;<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>  public boolean canMerge(final BitSetNode rightNode) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    // Can just compare 'starts' since boundaries are aligned to multiples of BITS_PER_WORD.<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    assert start &lt; rightNode.start;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    return (rightNode.getEnd() - start) &lt; MAX_NODE_SIZE;<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>  public void grow(final long procId) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    int delta, offset;<a name="line.257"></a>
+<span class="sourceLineNo">258</span><a name="line.258"></a>
+<span class="sourceLineNo">259</span>    if (procId &lt; start) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      // add to head<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      long newStart = alignDown(procId);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      delta = (int) (start - newStart) &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      offset = delta;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      start = newStart;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    } else {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      // Add to tail<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      long newEnd = alignUp(procId + 1);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      delta = (int) (newEnd - getEnd()) &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      offset = 0;<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>    long[] newBitmap;<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    int oldSize = modified.length;<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>    newBitmap = new long[oldSize + delta];<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    for (int i = 0; i &lt; newBitmap.length; ++i) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      newBitmap[i] = 0;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    }<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    System.arraycopy(modified, 0, newBitmap, offset, oldSize);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    modified = newBitmap;<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>    newBitmap = new long[deleted.length + delta];<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    for (int i = 0; i &lt; newBitmap.length; ++i) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      newBitmap[i] = partial ? 0 : WORD_MASK;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    }<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    System.arraycopy(deleted, 0, newBitmap, offset, oldSize);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    deleted = newBitmap;<a name="line.287"></a>
+<span class="sourceLineNo">288</span>  }<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public void merge(final BitSetNode rightNode) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    int delta = (int) (rightNode.getEnd() - getEnd()) &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.291"></a>
+<span class="sourceLineNo">292</span><a name="line.292"></a>
+<span class="sourceLineNo">293</span>    long[] newBitmap;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    int oldSize = modified.length;<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    int newSize = (delta - rightNode.modified.length);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    int offset = oldSize + newSize;<a name="line.296"></a>
+<span class="sourceLineNo">297</span><a name="line.297"></a>
+<span class="sourceLineNo">298</span>    newBitmap = new long[oldSize + delta];<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    System.arraycopy(modified, 0, newBitmap, 0, oldSize);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    System.arraycopy(rightNode.modified, 0, newBitmap, offset, rightNode.modified.length);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    modified = newBitmap;<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>    newBitmap = new long[oldSize + delta];<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    System.arraycopy(deleted, 0, newBitmap, 0, oldSize);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    System.arraycopy(rightNode.deleted, 0, newBitmap, offset, rightNode.deleted.length);<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    deleted = newBitmap;<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>    for (int i = 0; i &lt; newSize; ++i) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      modified[offset + i] = 0;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      deleted[offset + i] = partial ? 0 : WORD_MASK;<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>  @Override<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  public String toString() {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    return "BitSetNode(" + getStart() + "-" + getEnd() + ")";<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>  // Min/Max Helpers<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  // ========================================================================<a name="line.321"></a>
+<span class="sourceLineNo">322</span>  public long getActiveMinProcId() {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    long minProcId = start;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    for (int i = 0; i &lt; deleted.length; ++i) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      if (deleted[i] == 0) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        return (minProcId);<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>      if (deleted[i] != WORD_MASK) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        for (int j = 0; j &lt; BITS_PER_WORD; ++j) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>          if ((deleted[i] &amp; (1L &lt;&lt; j)) != 0) {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            return minProcId + j;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          }<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        }<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      }<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>      minProcId += BITS_PER_WORD;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    }<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    return minProcId;<a name="line.339"></a>
+<span class="sourceLineNo">340</span>  }<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>  public long getActiveMaxProcId() {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    long maxProcId = getEnd();<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    for (int i = deleted.length - 1; i &gt;= 0; --i) {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      if (deleted[i] == 0) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        return maxProcId;<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>      if (deleted[i] != WORD_MASK) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>        for (int j = BITS_PER_WORD - 1; j &gt;= 0; --j) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>          if ((deleted[i] &amp; (1L &lt;&lt; j)) == 0) {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>            return maxProcId - (BITS_PER_WORD - 1 - j);<a name="line.352"></a>
+<span class="sourceLineNo">353</span>          }<a name="line.353"></a>
+<span class="sourceLineNo">354</span>        }<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      maxProcId -= BITS_PER_WORD;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    return maxProcId;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>  }<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span>  // ========================================================================<a name="line.361"></a>
+<span class="sourceLineNo">362</span>  // Bitmap Helpers<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  // ========================================================================<a name="line.363"></a>
+<span class="sourceLineNo">364</span>  private int getBitmapIndex(final long procId) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    return (int) (procId - start);<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>  void updateState(long procId, boolean isDeleted) {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    int bitmapIndex = getBitmapIndex(procId);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    int wordIndex = bitmapIndex &gt;&gt; ADDRESS_BITS_PER_WORD;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    long value = (1L &lt;&lt; bitmapIndex);<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>    modified[wordIndex] |= value;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    if (isDeleted) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      deleted[wordIndex] |= value;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    } else {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      deleted[wordIndex] &amp;= ~value;<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
+<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span>  // ========================================================================<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  // Helpers<a name="line.382"></a>
+<span class="sourceLineNo">383</span>  // ========================================================================<a name="line.383"></a>
+<span class="sourceLineNo">384</span>  /**<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * @return upper boundary (aligned to multiple of BITS_PER_WORD) of bitmap range x belongs to.<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   */<a name="line.386"></a>
+<span class="sourceLineNo">387</span>  private static long alignUp(final long x) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    return (x + (BITS_PER_WORD - 1)) &amp; -BITS_PER_WORD;<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>  /**<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * @return lower boundary (aligned to multiple of BITS_PER_WORD) of bitmap range x belongs to.<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   */<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  private static long alignDown(final long x) {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    return x &amp; -BITS_PER_WORD;<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>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html
index d38cf4d..379f1f9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html
@@ -23,84 +23,83 @@
 <span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
 <span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
 <span class="sourceLineNo">017</span> */<a name="line.17"></a>
-<span class="sourceLineNo">018</span><a name="line.18"></a>
-<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.procedure2.store;<a name="line.19"></a>
-<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span><a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.24"></a>
-<span class="sourceLineNo">025</span><a name="line.25"></a>
-<span class="sourceLineNo">026</span>/**<a name="line.26"></a>
-<span class="sourceLineNo">027</span> * An In-Memory store that does not keep track of the procedures inserted.<a name="line.27"></a>
-<span class="sourceLineNo">028</span> */<a name="line.28"></a>
-<span class="sourceLineNo">029</span>@InterfaceAudience.Private<a name="line.29"></a>
-<span class="sourceLineNo">030</span>public class NoopProcedureStore extends ProcedureStoreBase {<a name="line.30"></a>
-<span class="sourceLineNo">031</span>  private int numThreads;<a name="line.31"></a>
-<span class="sourceLineNo">032</span><a name="line.32"></a>
-<span class="sourceLineNo">033</span>  @Override<a name="line.33"></a>
-<span class="sourceLineNo">034</span>  public void start(int numThreads) throws IOException {<a name="line.34"></a>
-<span class="sourceLineNo">035</span>    if (!setRunning(true)) {<a name="line.35"></a>
-<span class="sourceLineNo">036</span>      return;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>    }<a name="line.37"></a>
-<span class="sourceLineNo">038</span>    this.numThreads = numThreads;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>  }<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>  @Override<a name="line.41"></a>
-<span class="sourceLineNo">042</span>  public void stop(boolean abort) {<a name="line.42"></a>
-<span class="sourceLineNo">043</span>    setRunning(false);<a name="line.43"></a>
-<span class="sourceLineNo">044</span>  }<a name="line.44"></a>
-<span class="sourceLineNo">045</span><a name="line.45"></a>
-<span class="sourceLineNo">046</span>  @Override<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  public void recoverLease() throws IOException {<a name="line.47"></a>
-<span class="sourceLineNo">048</span>    // no-op<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  }<a name="line.49"></a>
-<span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span>  @Override<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  public int getNumThreads() {<a name="line.52"></a>
-<span class="sourceLineNo">053</span>    return numThreads;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  }<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  @Override<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  public int setRunningProcedureCount(final int count) {<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    return count;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  }<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>  @Override<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  public void load(final ProcedureLoader loader) throws IOException {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    loader.setMaxProcId(0);<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  }<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>  @Override<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  public void insert(Procedure proc, Procedure[] subprocs) {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    // no-op<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  }<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>  @Override<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  public void insert(Procedure[] proc) {<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    // no-op<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  }<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>  @Override<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  public void update(Procedure proc) {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    // no-op<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  }<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  @Override<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  public void delete(long procId) {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    // no-op<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  }<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>  @Override<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  public void delete(Procedure proc, long[] subprocs) {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    // no-op<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>  @Override<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  public void delete(long[] procIds, int offset, int count) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    // no-op<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
-<span class="sourceLineNo">095</span>}<a name="line.95"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.procedure2.store;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.23"></a>
+<span class="sourceLineNo">024</span><a name="line.24"></a>
+<span class="sourceLineNo">025</span>/**<a name="line.25"></a>
+<span class="sourceLineNo">026</span> * An In-Memory store that does not keep track of the procedures inserted.<a name="line.26"></a>
+<span class="sourceLineNo">027</span> */<a name="line.27"></a>
+<span class="sourceLineNo">028</span>@InterfaceAudience.Private<a name="line.28"></a>
+<span class="sourceLineNo">029</span>public class NoopProcedureStore extends ProcedureStoreBase {<a name="line.29"></a>
+<span class="sourceLineNo">030</span>  private int numThreads;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>  @Override<a name="line.32"></a>
+<span class="sourceLineNo">033</span>  public void start(int numThreads) throws IOException {<a name="line.33"></a>
+<span class="sourceLineNo">034</span>    if (!setRunning(true)) {<a name="line.34"></a>
+<span class="sourceLineNo">035</span>      return;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>    }<a name="line.36"></a>
+<span class="sourceLineNo">037</span>    this.numThreads = numThreads;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>  }<a name="line.38"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span>  @Override<a name="line.40"></a>
+<span class="sourceLineNo">041</span>  public void stop(boolean abort) {<a name="line.41"></a>
+<span class="sourceLineNo">042</span>    setRunning(false);<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>  @Override<a name="line.45"></a>
+<span class="sourceLineNo">046</span>  public void recoverLease() throws IOException {<a name="line.46"></a>
+<span class="sourceLineNo">047</span>    // no-op<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  }<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span>  @Override<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  public int getNumThreads() {<a name="line.51"></a>
+<span class="sourceLineNo">052</span>    return numThreads;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  }<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>  @Override<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  public int setRunningProcedureCount(final int count) {<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    return count;<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>  @Override<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  public void load(final ProcedureLoader loader) throws IOException {<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    loader.setMaxProcId(0);<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  }<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>  @Override<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  public void insert(Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs) {<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    // no-op<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  }<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  @Override<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  public void insert(Procedure&lt;?&gt;[] proc) {<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    // no-op<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  }<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>  @Override<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  public void update(Procedure&lt;?&gt; proc) {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    // no-op<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  @Override<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  public void delete(long procId) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    // no-op<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>  @Override<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  public void delete(Procedure&lt;?&gt; proc, long[] subprocs) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    // no-op<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>  @Override<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public void delete(long[] procIds, int offset, int count) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    // no-op<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  }<a name="line.93"></a>
+<span class="sourceLineNo">094</span>}<a name="line.94"></a>
 
 
 


[23/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html
index 4a42bda..30963fa 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html
@@ -26,83 +26,83 @@
 <span class="sourceLineNo">018</span><a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.procedure2.store.wal;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hbase.thirdparty.com.google.protobuf.InvalidProtocolBufferException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span><a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.io.InputStream;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.io.OutputStream;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Iterator;<a name="line.26"></a>
-<span class="sourceLineNo">027</span><a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.yetus.audience.InterfaceStability;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.slf4j.Logger;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.slf4j.LoggerFactory;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureLoader;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.procedure2.util.ByteSlot;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALTrailer;<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> * Helper class that contains the WAL serialization utils.<a name="line.45"></a>
-<span class="sourceLineNo">046</span> */<a name="line.46"></a>
-<span class="sourceLineNo">047</span>@InterfaceAudience.Private<a name="line.47"></a>
-<span class="sourceLineNo">048</span>@InterfaceStability.Evolving<a name="line.48"></a>
-<span class="sourceLineNo">049</span>public final class ProcedureWALFormat {<a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private static final Logger LOG = LoggerFactory.getLogger(ProcedureWALFormat.class);<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>  static final byte LOG_TYPE_STREAM = 0;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  static final byte LOG_TYPE_COMPACTED = 1;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  static final byte LOG_TYPE_MAX_VALID = 1;<a name="line.54"></a>
+<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.io.InputStream;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.io.OutputStream;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.Iterator;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.fs.FSDataInputStream;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.fs.FSDataOutputStream;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.io.util.StreamUtils;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureLoader;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.procedure2.util.ByteSlot;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.33"></a>
+<span class="sourceLineNo">034</span><a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hbase.thirdparty.com.google.protobuf.InvalidProtocolBufferException;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALTrailer;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>/**<a name="line.41"></a>
+<span class="sourceLineNo">042</span> * Helper class that contains the WAL serialization utils.<a name="line.42"></a>
+<span class="sourceLineNo">043</span> */<a name="line.43"></a>
+<span class="sourceLineNo">044</span>@InterfaceAudience.Private<a name="line.44"></a>
+<span class="sourceLineNo">045</span>public final class ProcedureWALFormat {<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>  static final byte LOG_TYPE_STREAM = 0;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  static final byte LOG_TYPE_COMPACTED = 1;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  static final byte LOG_TYPE_MAX_VALID = 1;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  static final byte HEADER_VERSION = 1;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  static final byte TRAILER_VERSION = 1;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  static final long HEADER_MAGIC = 0x31764c4157637250L;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  static final long TRAILER_MAGIC = 0x50726357414c7631L;<a name="line.54"></a>
 <span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>  static final byte HEADER_VERSION = 1;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  static final byte TRAILER_VERSION = 1;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  static final long HEADER_MAGIC = 0x31764c4157637250L;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  static final long TRAILER_MAGIC = 0x50726357414c7631L;<a name="line.59"></a>
+<span class="sourceLineNo">056</span>  @InterfaceAudience.Private<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  public static class InvalidWALDataException extends IOException {<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>    private static final long serialVersionUID = 5471733223070202196L;<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 static class InvalidWALDataException extends IOException {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    public InvalidWALDataException(String s) {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>      super(s);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    }<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>    public InvalidWALDataException(Throwable t) {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>      super(t);<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    }<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  }<a name="line.70"></a>
-<span class="sourceLineNo">071</span><a name="line.71"></a>
-<span class="sourceLineNo">072</span>  interface Loader extends ProcedureLoader {<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    void markCorruptedWAL(ProcedureWALFile log, IOException e);<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  }<a name="line.74"></a>
+<span class="sourceLineNo">061</span>    public InvalidWALDataException(String s) {<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      super(s);<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    }<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>    public InvalidWALDataException(Throwable t) {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>      super(t);<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    }<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  }<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  interface Loader extends ProcedureLoader {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    void markCorruptedWAL(ProcedureWALFile log, IOException e);<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>  private ProcedureWALFormat() {}<a name="line.74"></a>
 <span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private ProcedureWALFormat() {}<a name="line.76"></a>
-<span class="sourceLineNo">077</span><a name="line.77"></a>
-<span class="sourceLineNo">078</span>  public static void load(final Iterator&lt;ProcedureWALFile&gt; logs,<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      final ProcedureStoreTracker tracker, final Loader loader) throws IOException {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    final ProcedureWALFormatReader reader = new ProcedureWALFormatReader(tracker, loader);<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    tracker.setKeepDeletes(true);<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    try {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>      // Ignore the last log which is current active log.<a name="line.83"></a>
-<span class="sourceLineNo">084</span>      while (logs.hasNext()) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>        ProcedureWALFile log = logs.next();<a name="line.85"></a>
-<span class="sourceLineNo">086</span>        log.open();<a name="line.86"></a>
-<span class="sourceLineNo">087</span>        try {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>          reader.read(log);<a name="line.88"></a>
-<span class="sourceLineNo">089</span>        } finally {<a name="line.89"></a>
-<span class="sourceLineNo">090</span>          log.close();<a name="line.90"></a>
-<span class="sourceLineNo">091</span>        }<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      }<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      reader.finish();<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>      // The tracker is now updated with all the procedures read from the logs<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      tracker.setPartialFlag(false);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      tracker.resetUpdates();<a name="line.97"></a>
+<span class="sourceLineNo">076</span>  public static void load(Iterator&lt;ProcedureWALFile&gt; logs, ProcedureStoreTracker tracker,<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      Loader loader) throws IOException {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    ProcedureWALFormatReader reader = new ProcedureWALFormatReader(tracker, loader);<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    tracker.setKeepDeletes(true);<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    try {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      // Ignore the last log which is current active log.<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      while (logs.hasNext()) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>        ProcedureWALFile log = logs.next();<a name="line.83"></a>
+<span class="sourceLineNo">084</span>        log.open();<a name="line.84"></a>
+<span class="sourceLineNo">085</span>        try {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>          reader.read(log);<a name="line.86"></a>
+<span class="sourceLineNo">087</span>        } finally {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>          log.close();<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>      reader.finish();<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>      // The tracker is now updated with all the procedures read from the logs<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      if (tracker.isPartial()) {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>        tracker.setPartialFlag(false);<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      }<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      tracker.resetModified();<a name="line.97"></a>
 <span class="sourceLineNo">098</span>    } finally {<a name="line.98"></a>
 <span class="sourceLineNo">099</span>      tracker.setKeepDeletes(false);<a name="line.99"></a>
 <span class="sourceLineNo">100</span>    }<a name="line.100"></a>
@@ -213,7 +213,7 @@
 <span class="sourceLineNo">205</span>  }<a name="line.205"></a>
 <span class="sourceLineNo">206</span><a name="line.206"></a>
 <span class="sourceLineNo">207</span>  public static void writeEntry(ByteSlot slot, ProcedureWALEntry.Type type,<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      Procedure proc, Procedure[] subprocs) throws IOException {<a name="line.208"></a>
+<span class="sourceLineNo">208</span>      Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs) throws IOException {<a name="line.208"></a>
 <span class="sourceLineNo">209</span>    final ProcedureWALEntry.Builder builder = ProcedureWALEntry.newBuilder();<a name="line.209"></a>
 <span class="sourceLineNo">210</span>    builder.setType(type);<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    builder.addProcedure(ProcedureUtil.convertToProtoProcedure(proc));<a name="line.211"></a>
@@ -225,17 +225,17 @@
 <span class="sourceLineNo">217</span>    builder.build().writeDelimitedTo(slot);<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>  public static void writeInsert(ByteSlot slot, Procedure proc)<a name="line.220"></a>
+<span class="sourceLineNo">220</span>  public static void writeInsert(ByteSlot slot, Procedure&lt;?&gt; proc)<a name="line.220"></a>
 <span class="sourceLineNo">221</span>      throws IOException {<a name="line.221"></a>
 <span class="sourceLineNo">222</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_INIT, proc, null);<a name="line.222"></a>
 <span class="sourceLineNo">223</span>  }<a name="line.223"></a>
 <span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>  public static void writeInsert(ByteSlot slot, Procedure proc, Procedure[] subprocs)<a name="line.225"></a>
+<span class="sourceLineNo">225</span>  public static void writeInsert(ByteSlot slot, Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs)<a name="line.225"></a>
 <span class="sourceLineNo">226</span>      throws IOException {<a name="line.226"></a>
 <span class="sourceLineNo">227</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_INSERT, proc, subprocs);<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>  public static void writeUpdate(ByteSlot slot, Procedure proc)<a name="line.230"></a>
+<span class="sourceLineNo">230</span>  public static void writeUpdate(ByteSlot slot, Procedure&lt;?&gt; proc)<a name="line.230"></a>
 <span class="sourceLineNo">231</span>      throws IOException {<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_UPDATE, proc, null);<a name="line.232"></a>
 <span class="sourceLineNo">233</span>  }<a name="line.233"></a>
@@ -248,7 +248,7 @@
 <span class="sourceLineNo">240</span>    builder.build().writeDelimitedTo(slot);<a name="line.240"></a>
 <span class="sourceLineNo">241</span>  }<a name="line.241"></a>
 <span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public static void writeDelete(ByteSlot slot, Procedure proc, long[] subprocs)<a name="line.243"></a>
+<span class="sourceLineNo">243</span>  public static void writeDelete(ByteSlot slot, Procedure&lt;?&gt; proc, long[] subprocs)<a name="line.243"></a>
 <span class="sourceLineNo">244</span>      throws IOException {<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    final ProcedureWALEntry.Builder builder = ProcedureWALEntry.newBuilder();<a name="line.245"></a>
 <span class="sourceLineNo">246</span>    builder.setType(ProcedureWALEntry.Type.PROCEDURE_WAL_DELETE);<a name="line.246"></a>


[46/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 9d82cb1..ec7776f 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -281,10 +281,10 @@
 <th><img src="images/icon_warning_sml.gif" alt="" />&#160;Warnings</th>
 <th><img src="images/icon_error_sml.gif" alt="" />&#160;Errors</th></tr>
 <tr class="b">
-<td>3757</td>
+<td>3759</td>
 <td>0</td>
 <td>0</td>
-<td>15211</td></tr></table></div>
+<td>15190</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -5662,7 +5662,7 @@
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>3</td></tr>
+<td>2</td></tr>
 <tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.TestProcedureStoreTracker.java">org/apache/hadoop/hbase/procedure2/store/TestProcedureStoreTracker.java</a></td>
 <td>0</td>
@@ -5672,17 +5672,7 @@
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFile.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>4</td></tr>
-<tr class="b">
-<td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormat.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.java</a></td>
-<td>0</td>
-<td>0</td>
-<td>2</td></tr>
-<tr class="a">
-<td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.java</a></td>
-<td>0</td>
-<td>0</td>
-<td>10</td></tr>
+<td>3</td></tr>
 <tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALLoaderPerformanceEvaluation.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALLoaderPerformanceEvaluation.java</a></td>
 <td>0</td>
@@ -5694,4036 +5684,4031 @@
 <td>0</td>
 <td>4</td></tr>
 <tr class="b">
-<td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALPrettyPrinter.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.java</a></td>
-<td>0</td>
-<td>0</td>
-<td>2</td></tr>
-<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.TestStressWALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/TestStressWALProcedureStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.TestWALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>10</td></tr>
-<tr class="b">
+<td>5</td></tr>
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.util.DelayedUtil.java">org/apache/hadoop/hbase/procedure2/util/DelayedUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.util.StringUtils.java">org/apache/hadoop/hbase/procedure2/util/StringUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ProtobufMagic.java">org/apache/hadoop/hbase/protobuf/ProtobufMagic.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ProtobufMessageConverter.java">org/apache/hadoop/hbase/protobuf/ProtobufMessageConverter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ProtobufUtil.java">org/apache/hadoop/hbase/protobuf/ProtobufUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>115</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ReplicationProtbufUtil.java">org/apache/hadoop/hbase/protobuf/ReplicationProtbufUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.protobuf.TestProtobufUtil.java">org/apache/hadoop/hbase/protobuf/TestProtobufUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.protobuf.TestReplicationProtobuf.java">org/apache/hadoop/hbase/protobuf/TestReplicationProtobuf.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.ActivePolicyEnforcement.java">org/apache/hadoop/hbase/quotas/ActivePolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.AverageIntervalRateLimiter.java">org/apache/hadoop/hbase/quotas/AverageIntervalRateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.DefaultOperationQuota.java">org/apache/hadoop/hbase/quotas/DefaultOperationQuota.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.FileSystemUtilizationChore.java">org/apache/hadoop/hbase/quotas/FileSystemUtilizationChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.FixedIntervalRateLimiter.java">org/apache/hadoop/hbase/quotas/FixedIntervalRateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.GlobalQuotaSettings.java">org/apache/hadoop/hbase/quotas/GlobalQuotaSettings.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.GlobalQuotaSettingsImpl.java">org/apache/hadoop/hbase/quotas/GlobalQuotaSettingsImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.NamespaceQuotaSnapshotStore.java">org/apache/hadoop/hbase/quotas/NamespaceQuotaSnapshotStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.NoopOperationQuota.java">org/apache/hadoop/hbase/quotas/NoopOperationQuota.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.NoopQuotaLimiter.java">org/apache/hadoop/hbase/quotas/NoopQuotaLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.OperationQuota.java">org/apache/hadoop/hbase/quotas/OperationQuota.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaCache.java">org/apache/hadoop/hbase/quotas/QuotaCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaLimiter.java">org/apache/hadoop/hbase/quotas/QuotaLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaLimiterFactory.java">org/apache/hadoop/hbase/quotas/QuotaLimiterFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaObserverChore.java">org/apache/hadoop/hbase/quotas/QuotaObserverChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaRetriever.java">org/apache/hadoop/hbase/quotas/QuotaRetriever.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaSettings.java">org/apache/hadoop/hbase/quotas/QuotaSettings.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaSettingsFactory.java">org/apache/hadoop/hbase/quotas/QuotaSettingsFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaState.java">org/apache/hadoop/hbase/quotas/QuotaState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaTableUtil.java">org/apache/hadoop/hbase/quotas/QuotaTableUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaUtil.java">org/apache/hadoop/hbase/quotas/QuotaUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.RateLimiter.java">org/apache/hadoop/hbase/quotas/RateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>18</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager.java">org/apache/hadoop/hbase/quotas/RegionServerRpcQuotaManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager.java">org/apache/hadoop/hbase/quotas/RegionServerSpaceQuotaManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.SnapshotQuotaObserverChore.java">org/apache/hadoop/hbase/quotas/SnapshotQuotaObserverChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceLimitSettings.java">org/apache/hadoop/hbase/quotas/SpaceLimitSettings.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaRefresherChore.java">org/apache/hadoop/hbase/quotas/SpaceQuotaRefresherChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshot.java">org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshot.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifier.java">org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifier.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierFactory.java">org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifierFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceQuotaSnapshotNotifierForTest.java">org/apache/hadoop/hbase/quotas/SpaceQuotaSnapshotNotifierForTest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/SpaceViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.SpaceViolationPolicyEnforcementFactory.java">org/apache/hadoop/hbase/quotas/SpaceViolationPolicyEnforcementFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TableQuotaSnapshotStore.java">org/apache/hadoop/hbase/quotas/TableQuotaSnapshotStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestFileSystemUtilizationChore.java">org/apache/hadoop/hbase/quotas/TestFileSystemUtilizationChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestNamespaceQuotaViolationStore.java">org/apache/hadoop/hbase/quotas/TestNamespaceQuotaViolationStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestQuotaFilter.java">org/apache/hadoop/hbase/quotas/TestQuotaFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestQuotaObserverChoreWithMiniCluster.java">org/apache/hadoop/hbase/quotas/TestQuotaObserverChoreWithMiniCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestQuotaSettingsFactory.java">org/apache/hadoop/hbase/quotas/TestQuotaSettingsFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestQuotaStatusRPCs.java">org/apache/hadoop/hbase/quotas/TestQuotaStatusRPCs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestQuotaThrottle.java">org/apache/hadoop/hbase/quotas/TestQuotaThrottle.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestRateLimiter.java">org/apache/hadoop/hbase/quotas/TestRateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestSpaceQuotas.java">org/apache/hadoop/hbase/quotas/TestSpaceQuotas.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestTableQuotaViolationStore.java">org/apache/hadoop/hbase/quotas/TestTableQuotaViolationStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TestTablesWithQuotas.java">org/apache/hadoop/hbase/quotas/TestTablesWithQuotas.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.ThrottleSettings.java">org/apache/hadoop/hbase/quotas/ThrottleSettings.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.TimeBasedLimiter.java">org/apache/hadoop/hbase/quotas/TimeBasedLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.UserQuotaState.java">org/apache/hadoop/hbase/quotas/UserQuotaState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.BaseViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/BaseViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.DefaultViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/DefaultViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.DisableTableViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/DisableTableViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.NoInsertsViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/NoInsertsViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.NoWritesCompactionsViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/NoWritesCompactionsViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.NoWritesViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/NoWritesViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.policies.TestBulkLoadCheckingViolationPolicyEnforcement.java">org/apache/hadoop/hbase/quotas/policies/TestBulkLoadCheckingViolationPolicyEnforcement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.AbstractMemStore.java">org/apache/hadoop/hbase/regionserver/AbstractMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.AbstractMultiFileWriter.java">org/apache/hadoop/hbase/regionserver/AbstractMultiFileWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.AbstractTestDateTieredCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/AbstractTestDateTieredCompactionPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.AnnotationReadingPriorityFunction.java">org/apache/hadoop/hbase/regionserver/AnnotationReadingPriorityFunction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.BaseRowProcessor.java">org/apache/hadoop/hbase/regionserver/BaseRowProcessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.BusyRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/BusyRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ByteBufferChunkKeyValue.java">org/apache/hadoop/hbase/regionserver/ByteBufferChunkKeyValue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CSLMImmutableSegment.java">org/apache/hadoop/hbase/regionserver/CSLMImmutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellArrayImmutableSegment.java">org/apache/hadoop/hbase/regionserver/CellArrayImmutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellArrayMap.java">org/apache/hadoop/hbase/regionserver/CellArrayMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellChunkMap.java">org/apache/hadoop/hbase/regionserver/CellChunkMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellFlatMap.java">org/apache/hadoop/hbase/regionserver/CellFlatMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellSet.java">org/apache/hadoop/hbase/regionserver/CellSet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CellSink.java">org/apache/hadoop/hbase/regionserver/CellSink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ChangedReadersObserver.java">org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Chunk.java">org/apache/hadoop/hbase/regionserver/Chunk.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ChunkCreator.java">org/apache/hadoop/hbase/regionserver/ChunkCreator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactSplit.java">org/apache/hadoop/hbase/regionserver/CompactSplit.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactedHFilesDischargeHandler.java">org/apache/hadoop/hbase/regionserver/CompactedHFilesDischargeHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactedHFilesDischarger.java">org/apache/hadoop/hbase/regionserver/CompactedHFilesDischarger.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactingMemStore.java">org/apache/hadoop/hbase/regionserver/CompactingMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactionPipeline.java">org/apache/hadoop/hbase/regionserver/CompactionPipeline.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactionTool.java">org/apache/hadoop/hbase/regionserver/CompactionTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompositeImmutableSegment.java">org/apache/hadoop/hbase/regionserver/CompositeImmutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/ConstantSizeRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CreateRandomStoreFile.java">org/apache/hadoop/hbase/regionserver/CreateRandomStoreFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DataBlockEncodingTool.java">org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DateTieredStoreEngine.java">org/apache/hadoop/hbase/regionserver/DateTieredStoreEngine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DefaultHeapMemoryTuner.java">org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>31</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DefaultMemStore.java">org/apache/hadoop/hbase/regionserver/DefaultMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher.java">org/apache/hadoop/hbase/regionserver/DefaultStoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DelegatingKeyValueScanner.java">org/apache/hadoop/hbase/regionserver/DelegatingKeyValueScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DelimitedKeyPrefixRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/DelimitedKeyPrefixRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/DisabledRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FavoredNodesForRegion.java">org/apache/hadoop/hbase/regionserver/FavoredNodesForRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FifoRpcSchedulerFactory.java">org/apache/hadoop/hbase/regionserver/FifoRpcSchedulerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FlushPolicyFactory.java">org/apache/hadoop/hbase/regionserver/FlushPolicyFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FlushRequestListener.java">org/apache/hadoop/hbase/regionserver/FlushRequestListener.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FlushRequester.java">org/apache/hadoop/hbase/regionserver/FlushRequester.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HMobStore.java">org/apache/hadoop/hbase/regionserver/HMobStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegion.java">org/apache/hadoop/hbase/regionserver/HRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>212</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegionFileSystem.java">org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>47</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegionServer.java">org/apache/hadoop/hbase/regionserver/HRegionServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>76</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine.java">org/apache/hadoop/hbase/regionserver/HRegionServerCommandLine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HStore.java">org/apache/hadoop/hbase/regionserver/HStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>43</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HStoreFile.java">org/apache/hadoop/hbase/regionserver/HStoreFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HeapMemoryManager.java">org/apache/hadoop/hbase/regionserver/HeapMemoryManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HeapMemoryTuner.java">org/apache/hadoop/hbase/regionserver/HeapMemoryTuner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ImmutableSegment.java">org/apache/hadoop/hbase/regionserver/ImmutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/IncreasingToUpperBoundRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.InternalScan.java">org/apache/hadoop/hbase/regionserver/InternalScan.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.InternalScanner.java">org/apache/hadoop/hbase/regionserver/InternalScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.KeyPrefixRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/KeyPrefixRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.KeyValueHeap.java">org/apache/hadoop/hbase/regionserver/KeyValueHeap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.KeyValueScanner.java">org/apache/hadoop/hbase/regionserver/KeyValueScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.LeaseException.java">org/apache/hadoop/hbase/regionserver/LeaseException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Leases.java">org/apache/hadoop/hbase/regionserver/Leases.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.LogRoller.java">org/apache/hadoop/hbase/regionserver/LogRoller.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStore.java">org/apache/hadoop/hbase/regionserver/MemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreCompactor.java">org/apache/hadoop/hbase/regionserver/MemStoreCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreFlusher.java">org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>29</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreLAB.java">org/apache/hadoop/hbase/regionserver/MemStoreLAB.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreLABImpl.java">org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreMergerSegmentsIterator.java">org/apache/hadoop/hbase/regionserver/MemStoreMergerSegmentsIterator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreSegmentsIterator.java">org/apache/hadoop/hbase/regionserver/MemStoreSegmentsIterator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreSnapshot.java">org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegion.java">org/apache/hadoop/hbase/regionserver/MetricsRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServer.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapperImpl.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapperStub.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperStub.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsTable.java">org/apache/hadoop/hbase/regionserver/MetricsTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsTableSource.java">org/apache/hadoop/hbase/regionserver/MetricsTableSource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsTableWrapperAggregateImpl.java">org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregateImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsTableWrapperStub.java">org/apache/hadoop/hbase/regionserver/MetricsTableWrapperStub.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MiniBatchOperationInProgress.java">org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MobReferenceOnlyFilter.java">org/apache/hadoop/hbase/regionserver/MobReferenceOnlyFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl.java">org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MutableOnlineRegions.java">org/apache/hadoop/hbase/regionserver/MutableOnlineRegions.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MutableSegment.java">org/apache/hadoop/hbase/regionserver/MutableSegment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.NoTagByteBufferChunkKeyValue.java">org/apache/hadoop/hbase/regionserver/NoTagByteBufferChunkKeyValue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.NonLazyKeyValueScanner.java">org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.NonReversedNonLazyKeyValueScanner.java">org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.OOMERegionServer.java">org/apache/hadoop/hbase/regionserver/OOMERegionServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.OnlineRegions.java">org/apache/hadoop/hbase/regionserver/OnlineRegions.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.OperationStatus.java">org/apache/hadoop/hbase/regionserver/OperationStatus.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RSDumpServlet.java">org/apache/hadoop/hbase/regionserver/RSDumpServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RSRpcServices.java">org/apache/hadoop/hbase/regionserver/RSRpcServices.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>64</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RSStatusServlet.java">org/apache/hadoop/hbase/regionserver/RSStatusServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Region.java">org/apache/hadoop/hbase/regionserver/Region.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>25</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionAsTable.java">org/apache/hadoop/hbase/regionserver/RegionAsTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>41</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.java">org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>79</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionScanner.java">org/apache/hadoop/hbase/regionserver/RegionScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionServerAccounting.java">org/apache/hadoop/hbase/regionserver/RegionServerAccounting.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionServerCoprocessorHost.java">org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionServerServices.java">org/apache/hadoop/hbase/regionserver/RegionServerServices.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionServicesForStores.java">org/apache/hadoop/hbase/regionserver/RegionServicesForStores.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReplicationSinkService.java">org/apache/hadoop/hbase/regionserver/ReplicationSinkService.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReversedKeyValueHeap.java">org/apache/hadoop/hbase/regionserver/ReversedKeyValueHeap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReversedRegionScannerImpl.java">org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReversedStoreScanner.java">org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RowProcessor.java">org/apache/hadoop/hbase/regionserver/RowProcessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RpcSchedulerFactory.java">org/apache/hadoop/hbase/regionserver/RpcSchedulerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ScanInfo.java">org/apache/hadoop/hbase/regionserver/ScanInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ScanOptions.java">org/apache/hadoop/hbase/regionserver/ScanOptions.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ScannerContext.java">org/apache/hadoop/hbase/regionserver/ScannerContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ScannerIdGenerator.java">org/apache/hadoop/hbase/regionserver/ScannerIdGenerator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SecureBulkLoadManager.java">org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Segment.java">org/apache/hadoop/hbase/regionserver/Segment.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SegmentFactory.java">org/apache/hadoop/hbase/regionserver/SegmentFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SegmentScanner.java">org/apache/hadoop/hbase/regionserver/SegmentScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ServerNonceManager.java">org/apache/hadoop/hbase/regionserver/ServerNonceManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ShipperListener.java">org/apache/hadoop/hbase/regionserver/ShipperListener.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ShutdownHook.java">org/apache/hadoop/hbase/regionserver/ShutdownHook.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SimpleRpcSchedulerFactory.java">org/apache/hadoop/hbase/regionserver/SimpleRpcSchedulerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SplitRequest.java">org/apache/hadoop/hbase/regionserver/SplitRequest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SteppingSplitPolicy.java">org/apache/hadoop/hbase/regionserver/SteppingSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Store.java">org/apache/hadoop/hbase/regionserver/Store.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileComparators.java">org/apache/hadoop/hbase/regionserver/StoreFileComparators.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileInfo.java">org/apache/hadoop/hbase/regionserver/StoreFileInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>18</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileManager.java">org/apache/hadoop/hbase/regionserver/StoreFileManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileReader.java">org/apache/hadoop/hbase/regionserver/StoreFileReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileScanner.java">org/apache/hadoop/hbase/regionserver/StoreFileScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileWriter.java">org/apache/hadoop/hbase/regionserver/StoreFileWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFlushContext.java">org/apache/hadoop/hbase/regionserver/StoreFlushContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFlusher.java">org/apache/hadoop/hbase/regionserver/StoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreScanner.java">org/apache/hadoop/hbase/regionserver/StoreScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>21</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreUtils.java">org/apache/hadoop/hbase/regionserver/StoreUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StorefileRefresherChore.java">org/apache/hadoop/hbase/regionserver/StorefileRefresherChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StripeMultiFileWriter.java">org/apache/hadoop/hbase/regionserver/StripeMultiFileWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StripeStoreConfig.java">org/apache/hadoop/hbase/regionserver/StripeStoreConfig.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StripeStoreEngine.java">org/apache/hadoop/hbase/regionserver/StripeStoreEngine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StripeStoreFileManager.java">org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StripeStoreFlusher.java">org/apache/hadoop/hbase/regionserver/StripeStoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestAtomicOperation.java">org/apache/hadoop/hbase/regionserver/TestAtomicOperation.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestBlocksRead.java">org/apache/hadoop/hbase/regionserver/TestBlocksRead.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestBlocksScanned.java">org/apache/hadoop/hbase/regionserver/TestBlocksScanned.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestBulkLoad.java">org/apache/hadoop/hbase/regionserver/TestBulkLoad.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCacheOnWriteInSchema.java">org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCellFlatSet.java">org/apache/hadoop/hbase/regionserver/TestCellFlatSet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCellSkipListSet.java">org/apache/hadoop/hbase/regionserver/TestCellSkipListSet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestClearRegionBlockCache.java">org/apache/hadoop/hbase/regionserver/TestClearRegionBlockCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestColumnSeeking.java">org/apache/hadoop/hbase/regionserver/TestColumnSeeking.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCompactSplitThread.java">org/apache/hadoop/hbase/regionserver/TestCompactSplitThread.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCompactingMemStore.java">org/apache/hadoop/hbase/regionserver/TestCompactingMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCompactingToCellFlatMapMemStore.java">org/apache/hadoop/hbase/regionserver/TestCompactingToCellFlatMapMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCompaction.java">org/apache/hadoop/hbase/regionserver/TestCompaction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCompactionState.java">org/apache/hadoop/hbase/regionserver/TestCompactionState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestCompoundBloomFilter.java">org/apache/hadoop/hbase/regionserver/TestCompoundBloomFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestDateTieredCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/TestDateTieredCompactionPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestDateTieredCompactionPolicyOverflow.java">org/apache/hadoop/hbase/regionserver/TestDateTieredCompactionPolicyOverflow.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestDefaultMemStore.java">org/apache/hadoop/hbase/regionserver/TestDefaultMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestDeleteMobTable.java">org/apache/hadoop/hbase/regionserver/TestDeleteMobTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestEndToEndSplitTransaction.java">org/apache/hadoop/hbase/regionserver/TestEndToEndSplitTransaction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestFSErrorsExposed.java">org/apache/hadoop/hbase/regionserver/TestFSErrorsExposed.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestFailedAppendAndSync.java">org/apache/hadoop/hbase/regionserver/TestFailedAppendAndSync.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestGetClosestAtOrBefore.java">org/apache/hadoop/hbase/regionserver/TestGetClosestAtOrBefore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHMobStore.java">org/apache/hadoop/hbase/regionserver/TestHMobStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHRegion.java">org/apache/hadoop/hbase/regionserver/TestHRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>29</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHRegionFileSystem.java">org/apache/hadoop/hbase/regionserver/TestHRegionFileSystem.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHRegionInfo.java">org/apache/hadoop/hbase/regionserver/TestHRegionInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHRegionOnCluster.java">org/apache/hadoop/hbase/regionserver/TestHRegionOnCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHRegionReplayEvents.java">org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHRegionServerBulkLoad.java">org/apache/hadoop/hbase/regionserver/TestHRegionServerBulkLoad.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHRegionServerBulkLoadWithOldClient.java">org/apache/hadoop/hbase/regionserver/TestHRegionServerBulkLoadWithOldClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHStore.java">org/apache/hadoop/hbase/regionserver/TestHStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>40</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestHStoreFile.java">org/apache/hadoop/hbase/regionserver/TestHStoreFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>22</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestJoinedScanners.java">org/apache/hadoop/hbase/regionserver/TestJoinedScanners.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestKeepDeletes.java">org/apache/hadoop/hbase/regionserver/TestKeepDeletes.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestKeyValueHeap.java">org/apache/hadoop/hbase/regionserver/TestKeyValueHeap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestKeyValueScanFixture.java">org/apache/hadoop/hbase/regionserver/TestKeyValueScanFixture.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMajorCompaction.java">org/apache/hadoop/hbase/regionserver/TestMajorCompaction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMasterAddressTracker.java">org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMemStoreLAB.java">org/apache/hadoop/hbase/regionserver/TestMemStoreLAB.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMemstoreLABWithoutPool.java">org/apache/hadoop/hbase/regionserver/TestMemstoreLABWithoutPool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMetricsRegion.java">org/apache/hadoop/hbase/regionserver/TestMetricsRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMetricsRegionServer.java">org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMinorCompaction.java">org/apache/hadoop/hbase/regionserver/TestMinorCompaction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMobStoreScanner.java">org/apache/hadoop/hbase/regionserver/TestMobStoreScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMultiColumnScanner.java">org/apache/hadoop/hbase/regionserver/TestMultiColumnScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMultiLogThreshold.java">org/apache/hadoop/hbase/regionserver/TestMultiLogThreshold.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestMultiVersionConcurrencyControl.java">org/apache/hadoop/hbase/regionserver/TestMultiVersionConcurrencyControl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestParallelPut.java">org/apache/hadoop/hbase/regionserver/TestParallelPut.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestPerColumnFamilyFlush.java">org/apache/hadoop/hbase/regionserver/TestPerColumnFamilyFlush.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestPriorityRpc.java">org/apache/hadoop/hbase/regionserver/TestPriorityRpc.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestQosFunction.java">org/apache/hadoop/hbase/regionserver/TestQosFunction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRSKilledWhenInitializing.java">org/apache/hadoop/hbase/regionserver/TestRSKilledWhenInitializing.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRecoveredEdits.java">org/apache/hadoop/hbase/regionserver/TestRecoveredEdits.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionIncrement.java">org/apache/hadoop/hbase/regionserver/TestRegionIncrement.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionInfoBuilder.java">org/apache/hadoop/hbase/regionserver/TestRegionInfoBuilder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionMergeTransactionOnCluster.java">org/apache/hadoop/hbase/regionserver/TestRegionMergeTransactionOnCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionOpen.java">org/apache/hadoop/hbase/regionserver/TestRegionOpen.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionReplicaFailover.java">org/apache/hadoop/hbase/regionserver/TestRegionReplicaFailover.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionReplicas.java">org/apache/hadoop/hbase/regionserver/TestRegionReplicas.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionServerAbort.java">org/apache/hadoop/hbase/regionserver/TestRegionServerAbort.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionServerHostname.java">org/apache/hadoop/hbase/regionserver/TestRegionServerHostname.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionServerMetrics.java">org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionServerNoMaster.java">org/apache/hadoop/hbase/regionserver/TestRegionServerNoMaster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionServerOnlineConfigChange.java">org/apache/hadoop/hbase/regionserver/TestRegionServerOnlineConfigChange.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionServerReadRequestMetrics.java">org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionServerReportForDuty.java">org/apache/hadoop/hbase/regionserver/TestRegionServerReportForDuty.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/TestRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestResettingCounters.java">org/apache/hadoop/hbase/regionserver/TestResettingCounters.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestReversibleScanners.java">org/apache/hadoop/hbase/regionserver/TestReversibleScanners.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestRowTooBig.java">org/apache/hadoop/hbase/regionserver/TestRowTooBig.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestScanWithBloomError.java">org/apache/hadoop/hbase/regionserver/TestScanWithBloomError.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestScanner.java">org/apache/hadoop/hbase/regionserver/TestScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestScannerHeartbeatMessages.java">org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestScannerRetriableFailure.java">org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestScannerWithBulkload.java">org/apache/hadoop/hbase/regionserver/TestScannerWithBulkload.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestSeekOptimizations.java">org/apache/hadoop/hbase/regionserver/TestSeekOptimizations.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestServerNonceManager.java">org/apache/hadoop/hbase/regionserver/TestServerNonceManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestSettingTimeoutOnBlockingPoint.java">org/apache/hadoop/hbase/regionserver/TestSettingTimeoutOnBlockingPoint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestSimpleTimeRangeTracker.java">org/apache/hadoop/hbase/regionserver/TestSimpleTimeRangeTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestSplitLogWorker.java">org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestSplitTransactionOnCluster.java">org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>27</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestStoreFileInfo.java">org/apache/hadoop/hbase/regionserver/TestStoreFileInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestStoreFileRefresherChore.java">org/apache/hadoop/hbase/regionserver/TestStoreFileRefresherChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestStoreScanner.java">org/apache/hadoop/hbase/regionserver/TestStoreScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestStripeStoreFileManager.java">org/apache/hadoop/hbase/regionserver/TestStripeStoreFileManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestSyncTimeRangeTracker.java">org/apache/hadoop/hbase/regionserver/TestSyncTimeRangeTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestTags.java">org/apache/hadoop/hbase/regionserver/TestTags.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestTimestampFilterSeekHint.java">org/apache/hadoop/hbase/regionserver/TestTimestampFilterSeekHint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestWALLockup.java">org/apache/hadoop/hbase/regionserver/TestWALLockup.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestWALMonotonicallyIncreasingSeqId.java">org/apache/hadoop/hbase/regionserver/TestWALMonotonicallyIncreasingSeqId.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TestWalAndCompactingMemStoreFlush.java">org/apache/hadoop/hbase/regionserver/TestWalAndCompactingMemStoreFlush.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TimeRangeTracker.java">org/apache/hadoop/hbase/regionserver/TimeRangeTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CompactionConfiguration.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionConfiguration.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CompactionProgress.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionProgress.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CompactionRequester.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionRequester.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.Compactor.java">org/apache/hadoop/hbase/regionserver/compactions/Compactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CurrentHourProvider.java">org/apache/hadoop/hbase/regionserver/compactions/CurrentHourProvider.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.DefaultCompactor.java">org/apache/hadoop/hbase/regionserver/compactions/DefaultCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.OffPeakHours.java">org/apache/hadoop/hbase/regionserver/compactions/OffPeakHours.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.PerfTestCompactionPolicies.java">org/apache/hadoop/hbase/regionserver/compactions/PerfTestCompactionPolicies.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.RatioBasedCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/compactions/RatioBasedCompactionPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.SortedCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/compactions/SortedCompactionPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.SpikyFileListGenerator.java">org/apache/hadoop/hbase/regionserver/compactions/SpikyFileListGenerator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.StripeCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/compactions/StripeCompactionPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.StripeCompactor.java">org/apache/hadoop/hbase/regionserver/compactions/StripeCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.TestCompactor.java">org/apache/hadoop/hbase/regionserver/compactions/TestCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.TestStripeCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/compactions/TestStripeCompactionPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.handler.CloseRegionHandler.java">org/apache/hadoop/hbase/regionserver/handler/CloseRegionHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.handler.OpenPriorityRegionHandler.java">org/apache/hadoop/hbase/regionserver/handler/OpenPriorityRegionHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler.java">org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.handler.ParallelSeekHandler.java">org/apache/hadoop/hbase/regionserver/handler/ParallelSeekHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.handler.RegionReplicaFlushHandler.java">org/apache/hadoop/hbase/regionserver/handler/RegionReplicaFlushHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.handler.WALSplitterHandler.java">org/apache/hadoop/hbase/regionserver/handler/WALSplitterHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>22</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.ColumnTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/ColumnTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.CompactionScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/CompactionScanQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.DeleteTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.DropDeletesCompactionScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/DropDeletesCompactionScanQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.ExplicitColumnTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/ExplicitColumnTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.IncludeAllCompactionQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/IncludeAllCompactionQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.MajorCompactionScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/MajorCompactionScanQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.MinorCompactionScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/MinorCompactionScanQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.NewVersionBehaviorTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/NewVersionBehaviorTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>20</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.NormalUserScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/NormalUserScanQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.RawScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/RawScanQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.ScanDeleteTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/ScanDeleteTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.ScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.ScanWildcardColumnTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/ScanWildcardColumnTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.StripeCompactionScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.TestExplicitColumnTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/TestExplicitColumnTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.TestScanDeleteTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/TestScanDeleteTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.TestUserScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/TestUserScanQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.querymatcher.UserScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/UserScanQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.snapshot.FlushSnapshotSubprocedure.java">org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.snapshot.RegionServerSnapshotManager.java">org/apache/hadoop/hbase/regionserver/snapshot/RegionServerSnapshotManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>19</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.throttle.CompactionThroughputControllerFactory.java">org/apache/hadoop/hbase/regionserver/throttle/CompactionThroughputControllerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.throttle.FlushThroughputControllerFactory.java">org/apache/hadoop/hbase/regionserver/throttle/FlushThroughputControllerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.throttle.NoLimitThroughputController.java">org/apache/hadoop/hbase/regionserver/throttle/NoLimitThroughputController.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.throttle.PressureAwareCompactionThroughputController.java">org/apache/hadoop/hbase/regionserver/throttle/PressureAwareCompactionThroughputController.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.throttle.PressureAwareFlushThroughputController.java">org/apache/hadoop/hbase/regionserver/throttle/PressureAwareFlushThroughputController.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.throttle.PressureAwareThroughputController.java">org/apache/hadoop/hbase/regionserver/throttle/PressureAwareThroughputController.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.throttle.ThroughputController.java">org/apache/hadoop/hbase/regionserver/throttle/ThroughputController.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.java">org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.AbstractProtobufLogWriter.java">org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.AbstractTestFSWAL.java">org/apache/hadoop/hbase/regionserver/wal/AbstractTestFSWAL.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.AbstractTestLogRolling.java">org/apache/hadoop/hbase/regionserver/wal/AbstractTestLogRolling.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.AbstractTestProtobufLog.java">org/apache/hadoop/hbase/regionserver/wal/AbstractTestProtobufLog.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.AbstractTestWALReplay.java">org/apache/hadoop/hbase/regionserver/wal/AbstractTestWALReplay.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>38</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.CompressionContext.java">org/apache/hadoop/hbase/regionserver/wal/CompressionContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.Compressor.java">org/apache/hadoop/hbase/regionserver/wal/Compressor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.FSHLog.java">org/apache/hadoop/hbase/regionserver/wal/FSHLog.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.FSWALEntry.java">org/apache/hadoop/hbase/regionserver/wal/FSWALEntry.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.FailedLogCloseException.java">org/apache/hadoop/hbase/regionserver/wal/FailedLogCloseException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.FailedSyncBeforeLogCloseException.java">org/apache/hadoop/hbase/regionserver/wal/FailedSyncBeforeLogCloseException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.FaultyProtobufLogReader.java">org/apache/hadoop/hbase/regionserver/wal/FaultyProtobufLogReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.InstrumentedLogWriter.java">org/apache/hadoop/hbase/regionserver/wal/InstrumentedLogWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.MetricsWAL.java">org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.ProtobufLogReader.java">org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>22</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.ReaderBase.java">org/apache/hadoop/hbase/regionserver/wal/ReaderBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.SecureProtobufLogReader.java">org/apache/hadoop/hbase/regionserver/wal/SecureProtobufLogReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.SecureProtobufLogWriter.java">org/apache/hadoop/hbase/regionserver/wal/SecureProtobufLogWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.SecureWALCellCodec.java">org/apache/hadoop/hbase/regionserver/wal/SecureWALCellCodec.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.SequenceIdAccounting.java">org/apache/hadoop/hbase/regionserver/wal/SequenceIdAccounting.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.TestLogRolling.java">org/apache/hadoop/hbase/regionserver/wal/TestLogRolling.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.TestLogRollingNoCluster.java">org/apache/hadoop/hbase/regionserver/wal/TestLogRollingNoCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.TestWALConfiguration.java">org/apache/hadoop/hbase/regionserver/wal/TestWALConfiguration.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.WALActionsListener.java">org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.WALCellCodec.java">org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.WALCoprocessorHost.java">org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.WALUtil.java">org/apache/hadoop/hbase/regionserver/wal/WALUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.BaseReplicationEndpoint.java">org/apache/hadoop/hbase/replication/BaseReplicationEndpoint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.BulkLoadCellFilter.java">org/apache/hadoop/hbase/replication/BulkLoadCellFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.ClusterMarkingEntryFilter.java">org/apache/hadoop/hbase/replication/ClusterMarkingEntryFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint.java">org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationEndpoint.java">org/apache/hadoop/hbase/replication/ReplicationEndpoint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationException.java">org/apache/hadoop/hbase/replication/ReplicationException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.SystemTableWALEntryFilter.java">org/apache/hadoop/hbase/replication/SystemTableWALEntryFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.TestMasterReplication.java">org/apache/hadoop/hbase/replication/TestMasterReplication.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.TestMultiSlaveReplication.java">org/apache/hadoop/hbase/replication/TestMultiSlaveReplication.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.TestPerTableCFReplication.java">org/apache/hadoop/hbase/replication/TestPerTableCFReplication.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.TestReplicationDisa

<TRUNCATED>

[45/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index d48310d..fb59fec 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -25,8 +25,8 @@ under the License.
     <language>en-us</language>
     <copyright>&#169;2007 - 2018 The Apache Software Foundation</copyright>
     <item>
-      <title>File: 3757,
-             Errors: 15211,
+      <title>File: 3759,
+             Errors: 15190,
              Warnings: 0,
              Infos: 0
       </title>
@@ -6803,7 +6803,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  2
+                  0
                 </td>
               </tr>
                           <tr>
@@ -11479,7 +11479,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  10
+                  5
                 </td>
               </tr>
                           <tr>
@@ -15763,7 +15763,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  10
+                  0
                 </td>
               </tr>
                           <tr>
@@ -39003,7 +39003,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  4
+                  3
                 </td>
               </tr>
                           <tr>
@@ -39787,7 +39787,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  2
+                  0
                 </td>
               </tr>
                           <tr>
@@ -42942,6 +42942,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.java">org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.RetriesExhaustedException.java">org/apache/hadoop/hbase/client/RetriesExhaustedException.java</a>
                 </td>
                 <td>
@@ -49307,7 +49321,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  3
+                  2
                 </td>
               </tr>
                           <tr>
@@ -49620,6 +49634,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.procedure2.store.BitSetNode.java">org/apache/hadoop/hbase/procedure2/store/BitSetNode.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.balancer.BalancerTestBase.java">org/apache/hadoop/hbase/master/balancer/BalancerTestBase.java</a>
                 </td>
                 <td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index 02841fb..208308f 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 1054c6f..768e257 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 53149d8..34cde0c 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -879,7 +879,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index 7bfab2a..54ec82d 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 4de6732..534a7e8 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="20181005" />
+    <meta name="Date-Revision-yyyymmdd" content="20181007" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -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-10-05</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-10-07</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/allclasses-frame.html b/devapidocs/allclasses-frame.html
index 080e303..2231d34 100644
--- a/devapidocs/allclasses-frame.html
+++ b/devapidocs/allclasses-frame.html
@@ -268,6 +268,7 @@
 <li><a href="org/apache/hadoop/hbase/filter/BinaryPrefixComparator.html" title="class in org.apache.hadoop.hbase.filter" target="classFrame">BinaryPrefixComparator</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/BitComparator.html" title="class in org.apache.hadoop.hbase.filter" target="classFrame">BitComparator</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter" target="classFrame">BitComparator.BitwiseOp</a></li>
+<li><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store" target="classFrame">BitSetNode</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile" target="classFrame"><span class="interfaceName">BlockCache</span></a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile" target="classFrame">BlockCacheKey</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/BlockCachesIterator.html" title="class in org.apache.hadoop.hbase.io.hfile" target="classFrame">BlockCachesIterator</a></li>
@@ -1905,7 +1906,6 @@
 <li><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureStoreListener.html" title="interface in org.apache.hadoop.hbase.procedure2.store" target="classFrame"><span class="interfaceName">ProcedureStore.ProcedureStoreListener</span></a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreBase.html" title="class in org.apache.hadoop.hbase.procedure2.store" target="classFrame">ProcedureStoreBase</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store" target="classFrame">ProcedureStoreTracker</a></li>
-<li><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store" target="classFrame">ProcedureStoreTracker.BitSetNode</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store" target="classFrame">ProcedureStoreTracker.DeleteState</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">ProcedureSuspendedException</a></li>
 <li><a href="org/apache/hadoop/hbase/master/procedure/ProcedureSyncWait.html" title="class in org.apache.hadoop.hbase.master.procedure" target="classFrame">ProcedureSyncWait</a></li>
@@ -1919,9 +1919,6 @@
 <li><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.InvalidWALDataException.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame">ProcedureWALFormat.InvalidWALDataException</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.Loader.html" title="interface in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame"><span class="interfaceName">ProcedureWALFormat.Loader</span></a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame">ProcedureWALFormatReader</a></li>
-<li><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame">ProcedureWALFormatReader.Entry</a></li>
-<li><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame">ProcedureWALFormatReader.EntryIterator</a></li>
-<li><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame">ProcedureWALFormatReader.WalProcedureMap</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame">ProcedureWALPrettyPrinter</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/ProcedureYieldException.html" title="class in org.apache.hadoop.hbase.procedure2" target="classFrame">ProcedureYieldException</a></li>
 <li><a href="org/apache/hadoop/hbase/conf/PropagatingConfigurationObserver.html" title="interface in org.apache.hadoop.hbase.conf" target="classFrame"><span class="interfaceName">PropagatingConfigurationObserver</span></a></li>
@@ -2953,6 +2950,9 @@
 <li><a href="org/apache/hadoop/hbase/mapreduce/WALPlayer.WALKeyValueMapper.html" title="class in org.apache.hadoop.hbase.mapreduce" target="classFrame">WALPlayer.WALKeyValueMapper</a></li>
 <li><a href="org/apache/hadoop/hbase/mapreduce/WALPlayer.WALMapper.html" title="class in org.apache.hadoop.hbase.mapreduce" target="classFrame">WALPlayer.WALMapper</a></li>
 <li><a href="org/apache/hadoop/hbase/wal/WALPrettyPrinter.html" title="class in org.apache.hadoop.hbase.wal" target="classFrame">WALPrettyPrinter</a></li>
+<li><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame">WALProcedureMap</a></li>
+<li><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame">WALProcedureMap.Entry</a></li>
+<li><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame">WALProcedureMap.EntryIterator</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame">WALProcedureStore</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html" title="interface in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame"><span class="interfaceName">WALProcedureStore.LeaseRecovery</span></a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal" target="classFrame">WALProcedureStore.PushType</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/devapidocs/allclasses-noframe.html b/devapidocs/allclasses-noframe.html
index f5d6c3b..071c11c 100644
--- a/devapidocs/allclasses-noframe.html
+++ b/devapidocs/allclasses-noframe.html
@@ -268,6 +268,7 @@
 <li><a href="org/apache/hadoop/hbase/filter/BinaryPrefixComparator.html" title="class in org.apache.hadoop.hbase.filter">BinaryPrefixComparator</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/BitComparator.html" title="class in org.apache.hadoop.hbase.filter">BitComparator</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter">BitComparator.BitwiseOp</a></li>
+<li><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile"><span class="interfaceName">BlockCache</span></a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/BlockCachesIterator.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCachesIterator</a></li>
@@ -1905,7 +1906,6 @@
 <li><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureStoreListener.html" title="interface in org.apache.hadoop.hbase.procedure2.store"><span class="interfaceName">ProcedureStore.ProcedureStoreListener</span></a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreBase.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreBase</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a></li>
-<li><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.DeleteState</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a></li>
 <li><a href="org/apache/hadoop/hbase/master/procedure/ProcedureSyncWait.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedureSyncWait</a></li>
@@ -1919,9 +1919,6 @@
 <li><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.InvalidWALDataException.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormat.InvalidWALDataException</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.Loader.html" title="interface in org.apache.hadoop.hbase.procedure2.store.wal"><span class="interfaceName">ProcedureWALFormat.Loader</span></a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader</a></li>
-<li><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></li>
-<li><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a></li>
-<li><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALPrettyPrinter</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/ProcedureYieldException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureYieldException</a></li>
 <li><a href="org/apache/hadoop/hbase/conf/PropagatingConfigurationObserver.html" title="interface in org.apache.hadoop.hbase.conf"><span class="interfaceName">PropagatingConfigurationObserver</span></a></li>
@@ -2953,6 +2950,9 @@
 <li><a href="org/apache/hadoop/hbase/mapreduce/WALPlayer.WALKeyValueMapper.html" title="class in org.apache.hadoop.hbase.mapreduce">WALPlayer.WALKeyValueMapper</a></li>
 <li><a href="org/apache/hadoop/hbase/mapreduce/WALPlayer.WALMapper.html" title="class in org.apache.hadoop.hbase.mapreduce">WALPlayer.WALMapper</a></li>
 <li><a href="org/apache/hadoop/hbase/wal/WALPrettyPrinter.html" title="class in org.apache.hadoop.hbase.wal">WALPrettyPrinter</a></li>
+<li><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap</a></li>
+<li><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></li>
+<li><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.EntryIterator</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html" title="interface in org.apache.hadoop.hbase.procedure2.store.wal"><span class="interfaceName">WALProcedureStore.LeaseRecovery</span></a></li>
 <li><a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 50b6f1e..199bd39 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3824,21 +3824,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>"Fri Oct  5 14:44:02 UTC 2018"</code></td>
+<td class="colLast"><code>"Sun Oct  7 14:43:35 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>"e42741e0858a59961ae0900b5ef073e16ef6126c"</code></td>
+<td class="colLast"><code>"118b0746849c886fc64b0a53014f3186e2db4d9d"</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>"a18bd10ed008a7354e8f6b089bfc87aa"</code></td>
+<td class="colLast"><code>"b7d588f335c5ff6e4fab5b0955be3c4a"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">
@@ -16956,7 +16956,7 @@
 <ul class="blockList">
 <li class="blockList">
 <table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
-<caption><span>org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></span><span class="tabEnd">&nbsp;</span></caption>
+<caption><span>org.apache.hadoop.hbase.procedure2.store.org.apache.hadoop.hbase.procedure2.store.BitSetNode</span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
 <th scope="col">Constant Field</th>
@@ -16964,31 +16964,31 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><a name="org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode.ADDRESS_BITS_PER_WORD">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.procedure2.store.BitSetNode.ADDRESS_BITS_PER_WORD">
 <!--   -->
 </a><code>private&nbsp;static&nbsp;final&nbsp;int</code></td>
-<td><code><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#ADDRESS_BITS_PER_WORD">ADDRESS_BITS_PER_WORD</a></code></td>
+<td><code><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#ADDRESS_BITS_PER_WORD">ADDRESS_BITS_PER_WORD</a></code></td>
 <td class="colLast"><code>6</code></td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a name="org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode.BITS_PER_WORD">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.procedure2.store.BitSetNode.BITS_PER_WORD">
 <!--   -->
 </a><code>private&nbsp;static&nbsp;final&nbsp;int</code></td>
-<td><code><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#BITS_PER_WORD">BITS_PER_WORD</a></code></td>
+<td><code><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#BITS_PER_WORD">BITS_PER_WORD</a></code></td>
 <td class="colLast"><code>64</code></td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a name="org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode.MAX_NODE_SIZE">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.procedure2.store.BitSetNode.MAX_NODE_SIZE">
 <!--   -->
 </a><code>private&nbsp;static&nbsp;final&nbsp;int</code></td>
-<td><code><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#MAX_NODE_SIZE">MAX_NODE_SIZE</a></code></td>
+<td><code><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#MAX_NODE_SIZE">MAX_NODE_SIZE</a></code></td>
 <td class="colLast"><code>64</code></td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a name="org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode.WORD_MASK">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.procedure2.store.BitSetNode.WORD_MASK">
 <!--   -->
 </a><code>private&nbsp;static&nbsp;final&nbsp;long</code></td>
-<td><code><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html#WORD_MASK">WORD_MASK</a></code></td>
+<td><code><a href="org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#WORD_MASK">WORD_MASK</a></code></td>
 <td class="colLast"><code>-1L</code></td>
 </tr>
 </tbody>
@@ -16998,6 +16998,25 @@
 <ul class="blockList">
 <li class="blockList">
 <table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
+<caption><span>org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/CorruptedWALProcedureStoreException.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">CorruptedWALProcedureStoreException</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th scope="col">Constant Field</th>
+<th class="colLast" scope="col">Value</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.procedure2.store.wal.CorruptedWALProcedureStoreException.serialVersionUID">
+<!--   -->
+</a><code>private&nbsp;static&nbsp;final&nbsp;long</code></td>
+<td><code><a href="org/apache/hadoop/hbase/procedure2/store/wal/CorruptedWALProcedureStoreException.html#serialVersionUID">serialVersionUID</a></code></td>
+<td class="colLast"><code>-3407300445435898074L</code></td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
 <caption><span>org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormat</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
@@ -17059,6 +17078,25 @@
 </li>
 <li class="blockList">
 <table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
+<caption><span>org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.InvalidWALDataException.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormat.InvalidWALDataException</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th scope="col">Constant Field</th>
+<th class="colLast" scope="col">Value</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormat.InvalidWALDataException.serialVersionUID">
+<!--   -->
+</a><code>private&nbsp;static&nbsp;final&nbsp;long</code></td>
+<td><code><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.InvalidWALDataException.html#serialVersionUID">serialVersionUID</a></code></td>
+<td class="colLast"><code>5471733223070202196L</code></td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
 <caption><span>org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>


[34/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html
index e91c2fc..003352a 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.171">WALProcedureStore.SyncMetrics</a>
+<pre>public static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.203">WALProcedureStore.SyncMetrics</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -233,7 +233,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>timestamp</h4>
-<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html#line.172">timestamp</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html#line.204">timestamp</a></pre>
 </li>
 </ul>
 <a name="syncWaitMs">
@@ -242,7 +242,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>syncWaitMs</h4>
-<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html#line.173">syncWaitMs</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html#line.205">syncWaitMs</a></pre>
 </li>
 </ul>
 <a name="totalSyncedBytes">
@@ -251,7 +251,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>totalSyncedBytes</h4>
-<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html#line.174">totalSyncedBytes</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html#line.206">totalSyncedBytes</a></pre>
 </li>
 </ul>
 <a name="syncedEntries">
@@ -260,7 +260,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>syncedEntries</h4>
-<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html#line.175">syncedEntries</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html#line.207">syncedEntries</a></pre>
 </li>
 </ul>
 <a name="syncedPerSec">
@@ -269,7 +269,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>syncedPerSec</h4>
-<pre>private&nbsp;float <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html#line.176">syncedPerSec</a></pre>
+<pre>private&nbsp;float <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html#line.208">syncedPerSec</a></pre>
 </li>
 </ul>
 </li>
@@ -286,7 +286,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SyncMetrics</h4>
-<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html#line.171">SyncMetrics</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html#line.203">SyncMetrics</a>()</pre>
 </li>
 </ul>
 </li>
@@ -303,7 +303,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTimestamp</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html#line.178">getTimestamp</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html#line.210">getTimestamp</a>()</pre>
 </li>
 </ul>
 <a name="getSyncWaitMs--">
@@ -312,7 +312,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getSyncWaitMs</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html#line.182">getSyncWaitMs</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html#line.214">getSyncWaitMs</a>()</pre>
 </li>
 </ul>
 <a name="getTotalSyncedBytes--">
@@ -321,7 +321,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalSyncedBytes</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html#line.186">getTotalSyncedBytes</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html#line.218">getTotalSyncedBytes</a>()</pre>
 </li>
 </ul>
 <a name="getSyncedEntries--">
@@ -330,7 +330,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getSyncedEntries</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html#line.190">getSyncedEntries</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html#line.222">getSyncedEntries</a>()</pre>
 </li>
 </ul>
 <a name="getSyncedPerSec--">
@@ -339,7 +339,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getSyncedPerSec</h4>
-<pre>public&nbsp;float&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html#line.194">getSyncedPerSec</a>()</pre>
+<pre>public&nbsp;float&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html#line.226">getSyncedPerSec</a>()</pre>
 </li>
 </ul>
 </li>


[40/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html
index dbe9dd6..3698107 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreBase.html" title="class in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" target="_top">Frames</a></li>
@@ -137,12 +137,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static class&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></span></code>
-<div class="block">A bitmap which can grow/merge with other <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store"><code>ProcedureStoreTracker.BitSetNode</code></a> (if certain conditions are met).</div>
-</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>static class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.DeleteState</a></span></code>&nbsp;</td>
 </tr>
 </table>
@@ -167,19 +161,19 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&gt;</code></td>
+<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#map">map</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#maxUpdatedProcId">maxUpdatedProcId</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#maxModifiedProcId">maxModifiedProcId</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#minUpdatedProcId">minUpdatedProcId</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#minModifiedProcId">minModifiedProcId</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private boolean</code></td>
+<td class="colFirst"><code>(package private) boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#partial">partial</a></span></code>
 <div class="block">If true, it means tracker has incomplete information about the active/deleted procedures.</div>
 </td>
@@ -217,17 +211,17 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#delete-long-">delete</a></span>(long&nbsp;procId)</code>&nbsp;</td>
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#delete-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">delete</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;node,
+      long&nbsp;procId)</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#delete-long:A-">delete</a></span>(long[]&nbsp;procIds)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#delete-long-">delete</a></span>(long&nbsp;procId)</code>&nbsp;</td>
 </tr>
 <tr id="i2" class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#delete-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">delete</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;node,
-      long&nbsp;procId)</code>&nbsp;</td>
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#delete-long:A-">delete</a></span>(long[]&nbsp;procIds)</code>&nbsp;</td>
 </tr>
 <tr id="i3" class="rowColor">
 <td class="colFirst"><code>void</code></td>
@@ -238,75 +232,75 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#getActiveMinProcId--">getActiveMinProcId</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i5" class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#getOrCreateNode-long-">getOrCreateNode</a></span>(long&nbsp;procId)</code>&nbsp;</td>
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#getModifiedMaxProcId--">getModifiedMaxProcId</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i6" class="altColor">
 <td class="colFirst"><code>long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#getUpdatedMaxProcId--">getUpdatedMaxProcId</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#getModifiedMinProcId--">getModifiedMinProcId</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i7" class="rowColor">
-<td class="colFirst"><code>long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#getUpdatedMinProcId--">getUpdatedMinProcId</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#getOrCreateNode-long-">getOrCreateNode</a></span>(long&nbsp;procId)</code>&nbsp;</td>
 </tr>
 <tr id="i8" class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#growNode-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">growNode</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;node,
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#growNode-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">growNode</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;node,
         long&nbsp;procId)</code>
 <div class="block">Grows <code>node</code> to contain <code>procId</code> and updates the map.</div>
 </td>
 </tr>
 <tr id="i9" class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#insert-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;node,
+      long&nbsp;procId)</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/procedure2/store/ProcedureStoreTracker.html#insert-long-">insert</a></span>(long&nbsp;procId)</code>&nbsp;</td>
 </tr>
-<tr id="i10" class="altColor">
+<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/procedure2/store/ProcedureStoreTracker.html#insert-long:A-">insert</a></span>(long[]&nbsp;procIds)</code>&nbsp;</td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#insert-long-long:A-">insert</a></span>(long&nbsp;procId,
       long[]&nbsp;subProcIds)</code>&nbsp;</td>
 </tr>
-<tr id="i12" class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#insert-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;node,
-      long&nbsp;procId)</code>&nbsp;</td>
-</tr>
 <tr id="i13" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#isAllModified--">isAllModified</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i14" class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.DeleteState</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#isDeleted-long-">isDeleted</a></span>(long&nbsp;procId)</code>
 <div class="block">If <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#partial"><code>partial</code></a> is false, returns state from the bitmap.</div>
 </td>
 </tr>
-<tr id="i14" class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#isEmpty--">isEmpty</a></span>()</code>&nbsp;</td>
-</tr>
 <tr id="i15" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#isPartial--">isPartial</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#isEmpty--">isEmpty</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i16" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#isUpdated--">isUpdated</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#isModified-long-">isModified</a></span>(long&nbsp;procId)</code>&nbsp;</td>
 </tr>
 <tr id="i17" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#isUpdated-long-">isUpdated</a></span>(long&nbsp;procId)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#isPartial--">isPartial</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i18" class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#lookupClosestNode-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">lookupClosestNode</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;node,
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#lookupClosestNode-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">lookupClosestNode</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;node,
                  long&nbsp;procId)</code>
 <div class="block">lookup the node containing the specified procId.</div>
 </td>
 </tr>
 <tr id="i19" class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#mergeNodes-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-">mergeNodes</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;leftNode,
-          <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;rightNode)</code>
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#mergeNodes-org.apache.hadoop.hbase.procedure2.store.BitSetNode-org.apache.hadoop.hbase.procedure2.store.BitSetNode-">mergeNodes</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;leftNode,
+          <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;rightNode)</code>
 <div class="block">Merges <code>leftNode</code> & <code>rightNode</code> and updates the map.</div>
 </td>
 </tr>
@@ -316,37 +310,47 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr id="i21" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#resetTo-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker-">resetTo</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker)</code>
-<div class="block">Resets internal state to same as given <code>tracker</code>.</div>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#resetModified--">resetModified</a></span>()</code>
+<div class="block">Clears the list of updated procedure ids.</div>
 </td>
 </tr>
 <tr id="i22" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#resetTo-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker-boolean-">resetTo</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker,
-       boolean&nbsp;resetDelete)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#resetTo-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker-">resetTo</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker)</code>
+<div class="block">Resets internal state to same as given <code>tracker</code>.</div>
+</td>
 </tr>
 <tr id="i23" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#resetToProto-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker-">resetToProto</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker&nbsp;trackerProtoBuf)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#resetTo-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker-boolean-">resetTo</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker,
+       boolean&nbsp;resetDelete)</code>
+<div class="block">Resets internal state to same as given <code>tracker</code>, and change the deleted flag according
+ to the modified flag if <code>resetDelete</code> is true.</div>
+</td>
 </tr>
 <tr id="i24" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#resetUpdates--">resetUpdates</a></span>()</code>
-<div class="block">Clears the list of updated procedure ids.</div>
-</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#resetToProto-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker-">resetToProto</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker&nbsp;trackerProtoBuf)</code>&nbsp;</td>
 </tr>
 <tr id="i25" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#setDeleted-long-boolean-">setDeleted</a></span>(long&nbsp;procId,
-          boolean&nbsp;isDeleted)</code>&nbsp;</td>
+          boolean&nbsp;isDeleted)</code>
+<div class="block">This method is used when restarting where we need to rebuild the ProcedureStoreTracker.</div>
+</td>
 </tr>
 <tr id="i26" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#setDeletedIfSet-long...-">setDeletedIfSet</a></span>(long...&nbsp;procId)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#setDeletedIfModified-long...-">setDeletedIfModified</a></span>(long...&nbsp;procId)</code>
+<div class="block">Set the given bit for the procId to delete if it was modified before.</div>
+</td>
 </tr>
 <tr id="i27" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#setDeletedIfSet-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker-">setDeletedIfSet</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#setDeletedIfModifiedInBoth-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker-">setDeletedIfModifiedInBoth</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker)</code>
+<div class="block">Similar with <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#setDeletedIfModified-long...-"><code>setDeletedIfModified(long...)</code></a>, but here the <code>procId</code> are given by
+ the <code>tracker</code>.</div>
+</td>
 </tr>
 <tr id="i28" class="altColor">
 <td class="colFirst"><code>void</code></td>
@@ -354,9 +358,16 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr id="i29" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#setPartialFlag-boolean-">setPartialFlag</a></span>(boolean&nbsp;isPartial)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#setMinMaxModifiedProcIds-long-long-">setMinMaxModifiedProcIds</a></span>(long&nbsp;min,
+                        long&nbsp;max)</code>
+<div class="block">Will be called when restarting where we need to rebuild the ProcedureStoreTracker.</div>
+</td>
 </tr>
 <tr id="i30" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#setPartialFlag-boolean-">setPartialFlag</a></span>(boolean&nbsp;isPartial)</code>&nbsp;</td>
+</tr>
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#toProto--">toProto</a></span>()</code>
 <div class="block">Builds
@@ -364,22 +375,18 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
  protocol buffer from current state.</div>
 </td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#trackProcIds-long-">trackProcIds</a></span>(long&nbsp;procId)</code>&nbsp;</td>
 </tr>
-<tr id="i32" class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#undeleteAll--">undeleteAll</a></span>()</code>&nbsp;</td>
-</tr>
 <tr id="i33" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#update-long-">update</a></span>(long&nbsp;procId)</code>&nbsp;</td>
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#update-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">update</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;node,
+      long&nbsp;procId)</code>&nbsp;</td>
 </tr>
 <tr id="i34" class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#update-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">update</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;node,
-      long&nbsp;procId)</code>&nbsp;</td>
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#update-long-">update</a></span>(long&nbsp;procId)</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -409,7 +416,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>map</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.41">map</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html?is-external=true" title="class or interface in java.util">TreeMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.41">map</a></pre>
 </li>
 </ul>
 <a name="keepDeletes">
@@ -432,28 +439,28 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>partial</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.56">partial</a></pre>
+<pre>boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.56">partial</a></pre>
 <div class="block">If true, it means tracker has incomplete information about the active/deleted procedures.
  It's set to true only when recovering from old logs. See <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#isDeleted-long-"><code>isDeleted(long)</code></a> docs to
  understand it's real use.</div>
 </li>
 </ul>
-<a name="minUpdatedProcId">
+<a name="minModifiedProcId">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>minUpdatedProcId</h4>
-<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.58">minUpdatedProcId</a></pre>
+<h4>minModifiedProcId</h4>
+<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.58">minModifiedProcId</a></pre>
 </li>
 </ul>
-<a name="maxUpdatedProcId">
+<a name="maxModifiedProcId">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>maxUpdatedProcId</h4>
-<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.59">maxUpdatedProcId</a></pre>
+<h4>maxModifiedProcId</h4>
+<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.59">maxModifiedProcId</a></pre>
 </li>
 </ul>
 </li>
@@ -487,7 +494,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>resetToProto</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.432">resetToProto</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker&nbsp;trackerProtoBuf)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.63">resetToProto</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker&nbsp;trackerProtoBuf)</pre>
 </li>
 </ul>
 <a name="resetTo-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker-">
@@ -496,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>resetTo</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.443">resetTo</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.74">resetTo</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker)</pre>
 <div class="block">Resets internal state to same as given <code>tracker</code>. Does deep copy of the bitmap.</div>
 </li>
 </ul>
@@ -506,8 +513,14 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>resetTo</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.447">resetTo</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.86">resetTo</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker,
                     boolean&nbsp;resetDelete)</pre>
+<div class="block">Resets internal state to same as given <code>tracker</code>, and change the deleted flag according
+ to the modified flag if <code>resetDelete</code> is true. Does deep copy of the bitmap.
+ <p/>
+ The <code>resetDelete</code> will be set to true when building cleanup tracker, please see the
+ comments in <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#BitSetNode-org.apache.hadoop.hbase.procedure2.store.BitSetNode-boolean-"><code>BitSetNode.BitSetNode(BitSetNode, boolean)</code></a> to learn how we change the
+ deleted flag if <code>resetDelete</code> is true.</div>
 </li>
 </ul>
 <a name="insert-long-">
@@ -516,7 +529,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>insert</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.457">insert</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.97">insert</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="insert-long:A-">
@@ -525,7 +538,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>insert</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.461">insert</a>(long[]&nbsp;procIds)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.101">insert</a>(long[]&nbsp;procIds)</pre>
 </li>
 </ul>
 <a name="insert-long-long:A-">
@@ -534,18 +547,18 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>insert</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.467">insert</a>(long&nbsp;procId,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.107">insert</a>(long&nbsp;procId,
                    long[]&nbsp;subProcIds)</pre>
 </li>
 </ul>
-<a name="insert-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">
+<a name="insert-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>insert</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.475">insert</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;node,
-                                                long&nbsp;procId)</pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.114">insert</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;node,
+                          long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="update-long-">
@@ -554,17 +567,17 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>update</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.484">update</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.123">update</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
-<a name="update-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">
+<a name="update-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>update</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.488">update</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;node,
-                                                long&nbsp;procId)</pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.127">update</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;node,
+                          long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="delete-long-">
@@ -573,7 +586,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.497">delete</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.136">delete</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="delete-long:A-">
@@ -582,17 +595,28 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.501">delete</a>(long[]&nbsp;procIds)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.140">delete</a>(long[]&nbsp;procIds)</pre>
 </li>
 </ul>
-<a name="delete-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">
+<a name="delete-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.509">delete</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;node,
-                                                long&nbsp;procId)</pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.148">delete</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;node,
+                          long&nbsp;procId)</pre>
+</li>
+</ul>
+<a name="setMinMaxModifiedProcIds-long-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setMinMaxModifiedProcIds</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.165">setMinMaxModifiedProcIds</a>(long&nbsp;min,
+                                     long&nbsp;max)</pre>
+<div class="block">Will be called when restarting where we need to rebuild the ProcedureStoreTracker.</div>
 </li>
 </ul>
 <a name="setDeleted-long-boolean-">
@@ -601,37 +625,51 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setDeleted</h4>
-<pre>@InterfaceAudience.Private
-public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.524">setDeleted</a>(long&nbsp;procId,
-                                                  boolean&nbsp;isDeleted)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.174">setDeleted</a>(long&nbsp;procId,
+                       boolean&nbsp;isDeleted)</pre>
+<div class="block">This method is used when restarting where we need to rebuild the ProcedureStoreTracker. The
+ <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#delete-long-"><code>delete(long)</code></a> method above assume that the <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store"><code>BitSetNode</code></a> exists, but when restart
+ this is not true, as we will read the wal files in reverse order so a delete may come first.</div>
 </li>
 </ul>
-<a name="setDeletedIfSet-long...-">
+<a name="setDeletedIfModified-long...-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setDeletedIfSet</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.531">setDeletedIfSet</a>(long...&nbsp;procId)</pre>
+<h4>setDeletedIfModified</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.188">setDeletedIfModified</a>(long...&nbsp;procId)</pre>
+<div class="block">Set the given bit for the procId to delete if it was modified before.
+ <p/>
+ This method is used to test whether a procedure wal file can be safely deleted, as if all the
+ procedures in the given procedure wal file has been modified in the new procedure wal files,
+ then we can delete it.</div>
 </li>
 </ul>
-<a name="setDeletedIfSet-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker-">
+<a name="setDeletedIfModifiedInBoth-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setDeletedIfSet</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.541">setDeletedIfSet</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker)</pre>
+<h4>setDeletedIfModifiedInBoth</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.204">setDeletedIfModifiedInBoth</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker)</pre>
+<div class="block">Similar with <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#setDeletedIfModified-long...-"><code>setDeletedIfModified(long...)</code></a>, but here the <code>procId</code> are given by
+ the <code>tracker</code>. If a procedure is modified by us, and also by the given <code>tracker</code>,
+ then we mark it as deleted.</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#setDeletedIfModified-long...-"><code>setDeletedIfModified(long...)</code></a></dd>
+</dl>
 </li>
 </ul>
-<a name="lookupClosestNode-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">
+<a name="lookupClosestNode-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>lookupClosestNode</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.564">lookupClosestNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;node,
-                                                           long&nbsp;procId)</pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.230">lookupClosestNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;node,
+                                     long&nbsp;procId)</pre>
 <div class="block">lookup the node containing the specified procId.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -648,25 +686,25 @@ public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>trackProcIds</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.570">trackProcIds</a>(long&nbsp;procId)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.236">trackProcIds</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
-<a name="getUpdatedMinProcId--">
+<a name="getModifiedMinProcId--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getUpdatedMinProcId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.575">getUpdatedMinProcId</a>()</pre>
+<h4>getModifiedMinProcId</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.241">getModifiedMinProcId</a>()</pre>
 </li>
 </ul>
-<a name="getUpdatedMaxProcId--">
+<a name="getModifiedMaxProcId--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getUpdatedMaxProcId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.579">getUpdatedMaxProcId</a>()</pre>
+<h4>getModifiedMaxProcId</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.245">getModifiedMaxProcId</a>()</pre>
 </li>
 </ul>
 <a name="reset--">
@@ -675,16 +713,16 @@ public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>reset</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.583">reset</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.249">reset</a>()</pre>
 </li>
 </ul>
-<a name="isUpdated-long-">
+<a name="isModified-long-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>isUpdated</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.590">isUpdated</a>(long&nbsp;procId)</pre>
+<h4>isModified</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.256">isModified</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="isDeleted-long-">
@@ -693,7 +731,7 @@ public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>isDeleted</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.DeleteState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.602">isDeleted</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.DeleteState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.269">isDeleted</a>(long&nbsp;procId)</pre>
 <div class="block">If <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#partial"><code>partial</code></a> is false, returns state from the bitmap. If no state is found for
  <code>procId</code>, returns YES.
  If partial is true, tracker doesn't have complete view of system state, so it returns MAYBE
@@ -707,7 +745,7 @@ public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getActiveMinProcId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.612">getActiveMinProcId</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.279">getActiveMinProcId</a>()</pre>
 </li>
 </ul>
 <a name="setKeepDeletes-boolean-">
@@ -716,7 +754,7 @@ public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>setKeepDeletes</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.618">setKeepDeletes</a>(boolean&nbsp;keepDeletes)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.285">setKeepDeletes</a>(boolean&nbsp;keepDeletes)</pre>
 </li>
 </ul>
 <a name="isPartial--">
@@ -725,7 +763,7 @@ public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>isPartial</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.633">isPartial</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.300">isPartial</a>()</pre>
 </li>
 </ul>
 <a name="setPartialFlag-boolean-">
@@ -734,7 +772,7 @@ public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>setPartialFlag</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.637">setPartialFlag</a>(boolean&nbsp;isPartial)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.304">setPartialFlag</a>(boolean&nbsp;isPartial)</pre>
 </li>
 </ul>
 <a name="isEmpty--">
@@ -743,78 +781,70 @@ public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>isEmpty</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.649">isEmpty</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.316">isEmpty</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true, if no procedure is active, else false.</dd>
 </dl>
 </li>
 </ul>
-<a name="isUpdated--">
+<a name="isAllModified--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>isUpdated</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.661">isUpdated</a>()</pre>
+<h4>isAllModified</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.329">isAllModified</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>true if any procedure was updated since last call to <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#resetUpdates--"><code>resetUpdates()</code></a>.</dd>
+<dd>true if all procedure was modified or deleted since last call to
+         <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#resetModified--"><code>resetModified()</code></a>.</dd>
 </dl>
 </li>
 </ul>
-<a name="resetUpdates--">
+<a name="resetModified--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>resetUpdates</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.674">resetUpdates</a>()</pre>
+<h4>resetModified</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.342">resetModified</a>()</pre>
 <div class="block">Clears the list of updated procedure ids. This doesn't affect global list of active
  procedure ids.</div>
 </li>
 </ul>
-<a name="undeleteAll--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>undeleteAll</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.682">undeleteAll</a>()</pre>
-</li>
-</ul>
 <a name="getOrCreateNode-long-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getOrCreateNode</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.688">getOrCreateNode</a>(long&nbsp;procId)</pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.350">getOrCreateNode</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
-<a name="growNode-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-long-">
+<a name="growNode-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>growNode</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.744">growNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;node,
-                                                  long&nbsp;procId)</pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.406">growNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;node,
+                            long&nbsp;procId)</pre>
 <div class="block">Grows <code>node</code> to contain <code>procId</code> and updates the map.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store"><code>ProcedureStoreTracker.BitSetNode</code></a> instance which contains <code>procId</code>.</dd>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store"><code>BitSetNode</code></a> instance which contains <code>procId</code>.</dd>
 </dl>
 </li>
 </ul>
-<a name="mergeNodes-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.BitSetNode-">
+<a name="mergeNodes-org.apache.hadoop.hbase.procedure2.store.BitSetNode-org.apache.hadoop.hbase.procedure2.store.BitSetNode-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>mergeNodes</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.754">mergeNodes</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;leftNode,
-                                                    <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.BitSetNode</a>&nbsp;rightNode)</pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.416">mergeNodes</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;leftNode,
+                              <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;rightNode)</pre>
 <div class="block">Merges <code>leftNode</code> & <code>rightNode</code> and updates the map.</div>
 </li>
 </ul>
@@ -824,7 +854,7 @@ public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>dump</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.761">dump</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.423">dump</a>()</pre>
 </li>
 </ul>
 <a name="toProto--">
@@ -833,7 +863,7 @@ public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toProto</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.779">toProto</a>()
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.441">toProto</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">Builds
  org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureStoreTracker
@@ -873,7 +903,7 @@ public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbas
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreBase.html" title="class in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" target="_top">Frames</a></li>


[42/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html
new file mode 100644
index 0000000..6a58652
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html
@@ -0,0 +1,811 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>BitSetNode (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="BitSetNode (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":9,"i1":9,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/BitSetNode.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev&nbsp;Class</li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" target="_top">Frames</a></li>
+<li><a href="BitSetNode.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.procedure2.store</div>
+<h2 title="Class BitSetNode" class="title">Class BitSetNode</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.procedure2.store.BitSetNode</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>@InterfaceAudience.Private
+class <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.53">BitSetNode</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">A bitmap which can grow/merge with other <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store"><code>BitSetNode</code></a> (if certain conditions are met).
+ Boundaries of bitmap are aligned to multiples of <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#BITS_PER_WORD"><code>BITS_PER_WORD</code></a>. So the range
+ of a <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store"><code>BitSetNode</code></a> is from [x * K, y * K) where x and y are integers, y > x and K is
+ BITS_PER_WORD.
+ <p/>
+ We have two main bit sets to describe the state of procedures, the meanings are:
+
+ <pre>
+  ----------------------
+ | modified | deleted |  meaning
+ |     0    |   0     |  proc exists, but hasn't been updated since last resetUpdates().
+ |     1    |   0     |  proc was updated (but not deleted).
+ |     1    |   1     |  proc was deleted.
+ |     0    |   1     |  proc doesn't exist (maybe never created, maybe deleted in past).
+ ----------------------
+ </pre>
+
+ The meaning of modified is that, we have modified the state of the procedure, no matter insert,
+ update, or delete. And if it is an insert or update, we will set the deleted to 0, if not we will
+ set the delete to 1.
+ <p/>
+ For a non-partial BitSetNode, the initial modified value is 0 and deleted value is 1. For the
+ partial one, the initial modified value is 0 and the initial deleted value is also 0. In
+ <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#unsetPartialFlag--"><code>unsetPartialFlag()</code></a> we will reset the deleted to 1 if it is not modified.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#ADDRESS_BITS_PER_WORD">ADDRESS_BITS_PER_WORD</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#BITS_PER_WORD">BITS_PER_WORD</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private long[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#deleted">deleted</a></span></code>
+<div class="block">Keeps track of procedure ids which belong to this bitmap's range and have been deleted.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#MAX_NODE_SIZE">MAX_NODE_SIZE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private long[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#modified">modified</a></span></code>
+<div class="block">Set of procedures which have been modified since last <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#resetModified--"><code>resetModified()</code></a>.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#partial">partial</a></span></code>
+<div class="block">Mimics <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#partial"><code>ProcedureStoreTracker.partial</code></a>.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#start">start</a></span></code>
+<div class="block">Offset of bitmap i.e.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#WORD_MASK">WORD_MASK</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#BitSetNode-org.apache.hadoop.hbase.procedure2.store.BitSetNode-boolean-">BitSetNode</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;other,
+          boolean&nbsp;resetDelete)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#BitSetNode-long-boolean-">BitSetNode</a></span>(long&nbsp;procId,
+          boolean&nbsp;partial)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#BitSetNode-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode-">BitSetNode</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode&nbsp;data)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>private static long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#alignDown-long-">alignDown</a></span>(long&nbsp;x)</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>private static long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#alignUp-long-">alignUp</a></span>(long&nbsp;x)</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#canGrow-long-">canGrow</a></span>(long&nbsp;procId)</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#canMerge-org.apache.hadoop.hbase.procedure2.store.BitSetNode-">canMerge</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;rightNode)</code>&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#contains-long-">contains</a></span>(long&nbsp;procId)</code>&nbsp;</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#convert--">convert</a></span>()</code>
+<div class="block">Convert to
+ org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode
+ protobuf.</div>
+</td>
+</tr>
+<tr id="i6" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#delete-long-">delete</a></span>(long&nbsp;procId)</code>&nbsp;</td>
+</tr>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#dump--">dump</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i8" class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#getActiveMaxProcId--">getActiveMaxProcId</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i9" class="rowColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#getActiveMinProcId--">getActiveMinProcId</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i10" class="altColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#getBitmapIndex-long-">getBitmapIndex</a></span>(long&nbsp;procId)</code>&nbsp;</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/procedure2/store/BitSetNode.html#getEnd--">getEnd</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i12" class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#getStart--">getStart</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i13" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#grow-long-">grow</a></span>(long&nbsp;procId)</code>&nbsp;</td>
+</tr>
+<tr id="i14" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#insertOrUpdate-long-">insertOrUpdate</a></span>(long&nbsp;procId)</code>&nbsp;</td>
+</tr>
+<tr id="i15" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#isAllModified--">isAllModified</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i16" class="altColor">
+<td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.DeleteState</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#isDeleted-long-">isDeleted</a></span>(long&nbsp;procId)</code>&nbsp;</td>
+</tr>
+<tr id="i17" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#isEmpty--">isEmpty</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i18" class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#isModified-long-">isModified</a></span>(long&nbsp;procId)</code>&nbsp;</td>
+</tr>
+<tr id="i19" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#merge-org.apache.hadoop.hbase.procedure2.store.BitSetNode-">merge</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;rightNode)</code>&nbsp;</td>
+</tr>
+<tr id="i20" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#resetModified--">resetModified</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i21" 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/procedure2/store/BitSetNode.html#toString--">toString</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i22" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#unsetPartialFlag--">unsetPartialFlag</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i23" class="rowColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#updateState-long-boolean-">updateState</a></span>(long&nbsp;procId,
+           boolean&nbsp;isDeleted)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="WORD_MASK">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>WORD_MASK</h4>
+<pre>private static final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.54">WORD_MASK</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.BitSetNode.WORD_MASK">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="ADDRESS_BITS_PER_WORD">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>ADDRESS_BITS_PER_WORD</h4>
+<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.55">ADDRESS_BITS_PER_WORD</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.BitSetNode.ADDRESS_BITS_PER_WORD">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="BITS_PER_WORD">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>BITS_PER_WORD</h4>
+<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.56">BITS_PER_WORD</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.BitSetNode.BITS_PER_WORD">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="MAX_NODE_SIZE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>MAX_NODE_SIZE</h4>
+<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.57">MAX_NODE_SIZE</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.BitSetNode.MAX_NODE_SIZE">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="partial">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>partial</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.63">partial</a></pre>
+<div class="block">Mimics <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#partial"><code>ProcedureStoreTracker.partial</code></a>. It will effect how we fill the new deleted bits
+ when growing.</div>
+</li>
+</ul>
+<a name="modified">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>modified</h4>
+<pre>private&nbsp;long[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.69">modified</a></pre>
+<div class="block">Set of procedures which have been modified since last <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#resetModified--"><code>resetModified()</code></a>. Useful to track
+ procedures which have been modified since last WAL write.</div>
+</li>
+</ul>
+<a name="deleted">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>deleted</h4>
+<pre>private&nbsp;long[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.75">deleted</a></pre>
+<div class="block">Keeps track of procedure ids which belong to this bitmap's range and have been deleted. This
+ represents global state since it's not reset on WAL rolls.</div>
+</li>
+</ul>
+<a name="start">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>start</h4>
+<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.79">start</a></pre>
+<div class="block">Offset of bitmap i.e. procedure id corresponding to first bit.</div>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="BitSetNode-long-boolean-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>BitSetNode</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.102">BitSetNode</a>(long&nbsp;procId,
+                  boolean&nbsp;partial)</pre>
+</li>
+</ul>
+<a name="BitSetNode-org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>BitSetNode</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.116">BitSetNode</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode&nbsp;data)</pre>
+</li>
+</ul>
+<a name="BitSetNode-org.apache.hadoop.hbase.procedure2.store.BitSetNode-boolean-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>BitSetNode</h4>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.129">BitSetNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;other,
+                  boolean&nbsp;resetDelete)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="dump--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>dump</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.81">dump</a>()</pre>
+</li>
+</ul>
+<a name="insertOrUpdate-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>insertOrUpdate</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.148">insertOrUpdate</a>(long&nbsp;procId)</pre>
+</li>
+</ul>
+<a name="delete-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>delete</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.152">delete</a>(long&nbsp;procId)</pre>
+</li>
+</ul>
+<a name="getStart--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getStart</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.156">getStart</a>()</pre>
+</li>
+</ul>
+<a name="getEnd--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getEnd</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.160">getEnd</a>()</pre>
+</li>
+</ul>
+<a name="contains-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>contains</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.164">contains</a>(long&nbsp;procId)</pre>
+</li>
+</ul>
+<a name="isDeleted-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isDeleted</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker.DeleteState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.168">isDeleted</a>(long&nbsp;procId)</pre>
+</li>
+</ul>
+<a name="isModified-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isModified</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.177">isModified</a>(long&nbsp;procId)</pre>
+</li>
+</ul>
+<a name="isAllModified--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isAllModified</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.189">isAllModified</a>()</pre>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true, if all the procedures has been modified.</dd>
+</dl>
+</li>
+</ul>
+<a name="isEmpty--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isEmpty</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.202">isEmpty</a>()</pre>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true, if there are no active procedures in this BitSetNode, else false.</dd>
+</dl>
+</li>
+</ul>
+<a name="resetModified--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>resetModified</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.212">resetModified</a>()</pre>
+</li>
+</ul>
+<a name="unsetPartialFlag--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>unsetPartialFlag</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.216">unsetPartialFlag</a>()</pre>
+</li>
+</ul>
+<a name="convert--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>convert</h4>
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.232">convert</a>()</pre>
+<div class="block">Convert to
+ org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureStoreTracker.TrackerNode
+ protobuf.</div>
+</li>
+</ul>
+<a name="canGrow-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>canGrow</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.246">canGrow</a>(long&nbsp;procId)</pre>
+</li>
+</ul>
+<a name="canMerge-org.apache.hadoop.hbase.procedure2.store.BitSetNode-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>canMerge</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.250">canMerge</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;rightNode)</pre>
+</li>
+</ul>
+<a name="grow-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>grow</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.256">grow</a>(long&nbsp;procId)</pre>
+</li>
+</ul>
+<a name="merge-org.apache.hadoop.hbase.procedure2.store.BitSetNode-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>merge</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.290">merge</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store">BitSetNode</a>&nbsp;rightNode)</pre>
+</li>
+</ul>
+<a name="toString--">
+<!--   -->
+</a>
+<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/store/BitSetNode.html#line.315">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/Object.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/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="getActiveMinProcId--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getActiveMinProcId</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.322">getActiveMinProcId</a>()</pre>
+</li>
+</ul>
+<a name="getActiveMaxProcId--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getActiveMaxProcId</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.342">getActiveMaxProcId</a>()</pre>
+</li>
+</ul>
+<a name="getBitmapIndex-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getBitmapIndex</h4>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.364">getBitmapIndex</a>(long&nbsp;procId)</pre>
+</li>
+</ul>
+<a name="updateState-long-boolean-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>updateState</h4>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.368">updateState</a>(long&nbsp;procId,
+                 boolean&nbsp;isDeleted)</pre>
+</li>
+</ul>
+<a name="alignUp-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>alignUp</h4>
+<pre>private static&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.387">alignUp</a>(long&nbsp;x)</pre>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>upper boundary (aligned to multiple of BITS_PER_WORD) of bitmap range x belongs to.</dd>
+</dl>
+</li>
+</ul>
+<a name="alignDown-long-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>alignDown</h4>
+<pre>private static&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/BitSetNode.html#line.394">alignDown</a>(long&nbsp;x)</pre>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>lower boundary (aligned to multiple of BITS_PER_WORD) of bitmap range x belongs to.</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/BitSetNode.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev&nbsp;Class</li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" target="_top">Frames</a></li>
+<li><a href="BitSetNode.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html
index e41aa94..3b50716 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li>Prev&nbsp;Class</li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -119,7 +119,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.30">NoopProcedureStore</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.29">NoopProcedureStore</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreBase.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreBase</a></pre>
 <div class="block">An In-Memory store that does not keep track of the procedures inserted.</div>
 </li>
@@ -209,7 +209,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/Proc
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#delete-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">delete</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#delete-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">delete</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
       long[]&nbsp;subprocs)</code>
 <div class="block">The parent procedure completed.</div>
 </td>
@@ -220,14 +220,14 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/Proc
 </tr>
 <tr id="i4" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;proc)</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;proc)</code>
 <div class="block">Serialize a set of new procedures.</div>
 </td>
 </tr>
 <tr id="i5" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
-      <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+      <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;subprocs)</code>
 <div class="block">When a procedure is submitted to the executor insert(proc, null) will be called.</div>
 </td>
 </tr>
@@ -263,7 +263,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/Proc
 </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/procedure2/store/NoopProcedureStore.html#update-org.apache.hadoop.hbase.procedure2.Procedure-">update</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#update-org.apache.hadoop.hbase.procedure2.Procedure-">update</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc)</code>
 <div class="block">The specified procedure was executed,
  and the new state should be written to the store.</div>
 </td>
@@ -303,7 +303,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/Proc
 <ul class="blockListLast">
 <li class="blockList">
 <h4>numThreads</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.31">numThreads</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.30">numThreads</a></pre>
 </li>
 </ul>
 </li>
@@ -320,7 +320,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/Proc
 <ul class="blockListLast">
 <li class="blockList">
 <h4>NoopProcedureStore</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.30">NoopProcedureStore</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.29">NoopProcedureStore</a>()</pre>
 </li>
 </ul>
 </li>
@@ -337,7 +337,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/Proc
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.34">start</a>(int&nbsp;numThreads)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.33">start</a>(int&nbsp;numThreads)
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#start-int-">ProcedureStore</a></code></span></div>
 <div class="block">Start/Open the procedure store</div>
@@ -353,7 +353,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/Proc
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.42">stop</a>(boolean&nbsp;abort)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.41">stop</a>(boolean&nbsp;abort)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#stop-boolean-">ProcedureStore</a></code></span></div>
 <div class="block">Stop/Close the procedure store</div>
 <dl>
@@ -368,7 +368,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/Proc
 <ul class="blockList">
 <li class="blockList">
 <h4>recoverLease</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.47">recoverLease</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.46">recoverLease</a>()
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#recoverLease--">ProcedureStore</a></code></span></div>
 <div class="block">Acquire the lease for the procedure store.</div>
@@ -384,7 +384,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/Proc
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumThreads</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.52">getNumThreads</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.51">getNumThreads</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the number of threads/slots passed to start()</dd>
@@ -397,7 +397,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/Proc
 <ul class="blockList">
 <li class="blockList">
 <h4>setRunningProcedureCount</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.57">setRunningProcedureCount</a>(int&nbsp;count)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.56">setRunningProcedureCount</a>(int&nbsp;count)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#setRunningProcedureCount-int-">ProcedureStore</a></code></span></div>
 <div class="block">Set the number of procedure running.
  This can be used, for example, by the store to know how long to wait before a sync.</div>
@@ -413,7 +413,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/Proc
 <ul class="blockList">
 <li class="blockList">
 <h4>load</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.62">load</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureLoader</a>&nbsp;loader)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.61">load</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureLoader</a>&nbsp;loader)
           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#load-org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureLoader-">ProcedureStore</a></code></span></div>
 <div class="block">Load the Procedures in the store.</div>
@@ -431,8 +431,8 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/Proc
 <ul class="blockList">
 <li class="blockList">
 <h4>insert</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.67">insert</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
-                   <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.66">insert</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+                   <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;subprocs)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">ProcedureStore</a></code></span></div>
 <div class="block">When a procedure is submitted to the executor insert(proc, null) will be called.
  'proc' has a 'RUNNABLE' state and the initial information required to start up.
@@ -453,7 +453,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/Proc
 <ul class="blockList">
 <li class="blockList">
 <h4>insert</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.72">insert</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;proc)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.71">insert</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;proc)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure:A-">ProcedureStore</a></code></span></div>
 <div class="block">Serialize a set of new procedures.
  These procedures are freshly submitted to the executor and each procedure
@@ -470,7 +470,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/Proc
 <ul class="blockList">
 <li class="blockList">
 <h4>update</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.77">update</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.76">update</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#update-org.apache.hadoop.hbase.procedure2.Procedure-">ProcedureStore</a></code></span></div>
 <div class="block">The specified procedure was executed,
  and the new state should be written to the store.</div>
@@ -486,7 +486,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/Proc
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.82">delete</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.81">delete</a>(long&nbsp;procId)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#delete-long-">ProcedureStore</a></code></span></div>
 <div class="block">The specified procId was removed from the executor,
  due to completion, abort or failure.
@@ -503,7 +503,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/Proc
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.87">delete</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.86">delete</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
                    long[]&nbsp;subprocs)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#delete-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">ProcedureStore</a></code></span></div>
 <div class="block">The parent procedure completed.
@@ -521,7 +521,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/Proc
 <ul class="blockListLast">
 <li class="blockList">
 <h4>delete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.92">delete</a>(long[]&nbsp;procIds,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/NoopProcedureStore.html#line.91">delete</a>(long[]&nbsp;procIds,
                    int&nbsp;offset,
                    int&nbsp;count)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#delete-long:A-int-int-">ProcedureStore</a></code></span></div>
@@ -564,7 +564,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/Proc
 </div>
 <div class="subNav">
 <ul class="navList">
-<li>Prev&nbsp;Class</li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/BitSetNode.html" title="class in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html
index 0bae96b..00cf7f6 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html
@@ -101,7 +101,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <dl>
 <dt>All Known Implementing Classes:</dt>
-<dd><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a></dd>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.EntryIterator</a></dd>
 </dl>
 <dl>
 <dt>Enclosing interface:</dt>
@@ -227,7 +227,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>next</h4>
-<pre><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#line.84">next</a>()
+<pre><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#line.85">next</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">Returns the next procedure in the iteration.</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html
index ac417bd..1464316 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.90">ProcedureStore.ProcedureLoader</a></pre>
+<pre>public static interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.91">ProcedureStore.ProcedureLoader</a></pre>
 <div class="block">Interface passed to the ProcedureStore.load() method to handle the store-load events.</div>
 </li>
 </ul>
@@ -169,7 +169,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>setMaxProcId</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html#line.95">setMaxProcId</a>(long&nbsp;maxProcId)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html#line.96">setMaxProcId</a>(long&nbsp;maxProcId)</pre>
 <div class="block">Called by ProcedureStore.load() to notify about the maximum proc-id in the store.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -183,7 +183,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>load</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html#line.102">load</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a>&nbsp;procIter)
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html#line.103">load</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a>&nbsp;procIter)
    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">Called by the ProcedureStore.load() every time a set of procedures are ready to be executed.
  The ProcedureIterator passed to the method, has the procedure sorted in replay-order.</div>
@@ -201,7 +201,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>handleCorrupted</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html#line.109">handleCorrupted</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a>&nbsp;procIter)
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html#line.110">handleCorrupted</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a>&nbsp;procIter)
               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">Called by the ProcedureStore.load() in case we have procedures not-ready to be added to
  the executor, which probably means they are corrupted since some information/link is missing.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html
index 6bb5314..738a2dc 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html
@@ -180,7 +180,7 @@ public interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/pro
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#delete-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">delete</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;parentProc,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#delete-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">delete</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;parentProc,
       long[]&nbsp;subProcIds)</code>
 <div class="block">The parent procedure completed.</div>
 </td>
@@ -191,14 +191,14 @@ public interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/pro
 </tr>
 <tr id="i4" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;procs)</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;procs)</code>
 <div class="block">Serialize a set of new procedures.</div>
 </td>
 </tr>
 <tr id="i5" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
-      <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+      <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;subprocs)</code>
 <div class="block">When a procedure is submitted to the executor insert(proc, null) will be called.</div>
 </td>
 </tr>
@@ -250,7 +250,7 @@ public interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/pro
 </tr>
 <tr id="i14" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#update-org.apache.hadoop.hbase.procedure2.Procedure-">update</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#update-org.apache.hadoop.hbase.procedure2.Procedure-">update</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc)</code>
 <div class="block">The specified procedure was executed,
  and the new state should be written to the store.</div>
 </td>
@@ -276,7 +276,7 @@ public interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/pro
 <ul class="blockList">
 <li class="blockList">
 <h4>registerListener</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.116">registerListener</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureStoreListener.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureStoreListener</a>&nbsp;listener)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.117">registerListener</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureStoreListener.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureStoreListener</a>&nbsp;listener)</pre>
 <div class="block">Add the listener to the notification list.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -290,7 +290,7 @@ public interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/pro
 <ul class="blockList">
 <li class="blockList">
 <h4>unregisterListener</h4>
-<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.123">unregisterListener</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureStoreListener.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureStoreListener</a>&nbsp;listener)</pre>
+<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.124">unregisterListener</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureStoreListener.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureStoreListener</a>&nbsp;listener)</pre>
 <div class="block">Remove the listener from the notification list.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -306,7 +306,7 @@ public interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/pro
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.129">start</a>(int&nbsp;numThreads)
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.130">start</a>(int&nbsp;numThreads)
     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Start/Open the procedure store</div>
 <dl>
@@ -323,7 +323,7 @@ public interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/pro
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.135">stop</a>(boolean&nbsp;abort)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.136">stop</a>(boolean&nbsp;abort)</pre>
 <div class="block">Stop/Close the procedure store</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -337,7 +337,7 @@ public interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/pro
 <ul class="blockList">
 <li class="blockList">
 <h4>isRunning</h4>
-<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.140">isRunning</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.141">isRunning</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if the store is running, otherwise false.</dd>
@@ -350,7 +350,7 @@ public interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/pro
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumThreads</h4>
-<pre>int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.145">getNumThreads</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.146">getNumThreads</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the number of threads/slots passed to start()</dd>
@@ -363,7 +363,7 @@ public interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/pro
 <ul class="blockList">
 <li class="blockList">
 <h4>setRunningProcedureCount</h4>
-<pre>int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.152">setRunningProcedureCount</a>(int&nbsp;count)</pre>
+<pre>int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.153">setRunningProcedureCount</a>(int&nbsp;count)</pre>
 <div class="block">Set the number of procedure running.
  This can be used, for example, by the store to know how long to wait before a sync.</div>
 <dl>
@@ -378,7 +378,7 @@ public interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/pro
 <ul class="blockList">
 <li class="blockList">
 <h4>recoverLease</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.157">recoverLease</a>()
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.158">recoverLease</a>()
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Acquire the lease for the procedure store.</div>
 <dl>
@@ -393,7 +393,7 @@ public interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/pro
 <ul class="blockList">
 <li class="blockList">
 <h4>load</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.163">load</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureLoader</a>&nbsp;loader)
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.164">load</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureLoader</a>&nbsp;loader)
    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Load the Procedures in the store.</div>
 <dl>
@@ -410,8 +410,8 @@ public interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/pro
 <ul class="blockList">
 <li class="blockList">
 <h4>insert</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.176">insert</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
-            <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.177">insert</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+            <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;subprocs)</pre>
 <div class="block">When a procedure is submitted to the executor insert(proc, null) will be called.
  'proc' has a 'RUNNABLE' state and the initial information required to start up.
 
@@ -431,7 +431,7 @@ public interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/pro
 <ul class="blockList">
 <li class="blockList">
 <h4>insert</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.185">insert</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;procs)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.186">insert</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;procs)</pre>
 <div class="block">Serialize a set of new procedures.
  These procedures are freshly submitted to the executor and each procedure
  has a 'RUNNABLE' state and the initial information required to start up.</div>
@@ -447,7 +447,7 @@ public interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/pro
 <ul class="blockList">
 <li class="blockList">
 <h4>update</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.192">update</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.193">update</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc)</pre>
 <div class="block">The specified procedure was executed,
  and the new state should be written to the store.</div>
 <dl>
@@ -462,7 +462,7 @@ public interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/pro
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.200">delete</a>(long&nbsp;procId)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.201">delete</a>(long&nbsp;procId)</pre>
 <div class="block">The specified procId was removed from the executor,
  due to completion, abort or failure.
  The store implementor should remove all the information about the specified procId.</div>
@@ -478,7 +478,7 @@ public interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/pro
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.208">delete</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;parentProc,
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.209">delete</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;parentProc,
             long[]&nbsp;subProcIds)</pre>
 <div class="block">The parent procedure completed.
  Update the state and mark all the child deleted.</div>
@@ -495,7 +495,7 @@ public interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/pro
 <ul class="blockListLast">
 <li class="blockList">
 <h4>delete</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.218">delete</a>(long[]&nbsp;procIds,
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#line.219">delete</a>(long[]&nbsp;procIds,
             int&nbsp;offset,
             int&nbsp;count)</pre>
 <div class="block">The specified procIds were removed from the executor,


[33/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
index 231636d..82139d6 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html" title="interface in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -119,10 +119,45 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
- @InterfaceStability.Evolving
-public class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.74">WALProcedureStore</a>
+public class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.106">WALProcedureStore</a>
 extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreBase.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreBase</a></pre>
-<div class="block">WAL implementation of the ProcedureStore.</div>
+<div class="block">WAL implementation of the ProcedureStore.
+ <p/>
+ When starting, the upper layer will first call <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#start-int-"><code>start(int)</code></a>, then <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#recoverLease--"><code>recoverLease()</code></a>,
+ then <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#load-org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureLoader-"><code>ProcedureStore.load(ProcedureLoader)</code></a>.
+ <p/>
+ In <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#recoverLease--"><code>recoverLease()</code></a>, we will get the lease by closing all the existing wal files(by
+ calling recoverFileLease), and creating a new wal writer. And we will also get the list of all
+ the old wal files.
+ <p/>
+ FIXME: notice that the current recover lease implementation is problematic, it can not deal with
+ the races if there are two master both wants to acquire the lease...
+ <p/>
+ In <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#load-org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureLoader-"><code>ProcedureStore.load(ProcedureLoader)</code></a> method, we will load all the active procedures. See the
+ comments of this method for more details.
+ <p/>
+ The actual logging way is a bit like our FileSystem based WAL implementation as RS side. There is
+ a <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#slots"><code>slots</code></a>, which is more like the ring buffer, and in the insert, update and delete
+ methods we will put thing into the <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#slots"><code>slots</code></a> and wait. And there is a background sync
+ thread(see the <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#syncLoop--"><code>syncLoop()</code></a> method) which get data from the <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#slots"><code>slots</code></a> and write them
+ to the FileSystem, and notify the caller that we have finished.
+ <p/>
+ TODO: try using disruptor to increase performance and simplify the logic?
+ <p/>
+ The <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#storeTracker"><code>storeTracker</code></a> keeps track of the modified procedures in the newest wal file, which is
+ also the one being written currently. And the deleted bits in it are for all the procedures, not
+ only the ones in the newest wal file. And when rolling a log, we will first store it in the
+ trailer of the current wal file, and then reset its modified bits, so that it can start to track
+ the modified procedures for the new wal file.
+ <p/>
+ The <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#holdingCleanupTracker"><code>holdingCleanupTracker</code></a> is used to test whether we are safe to delete the oldest wal
+ file. When there are log rolling and there are more than 1 wal files, we will make use of it. It
+ will first be initialized to the oldest file's tracker(which is stored in the trailer), using the
+ method <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#resetTo-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker-boolean-"><code>ProcedureStoreTracker.resetTo(ProcedureStoreTracker, boolean)</code></a>, and then merge it
+ with the tracker of every newer wal files, using the
+ <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#setDeletedIfModifiedInBoth-org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker-"><code>ProcedureStoreTracker.setDeletedIfModifiedInBoth(ProcedureStoreTracker)</code></a>. If we find out
+ that all the modified procedures for the oldest wal file are modified or deleted in newer wal
+ files, then we can delete it.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALPrettyPrinter.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><code>for printing content of a single WAL.</code></a>, 
@@ -387,7 +422,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#syncMaxSlot">syncMaxSlot</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private org.apache.hbase.thirdparty.org.apache.commons.collections4.queue.CircularFifoQueue</code></td>
+<td class="colFirst"><code>private org.apache.hbase.thirdparty.org.apache.commons.collections4.queue.CircularFifoQueue&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.SyncMetrics</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#syncMetricsQueue">syncMetricsQueue</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
@@ -515,7 +550,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 </tr>
 <tr id="i6" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#delete-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">delete</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#delete-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">delete</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
       long[]&nbsp;subProcIds)</code>
 <div class="block">The parent procedure completed.</div>
 </td>
@@ -546,7 +581,10 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 </tr>
 <tr id="i13" class="rowColor">
 <td class="colFirst"><code>private static long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#getMaxLogId-org.apache.hadoop.fs.FileStatus:A-">getMaxLogId</a></span>(org.apache.hadoop.fs.FileStatus[]&nbsp;logFiles)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#getMaxLogId-org.apache.hadoop.fs.FileStatus:A-">getMaxLogId</a></span>(org.apache.hadoop.fs.FileStatus[]&nbsp;logFiles)</code>
+<div class="block">Make sure that the file set are gotten by calling <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#getLogFiles--"><code>getLogFiles()</code></a>, where we will sort
+ the file set by log id.</div>
+</td>
 </tr>
 <tr id="i14" class="altColor">
 <td class="colFirst"><code>long</code></td>
@@ -585,7 +623,10 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 </tr>
 <tr id="i22" class="altColor">
 <td class="colFirst"><code>private long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#initOldLogs-org.apache.hadoop.fs.FileStatus:A-">initOldLogs</a></span>(org.apache.hadoop.fs.FileStatus[]&nbsp;logFiles)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#initOldLogs-org.apache.hadoop.fs.FileStatus:A-">initOldLogs</a></span>(org.apache.hadoop.fs.FileStatus[]&nbsp;logFiles)</code>
+<div class="block">Make sure that the file set are gotten by calling <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#getLogFiles--"><code>getLogFiles()</code></a>, where we will sort
+ the file set by log id.</div>
+</td>
 </tr>
 <tr id="i23" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
@@ -595,14 +636,14 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 </tr>
 <tr id="i24" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;procs)</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;procs)</code>
 <div class="block">Serialize a set of new procedures.</div>
 </td>
 </tr>
 <tr id="i25" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
-      <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">insert</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+      <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;subprocs)</code>
 <div class="block">When a procedure is submitted to the executor insert(proc, null) will be called.</div>
 </td>
 </tr>
@@ -733,7 +774,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 </tr>
 <tr id="i52" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#update-org.apache.hadoop.hbase.procedure2.Procedure-">update</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#update-org.apache.hadoop.hbase.procedure2.Procedure-">update</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc)</code>
 <div class="block">The specified procedure was executed,
  and the new state should be written to the store.</div>
 </td>
@@ -779,7 +820,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <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/procedure2/store/wal/WALProcedureStore.html#line.75">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.107">LOG</a></pre>
 </li>
 </ul>
 <a name="LOG_PREFIX">
@@ -788,7 +829,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG_PREFIX</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/store/wal/WALProcedureStore.html#line.76">LOG_PREFIX</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/store/wal/WALProcedureStore.html#line.108">LOG_PREFIX</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.LOG_PREFIX">Constant Field Values</a></dd>
@@ -801,7 +842,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_PROCEDURE_LOGDIR</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/store/wal/WALProcedureStore.html#line.78">MASTER_PROCEDURE_LOGDIR</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/store/wal/WALProcedureStore.html#line.110">MASTER_PROCEDURE_LOGDIR</a></pre>
 <div class="block">Used to construct the name of the log directory for master procedures</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -815,7 +856,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>WAL_COUNT_WARN_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/store/wal/WALProcedureStore.html#line.85">WAL_COUNT_WARN_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/store/wal/WALProcedureStore.html#line.117">WAL_COUNT_WARN_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.store.wal.WALProcedureStore.WAL_COUNT_WARN_THRESHOLD_CONF_KEY">Constant Field Values</a></dd>
@@ -828,7 +869,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_WAL_COUNT_WARN_THRESHOLD</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.87">DEFAULT_WAL_COUNT_WARN_THRESHOLD</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.119">DEFAULT_WAL_COUNT_WARN_THRESHOLD</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.DEFAULT_WAL_COUNT_WARN_THRESHOLD">Constant Field Values</a></dd>
@@ -841,7 +882,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>EXEC_WAL_CLEANUP_ON_LOAD_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/store/wal/WALProcedureStore.html#line.89">EXEC_WAL_CLEANUP_ON_LOAD_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/store/wal/WALProcedureStore.html#line.121">EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY">Constant Field Values</a></dd>
@@ -854,7 +895,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY</h4>
-<pre>private static final&nbsp;boolean <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.91">DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY</a></pre>
+<pre>private static final&nbsp;boolean <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.123">DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY">Constant Field Values</a></dd>
@@ -867,7 +908,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>MAX_RETRIES_BEFORE_ROLL_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/store/wal/WALProcedureStore.html#line.93">MAX_RETRIES_BEFORE_ROLL_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/store/wal/WALProcedureStore.html#line.125">MAX_RETRIES_BEFORE_ROLL_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.MAX_RETRIES_BEFORE_ROLL_CONF_KEY">Constant Field Values</a></dd>
@@ -880,7 +921,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_MAX_RETRIES_BEFORE_ROLL</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.95">DEFAULT_MAX_RETRIES_BEFORE_ROLL</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.127">DEFAULT_MAX_RETRIES_BEFORE_ROLL</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.DEFAULT_MAX_RETRIES_BEFORE_ROLL">Constant Field Values</a></dd>
@@ -893,7 +934,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>WAIT_BEFORE_ROLL_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/store/wal/WALProcedureStore.html#line.97">WAIT_BEFORE_ROLL_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/store/wal/WALProcedureStore.html#line.129">WAIT_BEFORE_ROLL_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.WAIT_BEFORE_ROLL_CONF_KEY">Constant Field Values</a></dd>
@@ -906,7 +947,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_WAIT_BEFORE_ROLL</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.99">DEFAULT_WAIT_BEFORE_ROLL</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.131">DEFAULT_WAIT_BEFORE_ROLL</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.DEFAULT_WAIT_BEFORE_ROLL">Constant Field Values</a></dd>
@@ -919,7 +960,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>ROLL_RETRIES_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/store/wal/WALProcedureStore.html#line.101">ROLL_RETRIES_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/store/wal/WALProcedureStore.html#line.133">ROLL_RETRIES_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.ROLL_RETRIES_CONF_KEY">Constant Field Values</a></dd>
@@ -932,7 +973,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_ROLL_RETRIES</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.103">DEFAULT_ROLL_RETRIES</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.135">DEFAULT_ROLL_RETRIES</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.DEFAULT_ROLL_RETRIES">Constant Field Values</a></dd>
@@ -945,7 +986,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>MAX_SYNC_FAILURE_ROLL_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/store/wal/WALProcedureStore.html#line.105">MAX_SYNC_FAILURE_ROLL_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/store/wal/WALProcedureStore.html#line.137">MAX_SYNC_FAILURE_ROLL_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.MAX_SYNC_FAILURE_ROLL_CONF_KEY">Constant Field Values</a></dd>
@@ -958,7 +999,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_MAX_SYNC_FAILURE_ROLL</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.107">DEFAULT_MAX_SYNC_FAILURE_ROLL</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.139">DEFAULT_MAX_SYNC_FAILURE_ROLL</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.DEFAULT_MAX_SYNC_FAILURE_ROLL">Constant Field Values</a></dd>
@@ -971,7 +1012,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>PERIODIC_ROLL_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/store/wal/WALProcedureStore.html#line.109">PERIODIC_ROLL_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/store/wal/WALProcedureStore.html#line.141">PERIODIC_ROLL_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.PERIODIC_ROLL_CONF_KEY">Constant Field Values</a></dd>
@@ -984,7 +1025,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_PERIODIC_ROLL</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.111">DEFAULT_PERIODIC_ROLL</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.143">DEFAULT_PERIODIC_ROLL</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.DEFAULT_PERIODIC_ROLL">Constant Field Values</a></dd>
@@ -997,7 +1038,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>SYNC_WAIT_MSEC_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.113">SYNC_WAIT_MSEC_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.145">SYNC_WAIT_MSEC_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.SYNC_WAIT_MSEC_CONF_KEY">Constant Field Values</a></dd>
@@ -1010,7 +1051,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_SYNC_WAIT_MSEC</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.114">DEFAULT_SYNC_WAIT_MSEC</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.146">DEFAULT_SYNC_WAIT_MSEC</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.DEFAULT_SYNC_WAIT_MSEC">Constant Field Values</a></dd>
@@ -1023,7 +1064,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>USE_HSYNC_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/store/wal/WALProcedureStore.html#line.116">USE_HSYNC_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/store/wal/WALProcedureStore.html#line.148">USE_HSYNC_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.USE_HSYNC_CONF_KEY">Constant Field Values</a></dd>
@@ -1036,7 +1077,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_USE_HSYNC</h4>
-<pre>private static final&nbsp;boolean <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.117">DEFAULT_USE_HSYNC</a></pre>
+<pre>private static final&nbsp;boolean <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.149">DEFAULT_USE_HSYNC</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.DEFAULT_USE_HSYNC">Constant Field Values</a></dd>
@@ -1049,7 +1090,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>ROLL_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/store/wal/WALProcedureStore.html#line.119">ROLL_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/store/wal/WALProcedureStore.html#line.151">ROLL_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.store.wal.WALProcedureStore.ROLL_THRESHOLD_CONF_KEY">Constant Field Values</a></dd>
@@ -1062,7 +1103,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_ROLL_THRESHOLD</h4>
-<pre>private static final&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.120">DEFAULT_ROLL_THRESHOLD</a></pre>
+<pre>private static final&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.152">DEFAULT_ROLL_THRESHOLD</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.DEFAULT_ROLL_THRESHOLD">Constant Field Values</a></dd>
@@ -1075,7 +1116,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>STORE_WAL_SYNC_STATS_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/procedure2/store/wal/WALProcedureStore.html#line.122">STORE_WAL_SYNC_STATS_COUNT</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/store/wal/WALProcedureStore.html#line.154">STORE_WAL_SYNC_STATS_COUNT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.STORE_WAL_SYNC_STATS_COUNT">Constant Field Values</a></dd>
@@ -1088,7 +1129,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_SYNC_STATS_COUNT</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.124">DEFAULT_SYNC_STATS_COUNT</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.156">DEFAULT_SYNC_STATS_COUNT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.DEFAULT_SYNC_STATS_COUNT">Constant Field Values</a></dd>
@@ -1101,7 +1142,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>logs</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/LinkedList.html?is-external=true" title="class or interface in java.util">LinkedList</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&gt; <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.126">logs</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/LinkedList.html?is-external=true" title="class or interface in java.util">LinkedList</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&gt; <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.158">logs</a></pre>
 </li>
 </ul>
 <a name="holdingCleanupTracker">
@@ -1110,7 +1151,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>holdingCleanupTracker</h4>
-<pre>private final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.127">holdingCleanupTracker</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.159">holdingCleanupTracker</a></pre>
 </li>
 </ul>
 <a name="storeTracker">
@@ -1119,7 +1160,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>storeTracker</h4>
-<pre>private final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.128">storeTracker</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.160">storeTracker</a></pre>
 </li>
 </ul>
 <a name="lock">
@@ -1128,7 +1169,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>lock</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantLock</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.129">lock</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantLock</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.161">lock</a></pre>
 </li>
 </ul>
 <a name="waitCond">
@@ -1137,7 +1178,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>waitCond</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Condition.html?is-external=true" title="class or interface in java.util.concurrent.locks">Condition</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.130">waitCond</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Condition.html?is-external=true" title="class or interface in java.util.concurrent.locks">Condition</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.162">waitCond</a></pre>
 </li>
 </ul>
 <a name="slotCond">
@@ -1146,7 +1187,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>slotCond</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Condition.html?is-external=true" title="class or interface in java.util.concurrent.locks">Condition</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.131">slotCond</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Condition.html?is-external=true" title="class or interface in java.util.concurrent.locks">Condition</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.163">slotCond</a></pre>
 </li>
 </ul>
 <a name="syncCond">
@@ -1155,7 +1196,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>syncCond</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Condition.html?is-external=true" title="class or interface in java.util.concurrent.locks">Condition</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.132">syncCond</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Condition.html?is-external=true" title="class or interface in java.util.concurrent.locks">Condition</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.164">syncCond</a></pre>
 </li>
 </ul>
 <a name="leaseRecovery">
@@ -1164,7 +1205,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>leaseRecovery</h4>
-<pre>private final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html" title="interface in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.LeaseRecovery</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.134">leaseRecovery</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html" title="interface in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.LeaseRecovery</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.166">leaseRecovery</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -1173,7 +1214,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>conf</h4>
-<pre>private final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.135">conf</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.167">conf</a></pre>
 </li>
 </ul>
 <a name="fs">
@@ -1182,7 +1223,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>fs</h4>
-<pre>private final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.136">fs</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.168">fs</a></pre>
 </li>
 </ul>
 <a name="walDir">
@@ -1191,7 +1232,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>walDir</h4>
-<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.137">walDir</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.169">walDir</a></pre>
 </li>
 </ul>
 <a name="walArchiveDir">
@@ -1200,7 +1241,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>walArchiveDir</h4>
-<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.138">walArchiveDir</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.170">walArchiveDir</a></pre>
 </li>
 </ul>
 <a name="enforceStreamCapability">
@@ -1209,7 +1250,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>enforceStreamCapability</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.139">enforceStreamCapability</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.171">enforceStreamCapability</a></pre>
 </li>
 </ul>
 <a name="syncException">
@@ -1218,7 +1259,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>syncException</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&gt; <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.141">syncException</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicReference</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&gt; <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.173">syncException</a></pre>
 </li>
 </ul>
 <a name="loading">
@@ -1227,7 +1268,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>loading</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.142">loading</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.174">loading</a></pre>
 </li>
 </ul>
 <a name="inSync">
@@ -1236,7 +1277,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>inSync</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.143">inSync</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.175">inSync</a></pre>
 </li>
 </ul>
 <a name="totalSynced">
@@ -1245,7 +1286,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>totalSynced</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/store/wal/WALProcedureStore.html#line.144">totalSynced</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/store/wal/WALProcedureStore.html#line.176">totalSynced</a></pre>
 </li>
 </ul>
 <a name="lastRollTs">
@@ -1254,7 +1295,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>lastRollTs</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/store/wal/WALProcedureStore.html#line.145">lastRollTs</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/store/wal/WALProcedureStore.html#line.177">lastRollTs</a></pre>
 </li>
 </ul>
 <a name="syncId">
@@ -1263,7 +1304,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>syncId</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/store/wal/WALProcedureStore.html#line.146">syncId</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/store/wal/WALProcedureStore.html#line.178">syncId</a></pre>
 </li>
 </ul>
 <a name="slotsCache">
@@ -1272,7 +1313,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>slotsCache</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/LinkedTransferQueue.html?is-external=true" title="class or interface in java.util.concurrent">LinkedTransferQueue</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&gt; <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.148">slotsCache</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/LinkedTransferQueue.html?is-external=true" title="class or interface in java.util.concurrent">LinkedTransferQueue</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&gt; <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.180">slotsCache</a></pre>
 </li>
 </ul>
 <a name="corruptedLogs">
@@ -1281,7 +1322,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>corruptedLogs</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&gt; <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.149">corruptedLogs</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&gt; <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.181">corruptedLogs</a></pre>
 </li>
 </ul>
 <a name="stream">
@@ -1290,7 +1331,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>stream</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.FSDataOutputStream <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.150">stream</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.FSDataOutputStream <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.182">stream</a></pre>
 </li>
 </ul>
 <a name="runningProcCount">
@@ -1299,7 +1340,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>runningProcCount</h4>
-<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.151">runningProcCount</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.183">runningProcCount</a></pre>
 </li>
 </ul>
 <a name="flushLogId">
@@ -1308,7 +1349,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>flushLogId</h4>
-<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.152">flushLogId</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.184">flushLogId</a></pre>
 </li>
 </ul>
 <a name="syncMaxSlot">
@@ -1317,7 +1358,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>syncMaxSlot</h4>
-<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.153">syncMaxSlot</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.185">syncMaxSlot</a></pre>
 </li>
 </ul>
 <a name="slotIndex">
@@ -1326,7 +1367,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>slotIndex</h4>
-<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.154">slotIndex</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.186">slotIndex</a></pre>
 </li>
 </ul>
 <a name="syncThread">
@@ -1335,7 +1376,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>syncThread</h4>
-<pre>private&nbsp;<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> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.155">syncThread</a></pre>
+<pre>private&nbsp;<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> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.187">syncThread</a></pre>
 </li>
 </ul>
 <a name="slots">
@@ -1344,7 +1385,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>slots</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>[] <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.156">slots</a></pre>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>[] <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.188">slots</a></pre>
 </li>
 </ul>
 <a name="walCountWarnThreshold">
@@ -1353,7 +1394,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>walCountWarnThreshold</h4>
-<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.158">walCountWarnThreshold</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.190">walCountWarnThreshold</a></pre>
 </li>
 </ul>
 <a name="maxRetriesBeforeRoll">
@@ -1362,7 +1403,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>maxRetriesBeforeRoll</h4>
-<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.159">maxRetriesBeforeRoll</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.191">maxRetriesBeforeRoll</a></pre>
 </li>
 </ul>
 <a name="maxSyncFailureRoll">
@@ -1371,7 +1412,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>maxSyncFailureRoll</h4>
-<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.160">maxSyncFailureRoll</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.192">maxSyncFailureRoll</a></pre>
 </li>
 </ul>
 <a name="waitBeforeRoll">
@@ -1380,7 +1421,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>waitBeforeRoll</h4>
-<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.161">waitBeforeRoll</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.193">waitBeforeRoll</a></pre>
 </li>
 </ul>
 <a name="rollRetries">
@@ -1389,7 +1430,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>rollRetries</h4>
-<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.162">rollRetries</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.194">rollRetries</a></pre>
 </li>
 </ul>
 <a name="periodicRollMsec">
@@ -1398,7 +1439,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>periodicRollMsec</h4>
-<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.163">periodicRollMsec</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.195">periodicRollMsec</a></pre>
 </li>
 </ul>
 <a name="rollThreshold">
@@ -1407,7 +1448,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>rollThreshold</h4>
-<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.164">rollThreshold</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.196">rollThreshold</a></pre>
 </li>
 </ul>
 <a name="useHsync">
@@ -1416,7 +1457,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>useHsync</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.165">useHsync</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.197">useHsync</a></pre>
 </li>
 </ul>
 <a name="syncWaitMsec">
@@ -1425,7 +1466,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>syncWaitMsec</h4>
-<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.166">syncWaitMsec</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.198">syncWaitMsec</a></pre>
 </li>
 </ul>
 <a name="syncMetricsQueue">
@@ -1434,7 +1475,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>syncMetricsQueue</h4>
-<pre>private&nbsp;org.apache.hbase.thirdparty.org.apache.commons.collections4.queue.CircularFifoQueue <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.169">syncMetricsQueue</a></pre>
+<pre>private&nbsp;org.apache.hbase.thirdparty.org.apache.commons.collections4.queue.CircularFifoQueue&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.SyncMetrics</a>&gt; <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.201">syncMetricsQueue</a></pre>
 </li>
 </ul>
 <a name="WALS_PATH_FILTER">
@@ -1443,7 +1484,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>WALS_PATH_FILTER</h4>
-<pre>private static final&nbsp;org.apache.hadoop.fs.PathFilter <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1212">WALS_PATH_FILTER</a></pre>
+<pre>private static final&nbsp;org.apache.hadoop.fs.PathFilter <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1231">WALS_PATH_FILTER</a></pre>
 </li>
 </ul>
 <a name="FILE_STATUS_ID_COMPARATOR">
@@ -1452,7 +1493,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FILE_STATUS_ID_COMPARATOR</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;org.apache.hadoop.fs.FileStatus&gt; <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1220">FILE_STATUS_ID_COMPARATOR</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;org.apache.hadoop.fs.FileStatus&gt; <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1239">FILE_STATUS_ID_COMPARATOR</a></pre>
 </li>
 </ul>
 </li>
@@ -1469,7 +1510,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>WALProcedureStore</h4>
-<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.199">WALProcedureStore</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.231">WALProcedureStore</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                          <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html" title="interface in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.LeaseRecovery</a>&nbsp;leaseRecovery)
                   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>
@@ -1484,7 +1525,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WALProcedureStore</h4>
-<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.208">WALProcedureStore</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.240">WALProcedureStore</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                          org.apache.hadoop.fs.Path&nbsp;walDir,
                          org.apache.hadoop.fs.Path&nbsp;walArchiveDir,
                          <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.LeaseRecovery.html" title="interface in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.LeaseRecovery</a>&nbsp;leaseRecovery)
@@ -1509,7 +1550,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.241">start</a>(int&nbsp;numSlots)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.271">start</a>(int&nbsp;numSlots)
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#start-int-">ProcedureStore</a></code></span></div>
 <div class="block">Start/Open the procedure store</div>
@@ -1525,7 +1566,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.291">stop</a>(boolean&nbsp;abort)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.321">stop</a>(boolean&nbsp;abort)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#stop-boolean-">ProcedureStore</a></code></span></div>
 <div class="block">Stop/Close the procedure store</div>
 <dl>
@@ -1540,7 +1581,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>sendStopSignal</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.324">sendStopSignal</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.354">sendStopSignal</a>()</pre>
 </li>
 </ul>
 <a name="getNumThreads--">
@@ -1549,7 +1590,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumThreads</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.336">getNumThreads</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.366">getNumThreads</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the number of threads/slots passed to start()</dd>
@@ -1562,7 +1603,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>setRunningProcedureCount</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.341">setRunningProcedureCount</a>(int&nbsp;count)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.371">setRunningProcedureCount</a>(int&nbsp;count)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#setRunningProcedureCount-int-">ProcedureStore</a></code></span></div>
 <div class="block">Set the number of procedure running.
  This can be used, for example, by the store to know how long to wait before a sync.</div>
@@ -1578,7 +1619,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreTracker</h4>
-<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.346">getStoreTracker</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.376">getStoreTracker</a>()</pre>
 </li>
 </ul>
 <a name="getActiveLogs--">
@@ -1587,7 +1628,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getActiveLogs</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&gt;&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.350">getActiveLogs</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&gt;&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.380">getActiveLogs</a>()</pre>
 </li>
 </ul>
 <a name="getCorruptedLogs--">
@@ -1596,7 +1637,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getCorruptedLogs</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&gt;&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.359">getCorruptedLogs</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&gt;&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.389">getCorruptedLogs</a>()</pre>
 </li>
 </ul>
 <a name="recoverLease--">
@@ -1605,7 +1646,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>recoverLease</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.364">recoverLease</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.394">recoverLease</a>()
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#recoverLease--">ProcedureStore</a></code></span></div>
 <div class="block">Acquire the lease for the procedure store.</div>
@@ -1621,7 +1662,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>load</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.413">load</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureLoader</a>&nbsp;loader)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.441">load</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureLoader</a>&nbsp;loader)
           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#load-org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureLoader-">ProcedureStore</a></code></span></div>
 <div class="block">Load the Procedures in the store.</div>
@@ -1639,7 +1680,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>tryCleanupLogsOnLoad</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.469">tryCleanupLogsOnLoad</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.497">tryCleanupLogsOnLoad</a>()</pre>
 </li>
 </ul>
 <a name="insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">
@@ -1648,8 +1689,8 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>insert</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.488">insert</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
-                   <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.516">insert</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+                   <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;subprocs)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">ProcedureStore</a></code></span></div>
 <div class="block">When a procedure is submitted to the executor insert(proc, null) will be called.
  'proc' has a 'RUNNABLE' state and the initial information required to start up.
@@ -1670,7 +1711,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>insert</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.522">insert</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;procs)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.550">insert</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;procs)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure:A-">ProcedureStore</a></code></span></div>
 <div class="block">Serialize a set of new procedures.
  These procedures are freshly submitted to the executor and each procedure
@@ -1687,7 +1728,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>update</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.551">update</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.579">update</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#update-org.apache.hadoop.hbase.procedure2.Procedure-">ProcedureStore</a></code></span></div>
 <div class="block">The specified procedure was executed,
  and the new state should be written to the store.</div>
@@ -1703,7 +1744,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.574">delete</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.602">delete</a>(long&nbsp;procId)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#delete-long-">ProcedureStore</a></code></span></div>
 <div class="block">The specified procId was removed from the executor,
  due to completion, abort or failure.
@@ -1720,7 +1761,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.597">delete</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.622">delete</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
                    long[]&nbsp;subProcIds)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#delete-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">ProcedureStore</a></code></span></div>
 <div class="block">The parent procedure completed.
@@ -1738,7 +1779,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.622">delete</a>(long[]&nbsp;procIds,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.647">delete</a>(long[]&nbsp;procIds,
                    int&nbsp;offset,
                    int&nbsp;count)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#delete-long:A-int-int-">ProcedureStore</a></code></span></div>
@@ -1759,7 +1800,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.633">delete</a>(long[]&nbsp;procIds)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.658">delete</a>(long[]&nbsp;procIds)</pre>
 </li>
 </ul>
 <a name="acquireSlot--">
@@ -1768,7 +1809,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>acquireSlot</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.657">acquireSlot</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.682">acquireSlot</a>()</pre>
 </li>
 </ul>
 <a name="releaseSlot-org.apache.hadoop.hbase.procedure2.util.ByteSlot-">
@@ -1777,7 +1818,7 @@ 

<TRUNCATED>

[32/47] hbase-site git commit: Published site at 118b0746849c886fc64b0a53014f3186e2db4d9d.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/ProcedureWALFormatReader.Entry.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/ProcedureWALFormatReader.Entry.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/ProcedureWALFormatReader.Entry.html
deleted file mode 100644
index 61c5577..0000000
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/ProcedureWALFormatReader.Entry.html
+++ /dev/null
@@ -1,305 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry (Apache HBase 3.0.0-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry (Apache HBase 3.0.0-SNAPSHOT API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/class-use/ProcedureWALFormatReader.Entry.html" target="_top">Frames</a></li>
-<li><a href="ProcedureWALFormatReader.Entry.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h2 title="Uses of Class org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry" class="title">Uses of Class<br>org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry</h2>
-</div>
-<div class="classUseContainer">
-<ul class="blockList">
-<li class="blockList">
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
-<caption><span>Packages that use <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Package</th>
-<th class="colLast" scope="col">Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.procedure2.store.wal">org.apache.hadoop.hbase.procedure2.store.wal</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList">
-<ul class="blockList">
-<li class="blockList"><a name="org.apache.hadoop.hbase.procedure2.store.wal">
-<!--   -->
-</a>
-<h3>Uses of <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> in <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html">org.apache.hadoop.hbase.procedure2.store.wal</a></h3>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
-<caption><span>Fields in <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html">org.apache.hadoop.hbase.procedure2.store.wal</a> declared as <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>protected <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.Entry.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#childHead">childHead</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.WalProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#childUnlinkedHead">childUnlinkedHead</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.EntryIterator.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#current">current</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>protected <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.Entry.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#hashNext">hashNext</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>protected <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.Entry.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#linkNext">linkNext</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>protected <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.Entry.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#linkPrev">linkPrev</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>[]</code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.WalProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#procedureMap">procedureMap</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.EntryIterator.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#replayHead">replayHead</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>protected <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.Entry.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#replayNext">replayNext</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.WalProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#replayOrderHead">replayOrderHead</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.WalProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#replayOrderTail">replayOrderTail</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>protected <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.Entry.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#replayPrev">replayPrev</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.WalProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#rootHead">rootHead</a></span></code>&nbsp;</td>
-</tr>
-</tbody>
-</table>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
-<caption><span>Methods in <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html">org.apache.hadoop.hbase.procedure2.store.wal</a> that return <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.WalProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#addToLinkList-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">addToLinkList</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry,
-             <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;linkHead)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.WalProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#addToMap-long-boolean-">addToMap</a></span>(long&nbsp;procId,
-        boolean&nbsp;hasParent)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.WalProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#findLinkListTail-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">findLinkListTail</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;linkHead)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.WalProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#getProcedure-int-long-">getProcedure</a></span>(int&nbsp;slotIndex,
-            long&nbsp;procId)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.WalProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#getProcedure-long-">getProcedure</a></span>(long&nbsp;procId)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.WalProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#getRootProcedure-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">getRootProcedure</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.WalProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#removeFromMap-long-">removeFromMap</a></span>(long&nbsp;procId)</code>&nbsp;</td>
-</tr>
-</tbody>
-</table>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
-<caption><span>Methods in <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html">org.apache.hadoop.hbase.procedure2.store.wal</a> with parameters of type <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.WalProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#addToLinkList-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">addToLinkList</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry,
-             <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;linkHead)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.WalProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#addToReplayList-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">addToReplayList</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.WalProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#checkReadyToRun-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">checkReadyToRun</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;rootEntry)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.WalProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#findLinkListTail-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">findLinkListTail</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;linkHead)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.WalProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#getRootProcedure-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">getRootProcedure</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.WalProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#unlinkFromLinkList-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">unlinkFromLinkList</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry)</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.WalProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#unlinkFromReplayList-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">unlinkFromReplayList</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry)</code>&nbsp;</td>
-</tr>
-</tbody>
-</table>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
-<caption><span>Constructors in <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html">org.apache.hadoop.hbase.procedure2.store.wal</a> with parameters of type <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#Entry-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">Entry</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;hashNext)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#EntryIterator-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">EntryIterator</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;replayHead)</code>&nbsp;</td>
-</tr>
-</tbody>
-</table>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/class-use/ProcedureWALFormatReader.Entry.html" target="_top">Frames</a></li>
-<li><a href="ProcedureWALFormatReader.Entry.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/ProcedureWALFormatReader.EntryIterator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/ProcedureWALFormatReader.EntryIterator.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/ProcedureWALFormatReader.EntryIterator.html
deleted file mode 100644
index c81949c..0000000
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/ProcedureWALFormatReader.EntryIterator.html
+++ /dev/null
@@ -1,169 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.EntryIterator (Apache HBase 3.0.0-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.EntryIterator (Apache HBase 3.0.0-SNAPSHOT API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/class-use/ProcedureWALFormatReader.EntryIterator.html" target="_top">Frames</a></li>
-<li><a href="ProcedureWALFormatReader.EntryIterator.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h2 title="Uses of Class org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.EntryIterator" class="title">Uses of Class<br>org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.EntryIterator</h2>
-</div>
-<div class="classUseContainer">
-<ul class="blockList">
-<li class="blockList">
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
-<caption><span>Packages that use <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Package</th>
-<th class="colLast" scope="col">Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.procedure2.store.wal">org.apache.hadoop.hbase.procedure2.store.wal</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList">
-<ul class="blockList">
-<li class="blockList"><a name="org.apache.hadoop.hbase.procedure2.store.wal">
-<!--   -->
-</a>
-<h3>Uses of <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a> in <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html">org.apache.hadoop.hbase.procedure2.store.wal</a></h3>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
-<caption><span>Methods in <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html">org.apache.hadoop.hbase.procedure2.store.wal</a> that return <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.WalProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#fetchAll--">fetchAll</a></span>()</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.WalProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#fetchReady--">fetchReady</a></span>()</code>&nbsp;</td>
-</tr>
-</tbody>
-</table>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/class-use/ProcedureWALFormatReader.EntryIterator.html" target="_top">Frames</a></li>
-<li><a href="ProcedureWALFormatReader.EntryIterator.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/ProcedureWALFormatReader.WalProcedureMap.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/ProcedureWALFormatReader.WalProcedureMap.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/ProcedureWALFormatReader.WalProcedureMap.html
deleted file mode 100644
index 64594dd..0000000
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/ProcedureWALFormatReader.WalProcedureMap.html
+++ /dev/null
@@ -1,182 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="en">
-<head>
-<!-- Generated by javadoc -->
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.WalProcedureMap (Apache HBase 3.0.0-SNAPSHOT API)</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../../../../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.WalProcedureMap (Apache HBase 3.0.0-SNAPSHOT API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/class-use/ProcedureWALFormatReader.WalProcedureMap.html" target="_top">Frames</a></li>
-<li><a href="ProcedureWALFormatReader.WalProcedureMap.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<div class="header">
-<h2 title="Uses of Class org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.WalProcedureMap" class="title">Uses of Class<br>org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.WalProcedureMap</h2>
-</div>
-<div class="classUseContainer">
-<ul class="blockList">
-<li class="blockList">
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
-<caption><span>Packages that use <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Package</th>
-<th class="colLast" scope="col">Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.procedure2.store.wal">org.apache.hadoop.hbase.procedure2.store.wal</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList">
-<ul class="blockList">
-<li class="blockList"><a name="org.apache.hadoop.hbase.procedure2.store.wal">
-<!--   -->
-</a>
-<h3>Uses of <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a> in <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html">org.apache.hadoop.hbase.procedure2.store.wal</a></h3>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
-<caption><span>Fields in <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html">org.apache.hadoop.hbase.procedure2.store.wal</a> declared as <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#localProcedureMap">localProcedureMap</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#procedureMap">procedureMap</a></span></code>&nbsp;</td>
-</tr>
-</tbody>
-</table>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
-<caption><span>Methods in <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html">org.apache.hadoop.hbase.procedure2.store.wal</a> with parameters of type <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">ProcedureWALFormatReader.WalProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#mergeTail-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.WalProcedureMap-">mergeTail</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a>&nbsp;other)</code>&nbsp;</td>
-</tr>
-</tbody>
-</table>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../../../../../../overview-summary.html">Overview</a></li>
-<li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">Class</a></li>
-<li class="navBarCell1Rev">Use</li>
-<li><a href="../../../../../../../../overview-tree.html">Tree</a></li>
-<li><a href="../../../../../../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../../../../../../index-all.html">Index</a></li>
-<li><a href="../../../../../../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev</li>
-<li>Next</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/class-use/ProcedureWALFormatReader.WalProcedureMap.html" target="_top">Frames</a></li>
-<li><a href="ProcedureWALFormatReader.WalProcedureMap.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9b6ca5d1/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/WALProcedureMap.Entry.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/WALProcedureMap.Entry.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/WALProcedureMap.Entry.html
new file mode 100644
index 0000000..2c7fa3d
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/class-use/WALProcedureMap.Entry.html
@@ -0,0 +1,307 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/class-use/WALProcedureMap.Entry.html" target="_top">Frames</a></li>
+<li><a href="WALProcedureMap.Entry.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry" class="title">Uses of Class<br>org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry</h2>
+</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
+<caption><span>Packages that use <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Package</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.procedure2.store.wal">org.apache.hadoop.hbase.procedure2.store.wal</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<ul class="blockList">
+<li class="blockList"><a name="org.apache.hadoop.hbase.procedure2.store.wal">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a> in <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html">org.apache.hadoop.hbase.procedure2.store.wal</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html">org.apache.hadoop.hbase.procedure2.store.wal</a> declared as <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.Entry.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#childHead">childHead</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#childUnlinkedHead">childUnlinkedHead</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.EntryIterator.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html#current">current</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.Entry.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#hashNext">hashNext</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.Entry.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#linkNext">linkNext</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.Entry.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#linkPrev">linkPrev</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>[]</code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#procedureMap">procedureMap</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.EntryIterator.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html#replayHead">replayHead</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.Entry.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#replayNext">replayNext</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#replayOrderHead">replayOrderHead</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#replayOrderTail">replayOrderTail</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.Entry.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#replayPrev">replayPrev</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#rootHead">rootHead</a></span></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html">org.apache.hadoop.hbase.procedure2.store.wal</a> that return <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#addToLinkList-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">addToLinkList</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;entry,
+             <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;linkHead)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#addToMap-long-boolean-">addToMap</a></span>(long&nbsp;procId,
+        boolean&nbsp;hasParent)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#findLinkListTail-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">findLinkListTail</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;linkHead)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#getProcedure-int-long-">getProcedure</a></span>(int&nbsp;slotIndex,
+            long&nbsp;procId)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#getProcedure-long-">getProcedure</a></span>(long&nbsp;procId)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#getRootProcedure-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">getRootProcedure</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;entry)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#removeFromMap-long-">removeFromMap</a></span>(long&nbsp;procId)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html">org.apache.hadoop.hbase.procedure2.store.wal</a> with parameters of type <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#addToLinkList-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">addToLinkList</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;entry,
+             <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;linkHead)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#addToReplayList-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">addToReplayList</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;entry)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#checkReadyToRun-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">checkReadyToRun</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;rootEntry)</code>
+<div class="block">(see the comprehensive explanation in the beginning of <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><code>ProcedureWALFormatReader</code></a>).</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#findLinkListTail-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">findLinkListTail</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;linkHead)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#getRootProcedure-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">getRootProcedure</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;entry)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#unlinkFromLinkList-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">unlinkFromLinkList</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;entry)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><span class="typeNameLabel">WALProcedureMap.</span><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.html#unlinkFromReplayList-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">unlinkFromReplayList</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;entry)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
+<caption><span>Constructors in <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/package-summary.html">org.apache.hadoop.hbase.procedure2.store.wal</a> with parameters of type <a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html#Entry-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">Entry</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;hashNext)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.EntryIterator.html#EntryIterator-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureMap.Entry-">EntryIterator</a></span>(<a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureMap.Entry</a>&nbsp;replayHead)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureMap.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../../index.html?org/apache/hadoop/hbase/procedure2/store/wal/class-use/WALProcedureMap.Entry.html" target="_top">Frames</a></li>
+<li><a href="WALProcedureMap.Entry.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

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