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

[01/11] hbase-site git commit: Published site at 405bf5e6383a09f435baadbac6c389e9f6c43ac6.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site c90f2bbe9 -> c8b83ace9


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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-use.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-use.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-use.html
index 72cc2b4..eda5b71 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-use.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-use.html
@@ -87,14 +87,18 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.master.procedure">org.apache.hadoop.hbase.master.procedure</a></td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.master">org.apache.hadoop.hbase.master</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2</a></td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.master.procedure">org.apache.hadoop.hbase.master.procedure</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<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>
@@ -116,6 +120,21 @@
 </tbody>
 </table>
 </li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.master">
+<!--   -->
+</a>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing classes, and an explanation">
+<caption><span>Classes in <a href="../../../../../org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a> used by <a href="../../../../../org/apache/hadoop/hbase/master/package-summary.html">org.apache.hadoop.hbase.master</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Class and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/procedure2/class-use/ProcedureTestingUtility.NoopProcedure.html#org.apache.hadoop.hbase.master">ProcedureTestingUtility.NoopProcedure</a>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.master.procedure">
 <!--   -->
 </a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index 5de4a37..f85d0ea 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -701,10 +701,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.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestMultiLogThreshold.ActionType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestMultiLogThreshold.ActionType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestAtomicOperation.TestStep</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/testdevapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/overview-tree.html b/testdevapidocs/overview-tree.html
index b857403..b891855 100644
--- a/testdevapidocs/overview-tree.html
+++ b/testdevapidocs/overview-tree.html
@@ -1776,6 +1776,7 @@
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/TestForceUpdateProcedure.ParentProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestForceUpdateProcedure.ParentProcedure</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/TestForceUpdateProcedure.WaitingProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestForceUpdateProcedure.WaitingProcedure</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestHbck.SuspendProcedure.html" title="class in org.apache.hadoop.hbase.client"><span class="typeNameLink">TestHbck.SuspendProcedure</span></a> (implements org.apache.hadoop.hbase.master.procedure.TableProcedureInterface)</li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestLoadProcedureError.TestProcedure</span></a> (implements org.apache.hadoop.hbase.master.procedure.TableProcedureInterface)</li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/TestProcedureBypass.RootProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureBypass.RootProcedure</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/TestProcedureBypass.StuckProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureBypass.StuckProcedure</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/TestProcedureBypass.SuspendProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureBypass.SuspendProcedure</span></a></li>
@@ -3076,6 +3077,7 @@
 <li type="circle">org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/TestSecureLoadIncrementalHFilesSplitRecovery.html" title="class in org.apache.hadoop.hbase.tool"><span class="typeNameLink">TestSecureLoadIncrementalHFilesSplitRecovery</span></a></li>
 </ul>
 </li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestLoadProcedureError</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestLoadTestKVGenerator.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">TestLoadTestKVGenerator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.asyncfs.<a href="org/apache/hadoop/hbase/io/asyncfs/TestLocalAsyncOutput.html" title="class in org.apache.hadoop.hbase.io.asyncfs"><span class="typeNameLink">TestLocalAsyncOutput</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestLocalHBaseCluster.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">TestLocalHBaseCluster</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html
new file mode 100644
index 0000000..3660203
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html
@@ -0,0 +1,222 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import static org.junit.Assert.assertFalse;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.concurrent.CountDownLatch;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.TableName;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.master.procedure.TableProcedureInterface;<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.ProcedureExecutor;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.NoopProcedure;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.procedure2.ProcedureYieldException;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.junit.AfterClass;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.junit.BeforeClass;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.junit.ClassRule;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.Test;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.experimental.categories.Category;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState;<a name="line.41"></a>
+<span class="sourceLineNo">042</span><a name="line.42"></a>
+<span class="sourceLineNo">043</span>/**<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * Testcase for HBASE-21490.<a name="line.44"></a>
+<span class="sourceLineNo">045</span> */<a name="line.45"></a>
+<span class="sourceLineNo">046</span>@Category({ MasterTests.class, MediumTests.class })<a name="line.46"></a>
+<span class="sourceLineNo">047</span>public class TestLoadProcedureError {<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  @ClassRule<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.50"></a>
+<span class="sourceLineNo">051</span>    HBaseClassTestRule.forClass(TestLoadProcedureError.class);<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>  private static TableName NAME = TableName.valueOf("Load");<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private static volatile CountDownLatch ARRIVE;<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>  private static volatile boolean FINISH_PROC;<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  private static volatile boolean FAIL_LOAD;<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>  public static final class TestProcedure extends NoopProcedure&lt;MasterProcedureEnv&gt;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      implements TableProcedureInterface {<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>    protected Procedure&lt;MasterProcedureEnv&gt;[] execute(MasterProcedureEnv env)<a name="line.67"></a>
+<span class="sourceLineNo">068</span>        throws ProcedureYieldException, ProcedureSuspendedException, InterruptedException {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>      if (ARRIVE != null) {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>        ARRIVE.countDown();<a name="line.70"></a>
+<span class="sourceLineNo">071</span>        ARRIVE = null;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      }<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      if (FINISH_PROC) {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>        return null;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>      }<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      setTimeout(1000);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      setState(ProcedureState.WAITING_TIMEOUT);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      throw new ProcedureSuspendedException();<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>    protected synchronized boolean setTimeoutFailure(MasterProcedureEnv env) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      setState(ProcedureState.RUNNABLE);<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      env.getProcedureScheduler().addBack(this);<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      return false;<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>    @Override<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    protected void afterReplay(MasterProcedureEnv env) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      if (FAIL_LOAD) {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        throw new RuntimeException("Inject error");<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      }<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    }<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>    @Override<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    public TableName getTableName() {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      return NAME;<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>    @Override<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public TableOperationType getTableOperationType() {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      return TableOperationType.READ;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    }<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  @BeforeClass<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  public static void setUp() throws Exception {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    UTIL.startMiniCluster(1);<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>  @AfterClass<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  public static void tearDown() throws Exception {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    UTIL.shutdownMiniCluster();<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>  private void waitNoMaster() {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    UTIL.waitFor(30000, () -&gt; UTIL.getMiniHBaseCluster().getLiveMasterThreads().isEmpty());<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>  @Test<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public void testLoadError() throws Exception {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec =<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      UTIL.getMiniHBaseCluster().getMaster().getMasterProcedureExecutor();<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    ARRIVE = new CountDownLatch(1);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    long procId = procExec.submitProcedure(new TestProcedure());<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    ARRIVE.await();<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    FAIL_LOAD = true;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // do not persist the store tracker<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    UTIL.getMiniHBaseCluster().getMaster().getWalProcedureStore().stop(true);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    UTIL.getMiniHBaseCluster().getMaster().abort("for testing");<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    waitNoMaster();<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    // restart twice, and should fail twice, as we will throw an exception in the afterReplay above<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    // in order to reproduce the problem in HBASE-21490 stably, here we will wait until a master is<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    // fully done, before starting the new master, otherwise the new master may start too early and<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    // call recoverLease on the proc wal files and cause we fail to persist the store tracker when<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    // shutting down<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    UTIL.getMiniHBaseCluster().startMaster();<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    waitNoMaster();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    UTIL.getMiniHBaseCluster().startMaster();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    waitNoMaster();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    FAIL_LOAD = false;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    HMaster master = UTIL.getMiniHBaseCluster().startMaster().getMaster();<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    UTIL.waitFor(30000, () -&gt; master.isActiveMaster() &amp;&amp; master.isInitialized());<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    // assert the procedure is still there and not finished yet<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    TestProcedure proc = (TestProcedure) master.getMasterProcedureExecutor().getProcedure(procId);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    assertFalse(proc.isFinished());<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    FINISH_PROC = true;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    UTIL.waitFor(30000, () -&gt; proc.isFinished());<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>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.html
new file mode 100644
index 0000000..3660203
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.html
@@ -0,0 +1,222 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import static org.junit.Assert.assertFalse;<a name="line.20"></a>
+<span class="sourceLineNo">021</span><a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.concurrent.CountDownLatch;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.TableName;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.master.procedure.TableProcedureInterface;<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.ProcedureExecutor;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.NoopProcedure;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.procedure2.ProcedureYieldException;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.junit.AfterClass;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.junit.BeforeClass;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.junit.ClassRule;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.Test;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.experimental.categories.Category;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState;<a name="line.41"></a>
+<span class="sourceLineNo">042</span><a name="line.42"></a>
+<span class="sourceLineNo">043</span>/**<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * Testcase for HBASE-21490.<a name="line.44"></a>
+<span class="sourceLineNo">045</span> */<a name="line.45"></a>
+<span class="sourceLineNo">046</span>@Category({ MasterTests.class, MediumTests.class })<a name="line.46"></a>
+<span class="sourceLineNo">047</span>public class TestLoadProcedureError {<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  @ClassRule<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.50"></a>
+<span class="sourceLineNo">051</span>    HBaseClassTestRule.forClass(TestLoadProcedureError.class);<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span>  private static TableName NAME = TableName.valueOf("Load");<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private static volatile CountDownLatch ARRIVE;<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>  private static volatile boolean FINISH_PROC;<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  private static volatile boolean FAIL_LOAD;<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>  public static final class TestProcedure extends NoopProcedure&lt;MasterProcedureEnv&gt;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      implements TableProcedureInterface {<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>    protected Procedure&lt;MasterProcedureEnv&gt;[] execute(MasterProcedureEnv env)<a name="line.67"></a>
+<span class="sourceLineNo">068</span>        throws ProcedureYieldException, ProcedureSuspendedException, InterruptedException {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>      if (ARRIVE != null) {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>        ARRIVE.countDown();<a name="line.70"></a>
+<span class="sourceLineNo">071</span>        ARRIVE = null;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      }<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      if (FINISH_PROC) {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>        return null;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>      }<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      setTimeout(1000);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      setState(ProcedureState.WAITING_TIMEOUT);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      throw new ProcedureSuspendedException();<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>    protected synchronized boolean setTimeoutFailure(MasterProcedureEnv env) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      setState(ProcedureState.RUNNABLE);<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      env.getProcedureScheduler().addBack(this);<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      return false;<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>    @Override<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    protected void afterReplay(MasterProcedureEnv env) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      if (FAIL_LOAD) {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        throw new RuntimeException("Inject error");<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      }<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    }<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>    @Override<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    public TableName getTableName() {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      return NAME;<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>    @Override<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public TableOperationType getTableOperationType() {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      return TableOperationType.READ;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    }<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  @BeforeClass<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  public static void setUp() throws Exception {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    UTIL.startMiniCluster(1);<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>  @AfterClass<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  public static void tearDown() throws Exception {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    UTIL.shutdownMiniCluster();<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>  private void waitNoMaster() {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    UTIL.waitFor(30000, () -&gt; UTIL.getMiniHBaseCluster().getLiveMasterThreads().isEmpty());<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>  @Test<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public void testLoadError() throws Exception {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec =<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      UTIL.getMiniHBaseCluster().getMaster().getMasterProcedureExecutor();<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    ARRIVE = new CountDownLatch(1);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    long procId = procExec.submitProcedure(new TestProcedure());<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    ARRIVE.await();<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    FAIL_LOAD = true;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // do not persist the store tracker<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    UTIL.getMiniHBaseCluster().getMaster().getWalProcedureStore().stop(true);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    UTIL.getMiniHBaseCluster().getMaster().abort("for testing");<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    waitNoMaster();<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    // restart twice, and should fail twice, as we will throw an exception in the afterReplay above<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    // in order to reproduce the problem in HBASE-21490 stably, here we will wait until a master is<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    // fully done, before starting the new master, otherwise the new master may start too early and<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    // call recoverLease on the proc wal files and cause we fail to persist the store tracker when<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    // shutting down<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    UTIL.getMiniHBaseCluster().startMaster();<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    waitNoMaster();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    UTIL.getMiniHBaseCluster().startMaster();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    waitNoMaster();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    FAIL_LOAD = false;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    HMaster master = UTIL.getMiniHBaseCluster().startMaster().getMaster();<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    UTIL.waitFor(30000, () -&gt; master.isActiveMaster() &amp;&amp; master.isInitialized());<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    // assert the procedure is still there and not finished yet<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    TestProcedure proc = (TestProcedure) master.getMasterProcedureExecutor().getProcedure(procId);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    assertFalse(proc.isFinished());<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    FINISH_PROC = true;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    UTIL.waitFor(30000, () -&gt; proc.isFinished());<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>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[11/11] hbase-site git commit: Published site at 405bf5e6383a09f435baadbac6c389e9f6c43ac6.

Posted by gi...@apache.org.
Published site at 405bf5e6383a09f435baadbac6c389e9f6c43ac6.


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

Branch: refs/heads/asf-site
Commit: c8b83ace98bd4d21e72abed5fa0cb09f7bd38d2b
Parents: c90f2bb
Author: jenkins <bu...@apache.org>
Authored: Tue Nov 20 14:52:40 2018 +0000
Committer: jenkins <bu...@apache.org>
Committed: Tue Nov 20 14:52:40 2018 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |    4 +-
 apache_hbase_reference_guide.pdf                |    4 +-
 book.html                                       |    2 +-
 bulk-loads.html                                 |    4 +-
 checkstyle-aggregate.html                       |   18 +-
 checkstyle.rss                                  |   16 +-
 coc.html                                        |    4 +-
 dependencies.html                               |    4 +-
 dependency-convergence.html                     |    4 +-
 dependency-info.html                            |    4 +-
 dependency-management.html                      |    4 +-
 devapidocs/constant-values.html                 |    4 +-
 .../procedure2/store/ProcedureStoreTracker.html |   30 +-
 .../store/wal/ProcedureWALFormat.html           |   22 +-
 .../store/wal/WALProcedureStore.PushType.html   |   12 +-
 .../procedure2/store/wal/WALProcedureStore.html |   92 +-
 .../org/apache/hadoop/hbase/Version.html        |    4 +-
 .../ProcedureStoreTracker.DeleteState.html      |  413 ++--
 .../procedure2/store/ProcedureStoreTracker.html |  413 ++--
 ...cedureWALFormat.InvalidWALDataException.html |  345 ++--
 .../store/wal/ProcedureWALFormat.Loader.html    |  345 ++--
 .../store/wal/ProcedureWALFormat.html           |  345 ++--
 .../wal/WALProcedureStore.LeaseRecovery.html    | 1876 +++++++++---------
 .../store/wal/WALProcedureStore.PushType.html   | 1876 +++++++++---------
 .../wal/WALProcedureStore.SyncMetrics.html      | 1876 +++++++++---------
 .../procedure2/store/wal/WALProcedureStore.html | 1876 +++++++++---------
 downloads.html                                  |    4 +-
 export_control.html                             |    4 +-
 index.html                                      |    4 +-
 integration.html                                |    4 +-
 issue-tracking.html                             |    4 +-
 license.html                                    |    4 +-
 mail-lists.html                                 |    4 +-
 metrics.html                                    |    4 +-
 old_news.html                                   |    4 +-
 plugin-management.html                          |    4 +-
 plugins.html                                    |    4 +-
 poweredbyhbase.html                             |    4 +-
 project-info.html                               |    4 +-
 project-reports.html                            |    4 +-
 project-summary.html                            |    4 +-
 pseudo-distributed.html                         |    4 +-
 replication.html                                |    4 +-
 resources.html                                  |    4 +-
 source-repository.html                          |    4 +-
 sponsors.html                                   |    4 +-
 supportingprojects.html                         |    4 +-
 team-list.html                                  |    4 +-
 testdevapidocs/allclasses-frame.html            |    2 +
 testdevapidocs/allclasses-noframe.html          |    2 +
 testdevapidocs/index-all.html                   |   40 +
 .../hadoop/hbase/backup/package-tree.html       |    2 +-
 .../hbase/class-use/HBaseClassTestRule.html     |   16 +-
 .../hbase/class-use/HBaseTestingUtility.html    |    6 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |    2 +-
 .../hbase/master/TestHMasterRPCException.html   |    4 +-
 .../TestLoadProcedureError.TestProcedure.html   |  421 ++++
 .../hbase/master/TestLoadProcedureError.html    |  447 +++++
 .../apache/hadoop/hbase/master/TestMaster.html  |    4 +-
 .../TestLoadProcedureError.TestProcedure.html   |  125 ++
 .../class-use/TestLoadProcedureError.html       |  125 ++
 .../hadoop/hbase/master/package-frame.html      |    2 +
 .../hadoop/hbase/master/package-summary.html    |   10 +
 .../hadoop/hbase/master/package-tree.html       |    6 +
 .../org/apache/hadoop/hbase/package-tree.html   |   12 +-
 .../hadoop/hbase/procedure/package-tree.html    |    8 +-
 .../ProcedureTestingUtility.NoopProcedure.html  |    2 +-
 .../ProcedureTestingUtility.NoopProcedure.html  |   24 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    6 +-
 .../hadoop/hbase/procedure2/package-use.html    |   23 +-
 .../hadoop/hbase/regionserver/package-tree.html |    4 +-
 testdevapidocs/overview-tree.html               |    2 +
 .../TestLoadProcedureError.TestProcedure.html   |  222 +++
 .../hbase/master/TestLoadProcedureError.html    |  222 +++
 74 files changed, 6573 insertions(+), 4851 deletions(-)
----------------------------------------------------------------------


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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index 3733931..7e3cdf8 100644
--- a/book.html
+++ b/book.html
@@ -41318,7 +41318,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-SNAPSHOT<br>
-Last updated 2018-11-19 14:33:37 UTC
+Last updated 2018-11-20 14:33:20 UTC
 </div>
 </div>
 </body>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index e99da79..deaf0b6 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="20181119" />
+    <meta name="Date-Revision-yyyymmdd" content="20181120" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -291,7 +291,7 @@
 <th><img src="images/icon_warning_sml.gif" alt="" />&#160;Warnings</th>
 <th><img src="images/icon_error_sml.gif" alt="" />&#160;Errors</th></tr>
 <tr class="b">
-<td>3811</td>
+<td>3812</td>
 <td>0</td>
 <td>0</td>
 <td>14996</td></tr></table></div>
@@ -9816,12 +9816,12 @@
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#JavadocTagContinuationIndentation">JavadocTagContinuationIndentation</a>
 <ul>
 <li>offset: <tt>&quot;2&quot;</tt></li></ul></td>
-<td>731</td>
+<td>730</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#NonEmptyAtclauseDescription">NonEmptyAtclauseDescription</a></td>
-<td>3452</td>
+<td>3453</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>misc</td>
@@ -19115,7 +19115,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 0 has parse error. Details: no viable alternative at input '   *' while parsing JAVADOC_TAG</td>
 <td>117</td></tr>
 <tr class="a">
@@ -71995,19 +71995,19 @@
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>656</td></tr>
+<td>662</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>943</td></tr>
+<td>949</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 8, expected level should be 6.</td>
-<td>1081</td></tr></table></div>
+<td>1087</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.util.DelayedUtil.java">org/apache/hadoop/hbase/procedure2/util/DelayedUtil.java</h3>
 <table border="0" class="table table-striped">
@@ -116753,7 +116753,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-11-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-11-20</li>
             </p>
                 </div>
 

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

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

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

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

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

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/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 04f9053..eddd906 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html
@@ -777,7 +777,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isModified</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.280">isModified</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.281">isModified</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="isDeleted-long-">
@@ -786,7 +786,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>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.293">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.294">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
@@ -800,7 +800,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <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.303">getActiveMinProcId</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.304">getActiveMinProcId</a>()</pre>
 </li>
 </ul>
 <a name="setKeepDeletes-boolean-">
@@ -809,7 +809,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <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.308">setKeepDeletes</a>(boolean&nbsp;keepDeletes)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.309">setKeepDeletes</a>(boolean&nbsp;keepDeletes)</pre>
 </li>
 </ul>
 <a name="isPartial--">
@@ -818,7 +818,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <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.323">isPartial</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.324">isPartial</a>()</pre>
 </li>
 </ul>
 <a name="setPartialFlag-boolean-">
@@ -827,7 +827,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <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.327">setPartialFlag</a>(boolean&nbsp;isPartial)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.328">setPartialFlag</a>(boolean&nbsp;isPartial)</pre>
 </li>
 </ul>
 <a name="isEmpty--">
@@ -836,7 +836,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <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.339">isEmpty</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.340">isEmpty</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true, if no procedure is active, else false.</dd>
@@ -849,7 +849,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isAllModified</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.352">isAllModified</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.353">isAllModified</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if all procedure was modified or deleted since last call to
@@ -863,7 +863,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getAllActiveProcIds</h4>
-<pre>public&nbsp;long[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.366">getAllActiveProcIds</a>()</pre>
+<pre>public&nbsp;long[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.367">getAllActiveProcIds</a>()</pre>
 <div class="block">Will be used when there are too many proc wal files. We will rewrite the states of the active
  procedures in the oldest proc wal file so that we can delete it.</div>
 <dl>
@@ -878,7 +878,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>resetModified</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.375">resetModified</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.376">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>
@@ -889,7 +889,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getOrCreateNode</h4>
-<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.383">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.384">getOrCreateNode</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="growNode-org.apache.hadoop.hbase.procedure2.store.BitSetNode-long-">
@@ -898,7 +898,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>growNode</h4>
-<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.439">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,
+<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.440">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>
@@ -913,7 +913,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>mergeNodes</h4>
-<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.449">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,
+<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.450">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>
@@ -924,7 +924,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <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.456">dump</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html#line.457">dump</a>()</pre>
 </li>
 </ul>
 <a name="toProto--">
@@ -933,7 +933,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <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.474">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.475">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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/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 66fa7c4..3e90c3a 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html
@@ -452,7 +452,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>writeHeader</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.114">writeHeader</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;stream,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.111">writeHeader</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;stream,
                                org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader&nbsp;header)
                         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>
@@ -467,7 +467,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>writeTrailer</h4>
-<pre>public static&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.134">writeTrailer</a>(org.apache.hadoop.fs.FSDataOutputStream&nbsp;stream,
+<pre>public static&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.131">writeTrailer</a>(org.apache.hadoop.fs.FSDataOutputStream&nbsp;stream,
                                 <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.html" title="class in org.apache.hadoop.hbase.procedure2.store">ProcedureStoreTracker</a>&nbsp;tracker)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -482,7 +482,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>readHeader</h4>
-<pre>public static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.152">readHeader</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;stream)
+<pre>public static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALHeader&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.149">readHeader</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;stream)
                                                                                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -496,7 +496,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>readTrailer</h4>
-<pre>public static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALTrailer&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.177">readTrailer</a>(org.apache.hadoop.fs.FSDataInputStream&nbsp;stream,
+<pre>public static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALTrailer&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.174">readTrailer</a>(org.apache.hadoop.fs.FSDataInputStream&nbsp;stream,
                                                                                                                 long&nbsp;startPos,
                                                                                                                 long&nbsp;size)
                                                                                                          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>
@@ -512,7 +512,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>readEntry</h4>
-<pre>public static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.214">readEntry</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;stream)
+<pre>public static&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureWALEntry&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.211">readEntry</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;stream)
                                                                                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -526,7 +526,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>writeEntry</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.218">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,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.215">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>&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)
@@ -543,7 +543,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <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.231">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,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.228">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>&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>
@@ -558,7 +558,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <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.236">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,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.233">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>&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>
@@ -574,7 +574,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <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.241">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,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.238">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>&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>
@@ -589,7 +589,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <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.246">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,
+<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,
                                long&nbsp;procId)
                         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>
@@ -604,7 +604,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <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.254">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,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.html#line.251">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>&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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/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 3fd4750..e03e9cc 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.700">WALProcedureStore.PushType</a>
+<pre>private static enum <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.706">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.700">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.706">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.700">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.706">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.700">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.706">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.700">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.706">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.700">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<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.706">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 


[07/11] hbase-site git commit: Published site at 405bf5e6383a09f435baadbac6c389e9f6c43ac6.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/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 ab175b6..72a3459 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
@@ -456,969 +456,979 @@
 <span class="sourceLineNo">448</span>    lock.lock();<a name="line.448"></a>
 <span class="sourceLineNo">449</span>    try {<a name="line.449"></a>
 <span class="sourceLineNo">450</span>      if (logs.isEmpty()) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        throw new RuntimeException("recoverLease() must be called before loading data");<a name="line.451"></a>
+<span class="sourceLineNo">451</span>        throw new IllegalStateException("recoverLease() must be called before loading data");<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>      // Nothing to do, If we have only the current log.<a name="line.454"></a>
 <span class="sourceLineNo">455</span>      if (logs.size() == 1) {<a name="line.455"></a>
 <span class="sourceLineNo">456</span>        LOG.debug("No state logs to replay.");<a name="line.456"></a>
 <span class="sourceLineNo">457</span>        loader.setMaxProcId(0);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        return;<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>      // Load the old logs<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      Iterator&lt;ProcedureWALFile&gt; it = logs.descendingIterator();<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      it.next(); // Skip the current log<a name="line.463"></a>
-<span class="sourceLineNo">464</span><a name="line.464"></a>
-<span class="sourceLineNo">465</span>      ProcedureWALFormat.load(it, storeTracker, new ProcedureWALFormat.Loader() {<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>        @Override<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        public void setMaxProcId(long maxProcId) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>          loader.setMaxProcId(maxProcId);<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>        @Override<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        public void load(ProcedureIterator procIter) throws IOException {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>          loader.load(procIter);<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>        @Override<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>          loader.handleCorrupted(procIter);<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>        @Override<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        public void markCorruptedWAL(ProcedureWALFile log, IOException e) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>          if (corruptedLogs == null) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>            corruptedLogs = new HashSet&lt;&gt;();<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          }<a name="line.486"></a>
-<span class="sourceLineNo">487</span>          corruptedLogs.add(log);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>          // TODO: sideline corrupted log<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>    } finally {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      try {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        // try to cleanup inactive wals and complete the operation<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        buildHoldingCleanupTracker();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        tryCleanupLogsOnLoad();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        loading.set(false);<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      } finally {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        lock.unlock();<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><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  private void tryCleanupLogsOnLoad() {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    // nothing to cleanup.<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    if (logs.size() &lt;= 1) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      return;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    }<a name="line.507"></a>
+<span class="sourceLineNo">458</span>        loading.set(false);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        return;<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>      // Load the old logs<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      Iterator&lt;ProcedureWALFile&gt; it = logs.descendingIterator();<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      it.next(); // Skip the current log<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>      ProcedureWALFormat.load(it, storeTracker, new ProcedureWALFormat.Loader() {<a name="line.466"></a>
+<span class="sourceLineNo">467</span><a name="line.467"></a>
+<span class="sourceLineNo">468</span>        @Override<a name="line.468"></a>
+<span class="sourceLineNo">469</span>        public void setMaxProcId(long maxProcId) {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>          loader.setMaxProcId(maxProcId);<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>        @Override<a name="line.473"></a>
+<span class="sourceLineNo">474</span>        public void load(ProcedureIterator procIter) throws IOException {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>          loader.load(procIter);<a name="line.475"></a>
+<span class="sourceLineNo">476</span>        }<a name="line.476"></a>
+<span class="sourceLineNo">477</span><a name="line.477"></a>
+<span class="sourceLineNo">478</span>        @Override<a name="line.478"></a>
+<span class="sourceLineNo">479</span>        public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>          loader.handleCorrupted(procIter);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>        }<a name="line.481"></a>
+<span class="sourceLineNo">482</span><a name="line.482"></a>
+<span class="sourceLineNo">483</span>        @Override<a name="line.483"></a>
+<span class="sourceLineNo">484</span>        public void markCorruptedWAL(ProcedureWALFile log, IOException e) {<a name="line.484"></a>
+<span class="sourceLineNo">485</span>          if (corruptedLogs == null) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>            corruptedLogs = new HashSet&lt;&gt;();<a name="line.486"></a>
+<span class="sourceLineNo">487</span>          }<a name="line.487"></a>
+<span class="sourceLineNo">488</span>          corruptedLogs.add(log);<a name="line.488"></a>
+<span class="sourceLineNo">489</span>          // TODO: sideline corrupted log<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>      // if we fail when loading, we should prevent persisting the storeTracker later in the stop<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      // method. As it may happen that, we have finished constructing the modified and deleted bits,<a name="line.493"></a>
+<span class="sourceLineNo">494</span>      // but before we call resetModified, we fail, then if we persist the storeTracker then when<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      // restarting, we will consider that all procedures have been included in this file and delete<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      // all the previous files. Obviously this not correct. So here we will only set loading to<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      // false when we successfully loaded all the procedures, and when closing we will skip<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      // persisting the store tracker. And also, this will prevent the sync thread to do<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      // periodicRoll, where we may also clean old logs.<a name="line.499"></a>
+<span class="sourceLineNo">500</span>      loading.set(false);<a name="line.500"></a>
+<span class="sourceLineNo">501</span>      // try to cleanup inactive wals and complete the operation<a name="line.501"></a>
+<span class="sourceLineNo">502</span>      buildHoldingCleanupTracker();<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      tryCleanupLogsOnLoad();<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    } finally {<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      lock.unlock();<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>    // the config says to not cleanup wals on load.<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    if (!conf.getBoolean(EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY,<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY)) {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      LOG.debug("WALs cleanup on load is not enabled: " + getActiveLogs());<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      return;<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    }<a name="line.514"></a>
-<span class="sourceLineNo">515</span><a name="line.515"></a>
-<span class="sourceLineNo">516</span>    try {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      periodicRoll();<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    } catch (IOException e) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      LOG.warn("Unable to cleanup logs on load: " + e.getMessage(), e);<a name="line.519"></a>
+<span class="sourceLineNo">509</span>  private void tryCleanupLogsOnLoad() {<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    // nothing to cleanup.<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    if (logs.size() &lt;= 1) {<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      return;<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    }<a name="line.513"></a>
+<span class="sourceLineNo">514</span><a name="line.514"></a>
+<span class="sourceLineNo">515</span>    // the config says to not cleanup wals on load.<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    if (!conf.getBoolean(EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY,<a name="line.516"></a>
+<span class="sourceLineNo">517</span>      DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY)) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      LOG.debug("WALs cleanup on load is not enabled: " + getActiveLogs());<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      return;<a name="line.519"></a>
 <span class="sourceLineNo">520</span>    }<a name="line.520"></a>
-<span class="sourceLineNo">521</span>  }<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>  @Override<a name="line.523"></a>
-<span class="sourceLineNo">524</span>  public void insert(Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    if (LOG.isTraceEnabled()) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      LOG.trace("Insert " + proc + ", subproc=" + Arrays.toString(subprocs));<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    }<a name="line.527"></a>
+<span class="sourceLineNo">521</span><a name="line.521"></a>
+<span class="sourceLineNo">522</span>    try {<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      periodicRoll();<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    } catch (IOException e) {<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      LOG.warn("Unable to cleanup logs on load: " + e.getMessage(), e);<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
+<span class="sourceLineNo">527</span>  }<a name="line.527"></a>
 <span class="sourceLineNo">528</span><a name="line.528"></a>
-<span class="sourceLineNo">529</span>    ByteSlot slot = acquireSlot();<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    try {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      // Serialize the insert<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      long[] subProcIds = null;<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      if (subprocs != null) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        ProcedureWALFormat.writeInsert(slot, proc, subprocs);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        subProcIds = new long[subprocs.length];<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>          subProcIds[i] = subprocs[i].getProcId();<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      } else {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>        assert !proc.hasParent();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        ProcedureWALFormat.writeInsert(slot, proc);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>      // Push the transaction data and wait until it is persisted<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      pushData(PushType.INSERT, slot, proc.getProcId(), subProcIds);<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    } catch (IOException e) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      // We are not able to serialize the procedure.<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      // this is a code error, and we are not able to go on.<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: proc=" +<a name="line.549"></a>
-<span class="sourceLineNo">550</span>          proc + ", subprocs=" + Arrays.toString(subprocs), e);<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      throw new RuntimeException(e);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    } finally {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      releaseSlot(slot);<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>  @Override<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  public void insert(Procedure&lt;?&gt;[] procs) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    if (LOG.isTraceEnabled()) {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      LOG.trace("Insert " + Arrays.toString(procs));<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">529</span>  @Override<a name="line.529"></a>
+<span class="sourceLineNo">530</span>  public void insert(Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs) {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    if (LOG.isTraceEnabled()) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      LOG.trace("Insert " + proc + ", subproc=" + Arrays.toString(subprocs));<a name="line.532"></a>
+<span class="sourceLineNo">533</span>    }<a name="line.533"></a>
+<span class="sourceLineNo">534</span><a name="line.534"></a>
+<span class="sourceLineNo">535</span>    ByteSlot slot = acquireSlot();<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    try {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      // Serialize the insert<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      long[] subProcIds = null;<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      if (subprocs != null) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        ProcedureWALFormat.writeInsert(slot, proc, subprocs);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>        subProcIds = new long[subprocs.length];<a name="line.541"></a>
+<span class="sourceLineNo">542</span>        for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>          subProcIds[i] = subprocs[i].getProcId();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>        }<a name="line.544"></a>
+<span class="sourceLineNo">545</span>      } else {<a name="line.545"></a>
+<span class="sourceLineNo">546</span>        assert !proc.hasParent();<a name="line.546"></a>
+<span class="sourceLineNo">547</span>        ProcedureWALFormat.writeInsert(slot, proc);<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>      // Push the transaction data and wait until it is persisted<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      pushData(PushType.INSERT, slot, proc.getProcId(), subProcIds);<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    } catch (IOException e) {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      // We are not able to serialize the procedure.<a name="line.553"></a>
+<span class="sourceLineNo">554</span>      // this is a code error, and we are not able to go on.<a name="line.554"></a>
+<span class="sourceLineNo">555</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: proc=" +<a name="line.555"></a>
+<span class="sourceLineNo">556</span>          proc + ", subprocs=" + Arrays.toString(subprocs), e);<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      throw new RuntimeException(e);<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    } finally {<a name="line.558"></a>
+<span class="sourceLineNo">559</span>      releaseSlot(slot);<a name="line.559"></a>
+<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  }<a name="line.561"></a>
 <span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    ByteSlot slot = acquireSlot();<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    try {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      // Serialize the insert<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      long[] procIds = new long[procs.length];<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.567"></a>
-<span class="sourceLineNo">568</span>        assert !procs[i].hasParent();<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        procIds[i] = procs[i].getProcId();<a name="line.569"></a>
-<span class="sourceLineNo">570</span>        ProcedureWALFormat.writeInsert(slot, procs[i]);<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>      // Push the transaction data and wait until it is persisted<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      pushData(PushType.INSERT, slot, Procedure.NO_PROC_ID, procIds);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    } catch (IOException e) {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      // We are not able to serialize the procedure.<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      // this is a code error, and we are not able to go on.<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: " +<a name="line.578"></a>
-<span class="sourceLineNo">579</span>          Arrays.toString(procs), e);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      throw new RuntimeException(e);<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    } finally {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      releaseSlot(slot);<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>  @Override<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  public void update(Procedure&lt;?&gt; proc) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    if (LOG.isTraceEnabled()) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      LOG.trace("Update " + proc);<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    }<a name="line.590"></a>
+<span class="sourceLineNo">563</span>  @Override<a name="line.563"></a>
+<span class="sourceLineNo">564</span>  public void insert(Procedure&lt;?&gt;[] procs) {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>    if (LOG.isTraceEnabled()) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      LOG.trace("Insert " + Arrays.toString(procs));<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>    ByteSlot slot = acquireSlot();<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    try {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      // Serialize the insert<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      long[] procIds = new long[procs.length];<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.573"></a>
+<span class="sourceLineNo">574</span>        assert !procs[i].hasParent();<a name="line.574"></a>
+<span class="sourceLineNo">575</span>        procIds[i] = procs[i].getProcId();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>        ProcedureWALFormat.writeInsert(slot, procs[i]);<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>      // Push the transaction data and wait until it is persisted<a name="line.579"></a>
+<span class="sourceLineNo">580</span>      pushData(PushType.INSERT, slot, Procedure.NO_PROC_ID, procIds);<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    } catch (IOException e) {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      // We are not able to serialize the procedure.<a name="line.582"></a>
+<span class="sourceLineNo">583</span>      // this is a code error, and we are not able to go on.<a name="line.583"></a>
+<span class="sourceLineNo">584</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: " +<a name="line.584"></a>
+<span class="sourceLineNo">585</span>          Arrays.toString(procs), e);<a name="line.585"></a>
+<span class="sourceLineNo">586</span>      throw new RuntimeException(e);<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    } finally {<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      releaseSlot(slot);<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    }<a name="line.589"></a>
+<span class="sourceLineNo">590</span>  }<a name="line.590"></a>
 <span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span>    ByteSlot slot = acquireSlot();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    try {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>      // Serialize the update<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      ProcedureWALFormat.writeUpdate(slot, proc);<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span>      // Push the transaction data and wait until it is persisted<a name="line.597"></a>
-<span class="sourceLineNo">598</span>      pushData(PushType.UPDATE, slot, proc.getProcId(), null);<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    } catch (IOException e) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      // We are not able to serialize the procedure.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      // this is a code error, and we are not able to go on.<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      throw new RuntimeException(e);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    } finally {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      releaseSlot(slot);<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    }<a name="line.606"></a>
-<span class="sourceLineNo">607</span>  }<a name="line.607"></a>
-<span class="sourceLineNo">608</span><a name="line.608"></a>
-<span class="sourceLineNo">609</span>  @Override<a name="line.609"></a>
-<span class="sourceLineNo">610</span>  public void delete(long procId) {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    LOG.trace("Delete {}", procId);<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    ByteSlot slot = acquireSlot();<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    try {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      // Serialize the delete<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      ProcedureWALFormat.writeDelete(slot, procId);<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>      // Push the transaction data and wait until it is persisted<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      pushData(PushType.DELETE, slot, procId, null);<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    } catch (IOException e) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      // We are not able to serialize the procedure.<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      // this is a code error, and we are not able to go on.<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + procId, e);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      throw new RuntimeException(e);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    } finally {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      releaseSlot(slot);<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    }<a name="line.626"></a>
-<span class="sourceLineNo">627</span>  }<a name="line.627"></a>
-<span class="sourceLineNo">628</span><a name="line.628"></a>
-<span class="sourceLineNo">629</span>  @Override<a name="line.629"></a>
-<span class="sourceLineNo">630</span>  public void delete(Procedure&lt;?&gt; proc, long[] subProcIds) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    assert proc != null : "expected a non-null procedure";<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    assert subProcIds != null &amp;&amp; subProcIds.length &gt; 0 : "expected subProcIds";<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    if (LOG.isTraceEnabled()) {<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      LOG.trace("Update " + proc + " and Delete " + Arrays.toString(subProcIds));<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>    ByteSlot slot = acquireSlot();<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    try {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      // Serialize the delete<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      ProcedureWALFormat.writeDelete(slot, proc, subProcIds);<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>      // Push the transaction data and wait until it is persisted<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      pushData(PushType.DELETE, slot, proc.getProcId(), subProcIds);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    } catch (IOException e) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      // We are not able to serialize the procedure.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      // this is a code error, and we are not able to go on.<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      throw new RuntimeException(e);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    } finally {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      releaseSlot(slot);<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    }<a name="line.651"></a>
-<span class="sourceLineNo">652</span>  }<a name="line.652"></a>
-<span class="sourceLineNo">653</span><a name="line.653"></a>
-<span class="sourceLineNo">654</span>  @Override<a name="line.654"></a>
-<span class="sourceLineNo">655</span>  public void delete(final long[] procIds, final int offset, final int count) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    if (count == 0) return;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    if (offset == 0 &amp;&amp; count == procIds.length) {<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      delete(procIds);<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    } else if (count == 1) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      delete(procIds[offset]);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    } else {<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      delete(Arrays.copyOfRange(procIds, offset, offset + count));<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><a name="line.665"></a>
-<span class="sourceLineNo">666</span>  private void delete(long[] procIds) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    if (LOG.isTraceEnabled()) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      LOG.trace("Delete " + Arrays.toString(procIds));<a name="line.668"></a>
+<span class="sourceLineNo">592</span>  @Override<a name="line.592"></a>
+<span class="sourceLineNo">593</span>  public void update(Procedure&lt;?&gt; proc) {<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    if (LOG.isTraceEnabled()) {<a name="line.594"></a>
+<span class="sourceLineNo">595</span>      LOG.trace("Update " + proc);<a name="line.595"></a>
+<span class="sourceLineNo">596</span>    }<a name="line.596"></a>
+<span class="sourceLineNo">597</span><a name="line.597"></a>
+<span class="sourceLineNo">598</span>    ByteSlot slot = acquireSlot();<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    try {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>      // Serialize the update<a name="line.600"></a>
+<span class="sourceLineNo">601</span>      ProcedureWALFormat.writeUpdate(slot, proc);<a name="line.601"></a>
+<span class="sourceLineNo">602</span><a name="line.602"></a>
+<span class="sourceLineNo">603</span>      // Push the transaction data and wait until it is persisted<a name="line.603"></a>
+<span class="sourceLineNo">604</span>      pushData(PushType.UPDATE, slot, proc.getProcId(), null);<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    } catch (IOException e) {<a name="line.605"></a>
+<span class="sourceLineNo">606</span>      // We are not able to serialize the procedure.<a name="line.606"></a>
+<span class="sourceLineNo">607</span>      // this is a code error, and we are not able to go on.<a name="line.607"></a>
+<span class="sourceLineNo">608</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      throw new RuntimeException(e);<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    } finally {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>      releaseSlot(slot);<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    }<a name="line.612"></a>
+<span class="sourceLineNo">613</span>  }<a name="line.613"></a>
+<span class="sourceLineNo">614</span><a name="line.614"></a>
+<span class="sourceLineNo">615</span>  @Override<a name="line.615"></a>
+<span class="sourceLineNo">616</span>  public void delete(long procId) {<a name="line.616"></a>
+<span class="sourceLineNo">617</span>    LOG.trace("Delete {}", procId);<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    ByteSlot slot = acquireSlot();<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    try {<a name="line.619"></a>
+<span class="sourceLineNo">620</span>      // Serialize the delete<a name="line.620"></a>
+<span class="sourceLineNo">621</span>      ProcedureWALFormat.writeDelete(slot, procId);<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>      // Push the transaction data and wait until it is persisted<a name="line.623"></a>
+<span class="sourceLineNo">624</span>      pushData(PushType.DELETE, slot, procId, null);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    } catch (IOException e) {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>      // We are not able to serialize the procedure.<a name="line.626"></a>
+<span class="sourceLineNo">627</span>      // this is a code error, and we are not able to go on.<a name="line.627"></a>
+<span class="sourceLineNo">628</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + procId, e);<a name="line.628"></a>
+<span class="sourceLineNo">629</span>      throw new RuntimeException(e);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>    } finally {<a name="line.630"></a>
+<span class="sourceLineNo">631</span>      releaseSlot(slot);<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    }<a name="line.632"></a>
+<span class="sourceLineNo">633</span>  }<a name="line.633"></a>
+<span class="sourceLineNo">634</span><a name="line.634"></a>
+<span class="sourceLineNo">635</span>  @Override<a name="line.635"></a>
+<span class="sourceLineNo">636</span>  public void delete(Procedure&lt;?&gt; proc, long[] subProcIds) {<a name="line.636"></a>
+<span class="sourceLineNo">637</span>    assert proc != null : "expected a non-null procedure";<a name="line.637"></a>
+<span class="sourceLineNo">638</span>    assert subProcIds != null &amp;&amp; subProcIds.length &gt; 0 : "expected subProcIds";<a name="line.638"></a>
+<span class="sourceLineNo">639</span>    if (LOG.isTraceEnabled()) {<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      LOG.trace("Update " + proc + " and Delete " + Arrays.toString(subProcIds));<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>    ByteSlot slot = acquireSlot();<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    try {<a name="line.644"></a>
+<span class="sourceLineNo">645</span>      // Serialize the delete<a name="line.645"></a>
+<span class="sourceLineNo">646</span>      ProcedureWALFormat.writeDelete(slot, proc, subProcIds);<a name="line.646"></a>
+<span class="sourceLineNo">647</span><a name="line.647"></a>
+<span class="sourceLineNo">648</span>      // Push the transaction data and wait until it is persisted<a name="line.648"></a>
+<span class="sourceLineNo">649</span>      pushData(PushType.DELETE, slot, proc.getProcId(), subProcIds);<a name="line.649"></a>
+<span class="sourceLineNo">650</span>    } catch (IOException e) {<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      // We are not able to serialize the procedure.<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      // this is a code error, and we are not able to go on.<a name="line.652"></a>
+<span class="sourceLineNo">653</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      throw new RuntimeException(e);<a name="line.654"></a>
+<span class="sourceLineNo">655</span>    } finally {<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      releaseSlot(slot);<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><a name="line.659"></a>
+<span class="sourceLineNo">660</span>  @Override<a name="line.660"></a>
+<span class="sourceLineNo">661</span>  public void delete(final long[] procIds, final int offset, final int count) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>    if (count == 0) return;<a name="line.662"></a>
+<span class="sourceLineNo">663</span>    if (offset == 0 &amp;&amp; count == procIds.length) {<a name="line.663"></a>
+<span class="sourceLineNo">664</span>      delete(procIds);<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    } else if (count == 1) {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>      delete(procIds[offset]);<a name="line.666"></a>
+<span class="sourceLineNo">667</span>    } else {<a name="line.667"></a>
+<span class="sourceLineNo">668</span>      delete(Arrays.copyOfRange(procIds, offset, offset + count));<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>    final ByteSlot slot = acquireSlot();<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    try {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      // Serialize the delete<a name="line.673"></a>
-<span class="sourceLineNo">674</span>      for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>        ProcedureWALFormat.writeDelete(slot, procIds[i]);<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      }<a name="line.676"></a>
-<span class="sourceLineNo">677</span><a name="line.677"></a>
-<span class="sourceLineNo">678</span>      // Push the transaction data and wait until it is persisted<a name="line.678"></a>
-<span class="sourceLineNo">679</span>      pushData(PushType.DELETE, slot, Procedure.NO_PROC_ID, procIds);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    } catch (IOException e) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      // We are not able to serialize the procedure.<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      // this is a code error, and we are not able to go on.<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      LOG.error("Unable to serialize the procedures: " + Arrays.toString(procIds), e);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>      throw new RuntimeException(e);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    } finally {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      releaseSlot(slot);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>    }<a name="line.687"></a>
-<span class="sourceLineNo">688</span>  }<a name="line.688"></a>
-<span class="sourceLineNo">689</span><a name="line.689"></a>
-<span class="sourceLineNo">690</span>  private ByteSlot acquireSlot() {<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    ByteSlot slot = slotsCache.poll();<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    return slot != null ? slot : new ByteSlot();<a name="line.692"></a>
-<span class="sourceLineNo">693</span>  }<a name="line.693"></a>
-<span class="sourceLineNo">694</span><a name="line.694"></a>
-<span class="sourceLineNo">695</span>  private void releaseSlot(final ByteSlot slot) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    slot.reset();<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    slotsCache.offer(slot);<a name="line.697"></a>
-<span class="sourceLineNo">698</span>  }<a name="line.698"></a>
-<span class="sourceLineNo">699</span><a name="line.699"></a>
-<span class="sourceLineNo">700</span>  private enum PushType { INSERT, UPDATE, DELETE }<a name="line.700"></a>
-<span class="sourceLineNo">701</span><a name="line.701"></a>
-<span class="sourceLineNo">702</span>  private long pushData(final PushType type, final ByteSlot slot,<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      final long procId, final long[] subProcIds) {<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    if (!isRunning()) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      throw new RuntimeException("the store must be running before inserting data");<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    }<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    if (logs.isEmpty()) {<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      throw new RuntimeException("recoverLease() must be called before inserting data");<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    }<a name="line.709"></a>
-<span class="sourceLineNo">710</span><a name="line.710"></a>
-<span class="sourceLineNo">711</span>    long logId = -1;<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    lock.lock();<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    try {<a name="line.713"></a>
-<span class="sourceLineNo">714</span>      // Wait for the sync to be completed<a name="line.714"></a>
-<span class="sourceLineNo">715</span>      while (true) {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        if (!isRunning()) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>          throw new RuntimeException("store no longer running");<a name="line.717"></a>
-<span class="sourceLineNo">718</span>        } else if (isSyncAborted()) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>          throw new RuntimeException("sync aborted", syncException.get());<a name="line.719"></a>
-<span class="sourceLineNo">720</span>        } else if (inSync.get()) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>          syncCond.await();<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        } else if (slotIndex &gt;= syncMaxSlot) {<a name="line.722"></a>
-<span class="sourceLineNo">723</span>          slotCond.signal();<a name="line.723"></a>
-<span class="sourceLineNo">724</span>          syncCond.await();<a name="line.724"></a>
-<span class="sourceLineNo">725</span>        } else {<a name="line.725"></a>
-<span class="sourceLineNo">726</span>          break;<a name="line.726"></a>
-<span class="sourceLineNo">727</span>        }<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      }<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span>      final long pushSyncId = syncId.get();<a name="line.730"></a>
-<span class="sourceLineNo">731</span>      updateStoreTracker(type, procId, subProcIds);<a name="line.731"></a>
-<span class="sourceLineNo">732</span>      slots[slotIndex++] = slot;<a name="line.732"></a>
-<span class="sourceLineNo">733</span>      logId = flushLogId;<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span>      // Notify that there is new data<a name="line.735"></a>
-<span class="sourceLineNo">736</span>      if (slotIndex == 1) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>        waitCond.signal();<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>      // Notify that the slots are full<a name="line.740"></a>
-<span class="sourceLineNo">741</span>      if (slotIndex == syncMaxSlot) {<a name="line.741"></a>
-<span class="sourceLineNo">742</span>        waitCond.signal();<a name="line.742"></a>
-<span class="sourceLineNo">743</span>        slotCond.signal();<a name="line.743"></a>
+<span class="sourceLineNo">670</span>  }<a name="line.670"></a>
+<span class="sourceLineNo">671</span><a name="line.671"></a>
+<span class="sourceLineNo">672</span>  private void delete(long[] procIds) {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>    if (LOG.isTraceEnabled()) {<a name="line.673"></a>
+<span class="sourceLineNo">674</span>      LOG.trace("Delete " + Arrays.toString(procIds));<a name="line.674"></a>
+<span class="sourceLineNo">675</span>    }<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span>    final ByteSlot slot = acquireSlot();<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    try {<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      // Serialize the delete<a name="line.679"></a>
+<span class="sourceLineNo">680</span>      for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span>        ProcedureWALFormat.writeDelete(slot, procIds[i]);<a name="line.681"></a>
+<span class="sourceLineNo">682</span>      }<a name="line.682"></a>
+<span class="sourceLineNo">683</span><a name="line.683"></a>
+<span class="sourceLineNo">684</span>      // Push the transaction data and wait until it is persisted<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      pushData(PushType.DELETE, slot, Procedure.NO_PROC_ID, procIds);<a name="line.685"></a>
+<span class="sourceLineNo">686</span>    } catch (IOException e) {<a name="line.686"></a>
+<span class="sourceLineNo">687</span>      // We are not able to serialize the procedure.<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      // this is a code error, and we are not able to go on.<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      LOG.error("Unable to serialize the procedures: " + Arrays.toString(procIds), e);<a name="line.689"></a>
+<span class="sourceLineNo">690</span>      throw new RuntimeException(e);<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    } finally {<a name="line.691"></a>
+<span class="sourceLineNo">692</span>      releaseSlot(slot);<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    }<a name="line.693"></a>
+<span class="sourceLineNo">694</span>  }<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span>  private ByteSlot acquireSlot() {<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    ByteSlot slot = slotsCache.poll();<a name="line.697"></a>
+<span class="sourceLineNo">698</span>    return slot != null ? slot : new ByteSlot();<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>  private void releaseSlot(final ByteSlot slot) {<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    slot.reset();<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    slotsCache.offer(slot);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>  }<a name="line.704"></a>
+<span class="sourceLineNo">705</span><a name="line.705"></a>
+<span class="sourceLineNo">706</span>  private enum PushType { INSERT, UPDATE, DELETE }<a name="line.706"></a>
+<span class="sourceLineNo">707</span><a name="line.707"></a>
+<span class="sourceLineNo">708</span>  private long pushData(final PushType type, final ByteSlot slot,<a name="line.708"></a>
+<span class="sourceLineNo">709</span>      final long procId, final long[] subProcIds) {<a name="line.709"></a>
+<span class="sourceLineNo">710</span>    if (!isRunning()) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span>      throw new RuntimeException("the store must be running before inserting data");<a name="line.711"></a>
+<span class="sourceLineNo">712</span>    }<a name="line.712"></a>
+<span class="sourceLineNo">713</span>    if (logs.isEmpty()) {<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      throw new RuntimeException("recoverLease() must be called before inserting data");<a name="line.714"></a>
+<span class="sourceLineNo">715</span>    }<a name="line.715"></a>
+<span class="sourceLineNo">716</span><a name="line.716"></a>
+<span class="sourceLineNo">717</span>    long logId = -1;<a name="line.717"></a>
+<span class="sourceLineNo">718</span>    lock.lock();<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    try {<a name="line.719"></a>
+<span class="sourceLineNo">720</span>      // Wait for the sync to be completed<a name="line.720"></a>
+<span class="sourceLineNo">721</span>      while (true) {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>        if (!isRunning()) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>          throw new RuntimeException("store no longer running");<a name="line.723"></a>
+<span class="sourceLineNo">724</span>        } else if (isSyncAborted()) {<a name="line.724"></a>
+<span class="sourceLineNo">725</span>          throw new RuntimeException("sync aborted", syncException.get());<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        } else if (inSync.get()) {<a name="line.726"></a>
+<span class="sourceLineNo">727</span>          syncCond.await();<a name="line.727"></a>
+<span class="sourceLineNo">728</span>        } else if (slotIndex &gt;= syncMaxSlot) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span>          slotCond.signal();<a name="line.729"></a>
+<span class="sourceLineNo">730</span>          syncCond.await();<a name="line.730"></a>
+<span class="sourceLineNo">731</span>        } else {<a name="line.731"></a>
+<span class="sourceLineNo">732</span>          break;<a name="line.732"></a>
+<span class="sourceLineNo">733</span>        }<a name="line.733"></a>
+<span class="sourceLineNo">734</span>      }<a name="line.734"></a>
+<span class="sourceLineNo">735</span><a name="line.735"></a>
+<span class="sourceLineNo">736</span>      final long pushSyncId = syncId.get();<a name="line.736"></a>
+<span class="sourceLineNo">737</span>      updateStoreTracker(type, procId, subProcIds);<a name="line.737"></a>
+<span class="sourceLineNo">738</span>      slots[slotIndex++] = slot;<a name="line.738"></a>
+<span class="sourceLineNo">739</span>      logId = flushLogId;<a name="line.739"></a>
+<span class="sourceLineNo">740</span><a name="line.740"></a>
+<span class="sourceLineNo">741</span>      // Notify that there is new data<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      if (slotIndex == 1) {<a name="line.742"></a>
+<span class="sourceLineNo">743</span>        waitCond.signal();<a name="line.743"></a>
 <span class="sourceLineNo">744</span>      }<a name="line.744"></a>
 <span class="sourceLineNo">745</span><a name="line.745"></a>
-<span class="sourceLineNo">746</span>      while (pushSyncId == syncId.get() &amp;&amp; isRunning()) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        syncCond.await();<a name="line.747"></a>
-<span class="sourceLineNo">748</span>      }<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    } catch (InterruptedException e) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      Thread.currentThread().interrupt();<a name="line.750"></a>
-<span class="sourceLineNo">751</span>      sendAbortProcessSignal();<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      throw new RuntimeException(e);<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    } finally {<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      lock.unlock();<a name="line.754"></a>
-<span class="sourceLineNo">755</span>      if (isSyncAborted()) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span>        throw new RuntimeException("sync aborted", syncException.get());<a name="line.756"></a>
-<span class="sourceLineNo">757</span>      }<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    }<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    return logId;<a name="line.759"></a>
-<span class="sourceLineNo">760</span>  }<a name="line.760"></a>
-<span class="sourceLineNo">761</span><a name="line.761"></a>
-<span class="sourceLineNo">762</span>  private void updateStoreTracker(final PushType type,<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      final long procId, final long[] subProcIds) {<a name="line.763"></a>
-<span class="sourceLineNo">764</span>    switch (type) {<a name="line.764"></a>
-<span class="sourceLineNo">765</span>      case INSERT:<a name="line.765"></a>
-<span class="sourceLineNo">766</span>        if (subProcIds == null) {<a name="line.766"></a>
-<span class="sourceLineNo">767</span>          storeTracker.insert(procId);<a name="line.767"></a>
-<span class="sourceLineNo">768</span>        } else if (procId == Procedure.NO_PROC_ID) {<a name="line.768"></a>
-<span class="sourceLineNo">769</span>          storeTracker.insert(subProcIds);<a name="line.769"></a>
-<span class="sourceLineNo">770</span>        } else {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>          storeTracker.insert(procId, subProcIds);<a name="line.771"></a>
-<span class="sourceLineNo">772</span>          holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.772"></a>
-<span class="sourceLineNo">773</span>        }<a name="line.773"></a>
-<span class="sourceLineNo">774</span>        break;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>      case UPDATE:<a name="line.775"></a>
-<span class="sourceLineNo">776</span>        storeTracker.update(procId);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>        holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.777"></a>
-<span class="sourceLineNo">778</span>        break;<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      case DELETE:<a name="line.779"></a>
-<span class="sourceLineNo">780</span>        if (subProcIds != null &amp;&amp; subProcIds.length &gt; 0) {<a name="line.780"></a>
-<span class="sourceLineNo">781</span>          storeTracker.delete(subProcIds);<a name="line.781"></a>
-<span class="sourceLineNo">782</span>          holdingCleanupTracker.setDeletedIfModified(subProcIds);<a name="line.782"></a>
-<span class="sourceLineNo">783</span>        } else {<a name="line.783"></a>
-<span class="sourceLineNo">784</span>          storeTracker.delete(procId);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>          holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.785"></a>
-<span class="sourceLineNo">786</span>        }<a name="line.786"></a>
-<span class="sourceLineNo">787</span>        break;<a name="line.787"></a>
-<span class="sourceLineNo">788</span>      default:<a name="line.788"></a>
-<span class="sourceLineNo">789</span>        throw new RuntimeException("invalid push type " + type);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    }<a name="line.790"></a>
-<span class="sourceLineNo">791</span>  }<a name="line.791"></a>
-<span class="sourceLineNo">792</span><a name="line.792"></a>
-<span class="sourceLineNo">793</span>  private boolean isSyncAborted() {<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    return syncException.get() != null;<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 void syncLoop() throws Throwable {<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    long totalSyncedToStore = 0;<a name="line.798"></a>
-<span class="sourceLineNo">799</span>    inSync.set(false);<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    lock.lock();<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    try {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>      while (isRunning()) {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>        try {<a name="line.803"></a>
-<span class="sourceLineNo">804</span>          // Wait until new data is available<a name="line.804"></a>
-<span class="sourceLineNo">805</span>          if (slotIndex == 0) {<a name="line.805"></a>
-<span class="sourceLineNo">806</span>            if (!loading.get()) {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>              periodicRoll();<a name="line.807"></a>
-<span class="sourceLineNo">808</span>            }<a name="line.808"></a>
-<span class="sourceLineNo">809</span><a name="line.809"></a>
-<span class="sourceLineNo">810</span>            if (LOG.isTraceEnabled()) {<a name="line.810"></a>
-<span class="sourceLineNo">811</span>              float rollTsSec = getMillisFromLastRoll() / 1000.0f;<a name="line.811"></a>
-<span class="sourceLineNo">812</span>              LOG.trace(String.format("Waiting for data. flushed=%s (%s/sec)",<a name="line.812"></a>
-<span class="sourceLineNo">813</span>                        StringUtils.humanSize(totalSynced.get()),<a name="line.813"></a>
-<span class="sourceLineNo">814</span>                        StringUtils.humanSize(totalSynced.get() / rollTsSec)));<a name="line.814"></a>
-<span class="sourceLineNo">815</span>            }<a name="line.815"></a>
-<span class="sourceLineNo">816</span><a name="line.816"></a>
-<span class="sourceLineNo">817</span>            waitCond.await(getMillisToNextPeriodicRoll(), TimeUnit.MILLISECONDS);<a name="line.817"></a>
-<span class="sourceLineNo">818</span>            if (slotIndex == 0) {<a name="line.818"></a>
-<span class="sourceLineNo">819</span>              // no data.. probably a stop() or a periodic roll<a name="line.819"></a>
-<span class="sourceLineNo">820</span>              continue;<a name="line.820"></a>
+<span class="sourceLineNo">746</span>      // Notify that the slots are full<a name="line.746"></a>
+<span class="sourceLineNo">747</span>      if (slotIndex == syncMaxSlot) {<a name="line.747"></a>
+<span class="sourceLineNo">748</span>        waitCond.signal();<a name="line.748"></a>
+<span class="sourceLineNo">749</span>        slotCond.signal();<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>      while (pushSyncId == syncId.get() &amp;&amp; isRunning()) {<a name="line.752"></a>
+<span class="sourceLineNo">753</span>        syncCond.await();<a name="line.753"></a>
+<span class="sourceLineNo">754</span>      }<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    } catch (InterruptedException e) {<a name="line.755"></a>
+<span class="sourceLineNo">756</span>      Thread.currentThread().interrupt();<a name="line.756"></a>
+<span class="sourceLineNo">757</span>      sendAbortProcessSignal();<a name="line.757"></a>
+<span class="sourceLineNo">758</span>      throw new RuntimeException(e);<a name="line.758"></a>
+<span class="sourceLineNo">759</span>    } finally {<a name="line.759"></a>
+<span class="sourceLineNo">760</span>      lock.unlock();<a name="line.760"></a>
+<span class="sourceLineNo">761</span>      if (isSyncAborted()) {<a name="line.761"></a>
+<span class="sourceLineNo">762</span>        throw new RuntimeException("sync aborted", syncException.get());<a name="line.762"></a>
+<span class="sourceLineNo">763</span>      }<a name="line.763"></a>
+<span class="sourceLineNo">764</span>    }<a name="line.764"></a>
+<span class="sourceLineNo">765</span>    return logId;<a name="line.765"></a>
+<span class="sourceLineNo">766</span>  }<a name="line.766"></a>
+<span class="sourceLineNo">767</span><a name="line.767"></a>
+<span class="sourceLineNo">768</span>  private void updateStoreTracker(final PushType type,<a name="line.768"></a>
+<span class="sourceLineNo">769</span>      final long procId, final long[] subProcIds) {<a name="line.769"></a>
+<span class="sourceLineNo">770</span>    switch (type) {<a name="line.770"></a>
+<span class="sourceLineNo">771</span>      case INSERT:<a name="line.771"></a>
+<span class="sourceLineNo">772</span>        if (subProcIds == null) {<a name="line.772"></a>
+<span class="sourceLineNo">773</span>          storeTracker.insert(procId);<a name="line.773"></a>
+<span class="sourceLineNo">774</span>        } else if (procId == Procedure.NO_PROC_ID) {<a name="line.774"></a>
+<span class="sourceLineNo">775</span>          storeTracker.insert(subProcIds);<a name="line.775"></a>
+<span class="sourceLineNo">776</span>        } else {<a name="line.776"></a>
+<span class="sourceLineNo">777</span>          storeTracker.insert(procId, subProcIds);<a name="line.777"></a>
+<span class="sourceLineNo">778</span>          holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.778"></a>
+<span class="sourceLineNo">779</span>        }<a name="line.779"></a>
+<span class="sourceLineNo">780</span>        break;<a name="line.780"></a>
+<span class="sourceLineNo">781</span>      case UPDATE:<a name="line.781"></a>
+<span class="sourceLineNo">782</span>        storeTracker.update(procId);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>        holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.783"></a>
+<span class="sourceLineNo">784</span>        break;<a name="line.784"></a>
+<span class="sourceLineNo">785</span>      case DELETE:<a name="line.785"></a>
+<span class="sourceLineNo">786</span>        if (subProcIds != null &amp;&amp; subProcIds.length &gt; 0) {<a name="line.786"></a>
+<span class="sourceLineNo">787</span>          storeTracker.delete(subProcIds);<a name="line.787"></a>
+<span class="sourceLineNo">788</span>          holdingCleanupTracker.setDeletedIfModified(subProcIds);<a name="line.788"></a>
+<span class="sourceLineNo">789</span>        } else {<a name="line.789"></a>
+<span class="sourceLineNo">790</span>          storeTracker.delete(procId);<a name="line.790"></a>
+<span class="sourceLineNo">791</span>          holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.791"></a>
+<span class="sourceLineNo">792</span>        }<a name="line.792"></a>
+<span class="sourceLineNo">793</span>        break;<a name="line.793"></a>
+<span class="sourceLineNo">794</span>      default:<a name="line.794"></a>
+<span class="sourceLineNo">795</span>        throw new RuntimeException("invalid push type " + type);<a name="line.795"></a>
+<span class="sourceLineNo">796</span>    }<a name="line.796"></a>
+<span class="sourceLineNo">797</span>  }<a name="line.797"></a>
+<span class="sourceLineNo">798</span><a name="line.798"></a>
+<span class="sourceLineNo">799</span>  private boolean isSyncAborted() {<a name="line.799"></a>
+<span class="sourceLineNo">800</span>    return syncException.get() != null;<a name="line.800"></a>
+<span class="sourceLineNo">801</span>  }<a name="line.801"></a>
+<span class="sourceLineNo">802</span><a name="line.802"></a>
+<span class="sourceLineNo">803</span>  private void syncLoop() throws Throwable {<a name="line.803"></a>
+<span class="sourceLineNo">804</span>    long totalSyncedToStore = 0;<a name="line.804"></a>
+<span class="sourceLineNo">805</span>    inSync.set(false);<a name="line.805"></a>
+<span class="sourceLineNo">806</span>    lock.lock();<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    try {<a name="line.807"></a>
+<span class="sourceLineNo">808</span>      while (isRunning()) {<a name="line.808"></a>
+<span class="sourceLineNo">809</span>        try {<a name="line.809"></a>
+<span class="sourceLineNo">810</span>          // Wait until new data is available<a name="line.810"></a>
+<span class="sourceLineNo">811</span>          if (slotIndex == 0) {<a name="line.811"></a>
+<span class="sourceLineNo">812</span>            if (!loading.get()) {<a name="line.812"></a>
+<span class="sourceLineNo">813</span>              periodicRoll();<a name="line.813"></a>
+<span class="sourceLineNo">814</span>            }<a name="line.814"></a>
+<span class="sourceLineNo">815</span><a name="line.815"></a>
+<span class="sourceLineNo">816</span>            if (LOG.isTraceEnabled()) {<a name="line.816"></a>
+<span class="sourceLineNo">817</span>              float rollTsSec = getMillisFromLastRoll() / 1000.0f;<a name="line.817"></a>
+<span class="sourceLineNo">818</span>              LOG.trace(String.format("Waiting for data. flushed=%s (%s/sec)",<a name="line.818"></a>
+<span class="sourceLineNo">819</span>                        StringUtils.humanSize(totalSynced.get()),<a name="line.819"></a>
+<span class="sourceLineNo">820</span>                        StringUtils.humanSize(totalSynced.get() / rollTsSec)));<a name="line.820"></a>
 <span class="sourceLineNo">821</span>            }<a name="line.821"></a>
-<span class="sourceLineNo">822</span>          }<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          // Wait SYNC_WAIT_MSEC or the signal of "slots full" before flushing<a name="line.823"></a>
-<span class="sourceLineNo">824</span>          syncMaxSlot = runningProcCount;<a name="line.824"></a>
-<span class="sourceLineNo">825</span>          assert syncMaxSlot &gt; 0 : "unexpected syncMaxSlot=" + syncMaxSlot;<a name="line.825"></a>
-<span class="sourceLineNo">826</span>          final long syncWaitSt = System.currentTimeMillis();<a name="line.826"></a>
-<span class="sourceLineNo">827</span>          if (slotIndex != syncMaxSlot) {<a name="line.827"></a>
-<span class="sourceLineNo">828</span>            slotCond.await(syncWaitMsec, TimeUnit.MILLISECONDS);<a name="line.828"></a>
-<span class="sourceLineNo">829</span>          }<a name="line.829"></a>
-<span class="sourceLineNo">830</span><a name="line.830"></a>
-<span class="sourceLineNo">831</span>          final long currentTs = System.currentTimeMillis();<a name="line.831"></a>
-<span class="sourceLineNo">832</span>          final long syncWaitMs = currentTs - syncWaitSt;<a name="line.832"></a>
-<span class="sourceLineNo">833</span>          final float rollSec = getMillisFromLastRoll() / 1000.0f;<a name="line.833"></a>
-<span class="sourceLineNo">834</span>          final float syncedPerSec = totalSyncedToStore / rollSec;<a name="line.834"></a>
-<span class="sourceLineNo">835</span>          if (LOG.isTraceEnabled() &amp;&amp; (syncWaitMs &gt; 10 || slotIndex &lt; syncMaxSlot)) {<a name="line.835"></a>
-<span class="sourceLineNo">836</span>            LOG.trace(String.format("Sync wait %s, slotIndex=%s , totalSynced=%s (%s/sec)",<a name="line.836"></a>
-<span class="sourceLineNo">837</span>                      StringUtils.humanTimeDiff(syncWaitMs), slotIndex,<a name="line.837"></a>
-<span class="sourceLineNo">838</span>                      StringUtils.humanSize(totalSyncedToStore),<a name="line.838"></a>
-<span class="sourceLineNo">839</span>                      StringUtils.humanSize(syncedPerSec)));<a name="line.839"></a>
-<span class="sourceLineNo">840</span>          }<a name="line.840"></a>
-<span class="sourceLineNo">841</span><a name="line.841"></a>
-<span class="sourceLineNo">842</span>          // update webui circular buffers (TODO: get rid of allocations)<a name="line.842"></a>
-<span class="sourceLineNo">843</span>          final SyncMetrics syncMetrics = new SyncMetrics();<a name="line.843"></a>
-<span class="sourceLineNo">844</span>          syncMetrics.timestamp = currentTs;<a name="line.844"></a>
-<span class="sourceLineNo">845</span>          syncMetrics.syncWaitMs = syncWaitMs;<a name="line.845"></a>
-<span class="sourceLineNo">846</span>          syncMetrics.syncedEntries = slotIndex;<a name="line.846"></a>
-<span class="sourceLineNo">847</span>          syncMetrics.totalSyncedBytes = totalSyncedToStore;<a name="line.847"></a>
-<span class="sourceLineNo">848</span>          syncMetrics.syncedPerSec = syncedPerSec;<a name="line.848"></a>
-<span class="sourceLineNo">849</span>          syncMetricsQueue.add(syncMetrics);<a name="line.849"></a>
-<span class="sourceLineNo">850</span><a name="line.850"></a>
-<span class="sourceLineNo">851</span>          // sync<a name="line.851"></a>
-<span class="sourceLineNo">852</span>          inSync.set(true);<a name="line.852"></a>
-<span class="sourceLineNo">853</span>          long slotSize = syncSlots();<a name="line.853"></a>
-<span class="sourceLineNo">854</span>          logs.getLast().addToSize(slotSize);<a name="line.854"></a>
-<span class="sourceLineNo">855</span>          totalSyncedToStore = totalSynced.addAndGet(slotSize);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>          slotIndex = 0;<a name="line.856"></a>
-<span class="sourceLineNo">857</span>          inSync.set(false);<a name="line.857"></a>
-<span class="sourceLineNo">858</span>          syncId.incrementAndGet();<a name="line.858"></a>
-<span class="sourceLineNo">859</span>        } catch (InterruptedException e) {<a name="line.859"></a>
-<span class="sourceLineNo">860</span>          Thread.currentThread().interrupt();<a name="line.860"></a>
-<span class="sourceLineNo">861</span>          syncException.compareAndSet(null, e);<a name="line.861"></a>
-<span class="sourceLineNo">862</span>          sendAbortProcessSignal();<a name="line.862"></a>
-<span class="sourceLineNo">863</span>          throw e;<a name="line.863"></a>
-<span class="sourceLineNo">864</span>        } catch (Throwable t) {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>          syncException.compareAndSet(null, t);<a name="line.865"></a>
-<span class="sourceLineNo">866</span>          sendAbortProcessSignal();<a name="line.866"></a>
-<span class="sourceLineNo">867</span>          throw t;<a name="line.867"></a>
-<span class="sourceLineNo">868</span>        } finally {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>          syncCond.signalAll();<a name="line.869"></a>
-<span class="sourceLineNo">870</span>        }<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      }<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    } finally {<a name="line.872"></a>
-<span class="sourceLineNo">873</span>      lock.unlock();<a name="line.873"></a>
-<span class="sourceLineNo">874</span>    }<a name="line.874"></a>
-<span class="sourceLineNo">875</span>  }<a name="line.875"></a>
-<span class="sourceLineNo">876</span><a name="line.876"></a>
-<span class="sourceLineNo">877</span>  public ArrayList&lt;SyncMetrics&gt; getSyncMetrics() {<a name="line.877"></a>
-<span class="sourceLineNo">878</span>    lock.lock();<a name="line.878"></a>
-<span class="sourceLineNo">879</span>    try {<a name="line.879"></a>
-<span class="sourceLineNo">880</span>      return new ArrayList&lt;&gt;(syncMetricsQueue);<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    } finally {<a name="line.881"></a>
-<span class="sourceLineNo">882</span>      lock.unlock();<a name="line.882"></a>
-<span class="sourceLineNo">883</span>    }<a name="line.883"></a>
-<span class="sourceLineNo">884</span>  }<a name="line.884"></a>
-<span class="sourceLineNo">885</span><a name="line.885"></a>
-<span class="sourceLineNo">886</span>  private long syncSlots() throws Throwable {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    int retry = 0;<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    int logRolled = 0;<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    long totalSynced = 0;<a name="line.889"></a>
-<span class="sourceLineNo">890</span>    do {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>      try {<a name="line.891"></a>
-<span class="sourceLineNo">892</span>        totalSynced = syncSlots(stream, slots, 0, slotIndex);<a name="line.892"></a>
-<span class="sourceLineNo">893</span>        break;<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      } catch (Throwable e) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span>        LOG.warn("unable to sync slots, retry=" + retry);<a name="line.895"></a>
-<span class="sourceLineNo">896</span>        if (++retry &gt;= maxRetriesBeforeRoll) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>          if (logRolled &gt;= maxSyncFailureRoll &amp;&amp; isRunning()) {<a name="line.897"></a>
-<span class="sourceLineNo">898</span>            LOG.error("Sync slots after log roll failed, abort.", e);<a name="line.898"></a>
-<span class="sourceLineNo">899</span>            throw e;<a name="line.899"></a>
-<span class="sourceLineNo">900</span>          }<a name="line.900"></a>
-<span class="sourceLineNo">901</span><a name="line.901"></a>
-<span class="sourceLineNo">902</span>          if (!rollWriterWithRetries()) {<a name="line.902"></a>
-<span class="sourceLineNo">903</span>            throw e;<a name="line.903"></a>
-<span class="sourceLineNo">904</span>          }<a name="line.904"></a>
-<span class="sourceLineNo">905</span><a name="line.905"></a>
-<span class="sourceLineNo">906</span>          logRolled++;<a name="line.906"></a>
-<span class="sourceLineNo">907</span>          retry = 0;<a name="line.907"></a>
-<span class="sourceLineNo">908</span>        }<a name="line.908"></a>
-<span class="sourceLineNo">909</span>      }<a name="line.909"></a>
-<span class="sourceLineNo">910</span>    } while (isRunning());<a name="line.910"></a>
-<span class="sourceLineNo">911</span>    return totalSynced;<a name="line.911"></a>
-<span class="sourceLineNo">912</span>  }<a name="line.912"></a>
-<span class="sourceLineNo">913</span><a name="line.913"></a>
-<span class="sourceLineNo">914</span>  protected long syncSlots(final FSDataOutputStream stream, final ByteSlot[] slots,<a name="line.914"></a>
-<span class="sourceLineNo">915</span>      final int offset, final int count) throws IOException {<a name="line.915"></a>
-<span class="sourceLineNo">916</span>    long totalSynced = 0;<a name="line.916"></a>
-<span class="sourceLineNo">917</span>    for (int i = 0; i &lt; count; ++i) {<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      final ByteSlot data = slots[offset + i];<a name="line.918"></a>
-<span class="sourceLineNo">919</span>      data.writeTo(stream);<a name="line.919"></a>
-<span class="sourceLineNo">920</span>      totalSynced += data.size();<a name="line.920"></a>
-<span class="sourceLineNo">921</span>    }<a name="line.921"></a>
-<span class="sourceLineNo">922</span><a name="line.922"></a>
-<span class="sourceLineNo">923</span>    syncStream(stream);<a name="line.923"></a>
-<span class="sourceLineNo">924</span>    sendPostSyncSignal();<a name="line.924"></a>
-<span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>    if (LOG.isTraceEnabled()) {<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      LOG.trace("Sync slots=" + count + '/' + syncMaxSlot +<a name="line.927"></a>
-<span class="sourceLineNo">928</span>                ", flushed=" + StringUtils.humanSize(totalSynced));<a name="line.928"></a>
-<span class="sourceLineNo">929</span>    }<a name="line.929"></a>
-<span class="sourceLineNo">930</span>    return totalSynced;<a name="line.930"></a>
-<span class="sourceLineNo">931</span>  }<a name="line.931"></a>
-<span class="sourceLineNo">932</span><a name="line.932"></a>
-<span class="sourceLineNo">933</span>  protected void syncStream(final FSDataOutputStream stream) throws IOException {<a name="line.933"></a>
-<span class="sourceLineNo">934</span>    if (useHsync) {<a name="line.934"></a>
-<span class="sourceLineNo">935</span>      stream.hsync();<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    } else {<a name="line.936"></a>
-<span class="sourceLineNo">937</span>      stream.hflush();<a name="line.937"></a>
-<span class="sourceLineNo">938</span>    }<a name="line.938"></a>
-<span class="sourceLineNo">939</span>  }<a name="line.939"></a>
-<span class="sourceLineNo">940</span><a name="line.940"></a>
-<span class="sourceLineNo">941</span>  private boolean rollWriterWithRetries() {<a name="line.941"></a>
-<span class="sourceLineNo">942</span>    for (int i = 0; i &lt; rollRetries &amp;&amp; isRunning(); ++i) {<a name="line.942"></a>
-<span class="sourceLineNo">943</span>      if (i &gt; 0) Threads.sleepWithoutInterrupt(waitBeforeRoll * i);<a name="line.943"></a>
-<span class="sourceLineNo">944</span><a name="line.944"></a>
-<span class="sourceLineNo">945</span>      try {<a name="line.945"></a>
-<span class="sourceLineNo">946</span>        if (rollWriter()) {<a name="line.946"></a>
-<span class="sourceLineNo">947</span>          return true;<a name="line.947"></a>
-<span class="sourceLineNo">948</span>        }<a name="line.948"></a>
-<span class="sourceLineNo">949</span>      } catch (IOException e) {<a name="line.949"></a>
-<span class="sourceLineNo">950</span>        LOG.warn("Unable to roll the log, attempt=" + (i + 1), e);<a name="line.950"></a>
-<span class="sourceLineNo">951</span>      }<a name="line.951"></a>
-<span class="sourceLineNo">952</span>    }<a name="line.952"></a>
-<span class="sourceLineNo">953</span>    LOG.error(HBaseMarkers.FATAL, "Unable to roll the log");<a name="line.953"></a>
-<span class="sourceLineNo">954</span>    return false;<a name="line.954"></a>
-<span class="sourceLineNo">955</span>  }<a name="line.955"></a>
-<span class="sourceLineNo">956</span><a name="line.956"></a>
-<span class="sourceLineNo">957</span>  private boolean tryRollWriter() {<a name="line.957"></a>
-<span class="sourceLineNo">958</span>    try {<a name="line.958"></a>
-<span class="sourceLineNo">959</span>      return rollWriter();<a name="line.959"></a>
-<span class="sourceLineNo">960</span>    } catch (IOException e) {<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      LOG.warn("Unable to roll the log", e);<a name="line.961"></a>
-<span class="sourceLineNo">962</span>      return false;<a name="line.962"></a>
-<span class="sourceLineNo">963</span>    }<a name="line.963"></a>
-<span class="sourceLineNo">964</span>  }<a name="line.964"></a>
-<span class="sourceLineNo">965</span><a name="line.965"></a>
-<span class="sourceLineNo">966</span>  public long getMillisToNextPeriodicRoll() {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    if (lastRollTs.get() &gt; 0 &amp;&amp; periodicRollMsec &gt; 0) {<a name="line.967"></a>
-<span class="sourceLineNo">968</span>      return periodicRollMsec - getMillisFromLastRoll();<a name="line.968"></a>
+<span class="sourceLineNo">822</span><a name="line.822"></a>
+<span class="sourceLineNo">823</span>            waitCond.await(getMillisToNextPeriodicRoll(), TimeUnit.MILLISECONDS);<a name="line.823"></a>
+<span class="sourceLineNo">824</span>            if (slotIndex == 0) {<a name="line.824"></a>
+<span class="sourceLineNo">825</span>              // no data.. probably a stop() or a periodic roll<a name="line.825"></a>
+<span class="sourceLineNo">826</span>              continue;<a name="line.826"></a>
+<span class="sourceLineNo">827</span>            }<a name="line.827"></a>
+<span class="sourceLineNo">828</span>          }<a name="line.828"></a>
+<span class="sourceLineNo">829</span>          // Wait SYNC_WAIT_MSEC or the signal of "slots full" before flushing<a name="line.829"></a>
+<span class="sourceLineNo">830</span>          syncMaxSlot = runningProcCount;<a name="line.830"></a>
+<span class="sourceLineNo">831</span>          assert syncMaxSlot &gt; 0 : "unexpected syncMaxSlot=" + syncMaxSlot;<a name="line.831"></a>
+<span class="sourceLineNo">832</span>          final long syncWaitSt = System.currentTimeMillis();<a name="line.832"></a>
+<span class="sourceLineNo">833</span>          if (slotIndex != syncMaxSlot) {<a name="line.833"></a>
+<span class="sourceLineNo">834</span>            slotCond.await(syncWaitMsec, TimeUnit.MILLISECONDS);<a name="line.834"></a>
+<span class="sourceLineNo">835</span>          }<a name="line.835"></a>
+<span class="sourceLineNo">836</span><a name="line.836"></a>
+<span class="sourceLineNo">837</span>          final long currentTs = System.currentTimeMillis();<a name="line.837"></a>
+<span class="sourceLineNo">838</span>          final long syncWaitMs = currentTs - syncWaitSt;<a name="line.838"></a>
+<span class="sourceLineNo">839</span>          final float rollSec = getMillisFromLastRoll() / 1000.0f;<a name="line.839"></a>
+<span class="sourceLineNo">840</span>          final float syncedPerSec = totalSyncedToStore / rollSec;<a name="line.840"></a>
+<span class="sourceLineNo">841</span>          if (LOG.isTraceEnabled() &amp;&amp; (syncWaitMs &gt; 10 || slotIndex &lt; syncMaxSlot)) {<a name="line.841"></a>
+<span class="sourceLineNo">842</span>            LOG.trace(String.format("Sync wait %s, slotIndex=%s , totalSynced=%s (%s/sec)",<a name="line.842"></a>
+<span class="sourceLineNo">843</span>                      StringUtils.humanTimeDiff(syncWaitMs), slotIndex,<a name="line.843"></a>
+<span class="sourceLineNo">844</span>                      StringUtils.humanSize(totalSyncedToStore),<a name="line.844"></a>
+<span class="sourceLineNo">845</span>                      StringUtils.humanSize(syncedPerSec)));<a name="line.845"></a>
+<span class="sourceLineNo">846</span>          }<a name="line.846"></a>
+<span class="sourceLineNo">847</span><a name="line.847"></a>
+<span class="sourceLineNo">848</span>          // update webui circular buffers (TODO: get rid of allocations)<a name="line.848"></a>
+<span class="sourceLineNo">849</span>          final SyncMetrics syncMetrics = new SyncMetrics();<a name="line.849"></a>
+<span class="sourceLineNo">850</span>          syncMetrics.timestamp = currentTs;<a name="line.850"></a>
+<span class="sourceLineNo">851</span>          syncMetrics.syncWaitMs = syncWaitMs;<a name="line.851"></a>
+<span class="sourceLineNo">852</span>          syncMetrics.syncedEntries = slotIndex;<a name="line.852"></a>
+<span class="sourceLineNo">853</span>          syncMetrics.totalSyncedBytes = totalSyncedToStore;<a name="line.853"></a>
+<span class="sourceLineNo">854</span>          syncMetrics.syncedPerSec = syncedPerSec;<a name="line.854"></a>
+<span class="sourceLineNo">855</span>          syncMetricsQueue.add(syncMetrics);<a name="line.855"></a>
+<span class="sourceLineNo">856</span><a name="line.856"></a>
+<span class="sourceLineNo">857</span>          // sync<a name="line.857"></a>
+<span class="sourceLineNo">858</span>          inSync.set(true);<a name="line.858"></a>
+<span class="sourceLineNo">859</span>          long slotSize = syncSlots();<a name="line.859"></a>
+<span class="sourceLineNo">860</span>          logs.getLast().addToSize(slotSize);<a name="line.860"></a>
+<span class="sourceLineNo">861</span>          totalSyncedToStore = totalSynced.addAndGet(slotSize);<a name="line.861"></a>
+<span class="sourceLineNo">862</span>          slotIndex = 0;<a name="line.862"></a>
+<span class="sourceLineNo">863</span>          inSync.set(false);<a name="line.863"></a>
+<span class="sourceLineNo">864</span>          syncId.incrementAndGet();<a name="line.864"></a>
+<span class="sourceLineNo">865</span>        } catch (InterruptedException e) {<a name="line.865"></a>
+<span class="sourceLineNo">866</span>          Thread.currentThread().interrupt();<a name="line.866"></a>
+<span class="sourceLineNo">867</span>          syncException.compareAndSet(null, e);<a name="line.867"></a>
+<span class="sourceLineNo">868</span>          sendAbortProcessSignal();<a name="line.868"></a>
+<span class="sourceLineNo">869</span>          throw e;<a name="line.869"></a>
+<span class="sourceLineNo">870</span>        } catch (Throwable t) {<a name="line.870"></a>
+<span class="sourceLineNo">871</span>          syncException.compareAndSet(null, t);<a name="line.871"></a>
+<span class="sourceLineNo">872</span>          sendAbortProcessSignal();<a name="line.872"></a>
+<span class="sourceLineNo">873</span>          throw t;<a name="line.873"></a>
+<span class="sourceLineNo">874</span>        } finally {<a name="line.874"></a>
+<span class="sourceLineNo">875</span>          syncCond.signalAll();<a name="line.875"></a>
+<span class="sourceLineNo">876</span>        }<a name="line.876"></a>
+<span class="sourceLineNo">877</span>      }<a name="line.877"></a>
+<span class="sourceLineNo">878</span>    } finally {<a name="line.878"></a>
+<span class="sourceLineNo">879</span>      lock.unlock();<a name="line.879"></a>
+<span class="sourceLineNo">880</span>    }<a name="line.880"></a>
+<span class="sourceLineNo">881</span>  }<a name="line.881"></a>
+<span class="sourceLineNo">882</span><a name="line.882"></a>
+<span class="sourceLineNo">883</span>  public ArrayList&lt;SyncMetrics&gt; getSyncMetrics() {<a name="line.883"></a>
+<span class="sourceLineNo">884</span>    lock.lock();<a name="line.884"></a>
+<span class="sourceLineNo">885</span>    try {<a name="line.885"></a>
+<span class="sourceLineNo">886</span>      return new ArrayList&lt;&gt;(syncMetricsQueue);<a name="line.886"></a>
+<span class="sourceLineNo">887</span>    } finally {<a name="line.887"></a>
+<span class="sourceLineNo">888</span>      lock.unlock();<a name="line.888"></a>
+<span class="sourceLineNo">889</span>    }<a name="line.889"></a>
+<span class="sourceLineNo">890</span>  }<a name="line.890"></a>
+<span class="sourceLineNo">891</span><a name="line.891"></a>
+<span class="sourceLineNo">892</span>  private long syncSlots() throws Throwable {<a name="line.892"></a>
+<span class="sourceL

<TRUNCATED>

[02/11] hbase-site git commit: Published site at 405bf5e6383a09f435baadbac6c389e9f6c43ac6.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/testdevapidocs/org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html
new file mode 100644
index 0000000..11faf99
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html
@@ -0,0 +1,421 @@
+<!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>TestLoadProcedureError.TestProcedure (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="TestLoadProcedureError.TestProcedure (Apache HBase 3.0.0-SNAPSHOT Test 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/TestLoadProcedureError.TestProcedure.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/master/TestMaster.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html" target="_top">Frames</a></li>
+<li><a href="TestLoadProcedureError.TestProcedure.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.procedure2.Procedure">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.procedure2.Procedure">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.master</div>
+<h2 title="Class TestLoadProcedureError.TestProcedure" class="title">Class TestLoadProcedureError.TestProcedure</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.Procedure&lt;TEnv&gt;</li>
+<li>
+<ul class="inheritance">
+<li><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.NoopProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.NoopProcedure</a>&lt;org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&gt;</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.master.TestLoadProcedureError.TestProcedure</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;org.apache.hadoop.hbase.procedure2.Procedure&lt;org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&gt;&gt;, org.apache.hadoop.hbase.master.procedure.TableProcedureInterface</dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError</a></dd>
+</dl>
+<hr>
+<br>
+<pre>public static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.html#line.63">TestLoadProcedureError.TestProcedure</a>
+extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.NoopProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureTestingUtility.NoopProcedure</a>&lt;org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&gt;
+implements org.apache.hadoop.hbase.master.procedure.TableProcedureInterface</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.procedure2.Procedure">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
+<code>org.apache.hadoop.hbase.procedure2.Procedure.LockState</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.org.apache.hadoop.hbase.master.procedure.TableProcedureInterface">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from interface&nbsp;org.apache.hadoop.hbase.master.procedure.TableProcedureInterface</h3>
+<code>org.apache.hadoop.hbase.master.procedure.TableProcedureInterface.TableOperationType</code></li>
+</ul>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.procedure2.Procedure">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
+<code>NO_PROC_ID, NO_TIMEOUT</code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html#TestProcedure--">TestProcedure</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html#afterReplay-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">afterReplay</a></span>(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&nbsp;env)</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>protected org.apache.hadoop.hbase.procedure2.Procedure&lt;org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&gt;[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html#execute-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">execute</a></span>(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&nbsp;env)</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>org.apache.hadoop.hbase.TableName</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html#getTableName--">getTableName</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>org.apache.hadoop.hbase.master.procedure.TableProcedureInterface.TableOperationType</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html#getTableOperationType--">getTableOperationType</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html#setTimeoutFailure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">setTimeoutFailure</a></span>(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&nbsp;env)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.NoopProcedure">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.NoopProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureTestingUtility.NoopProcedure</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.NoopProcedure.html#abort-TEnv-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.NoopProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.NoopProcedure.html#rollback-TEnv-">rollback</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.NoopProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData</a></code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.Procedure">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.Procedure</h3>
+<code>acquireLock, addStackIndex, beforeReplay, bypass, compareTo, completionCleanup, doExecute, doRollback, elapsedTime, getChildrenLatch, getException, getLastUpdate, getNonceKey, getOwner, getParentProcId, getProcedureMetrics, getProcId, getProcIdHashCode, getProcName, getResult, getRootProcedureId, getRootProcId, getStackIndexes, getState, getSubmittedTime, getTimeout, getTimeoutTimestamp, hasChildren, hasException, hasLock, hasOwner, hasParent, hasTimeout, haveSameParent, holdLock, incChildrenLatch, isBypass, isFailed, isFinished, isInitializing, isLockedWhenLoading, isRunnable, isSuccess, isWaiting, isYieldAfterExecutionStep, releaseLock, removeStackIndex, setAbortFailure, setChildrenLatch, setFailure, setFailure, setLastUpdate, setNonceKey, setOwner, setOwner, setParentProcId, setProcId, setResult, setRootProcId, setStackIndexes, setState, setSubmittedTime, setTimeout, shouldWaitClientAck, skipPersistence, toString, toStringClass, toStringClassDetails, toStringDetails, toStri
 ngSimpleSB, toStringState, updateMetricsOnFinish, updateMetricsOnSubmit, updateTimestamp, waitInitialized, wasExecuted</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="TestProcedure--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestProcedure</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html#line.63">TestProcedure</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="execute-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>execute</h4>
+<pre>protected&nbsp;org.apache.hadoop.hbase.procedure2.Procedure&lt;org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&gt;[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html#line.67">execute</a>(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&nbsp;env)
+                                                                                                                       throws org.apache.hadoop.hbase.procedure2.ProcedureYieldException,
+                                                                                                                              org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException,
+                                                                                                                              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.NoopProcedure.html#execute-TEnv-">execute</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.NoopProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureTestingUtility.NoopProcedure</a>&lt;org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&gt;</code></dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code>org.apache.hadoop.hbase.procedure2.ProcedureYieldException</code></dd>
+<dd><code>org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException</code></dd>
+<dd><code><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></code></dd>
+</dl>
+</li>
+</ul>
+<a name="setTimeoutFailure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setTimeoutFailure</h4>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html#line.82">setTimeoutFailure</a>(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&nbsp;env)</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code>setTimeoutFailure</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.procedure2.Procedure&lt;org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&gt;</code></dd>
+</dl>
+</li>
+</ul>
+<a name="afterReplay-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>afterReplay</h4>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html#line.89">afterReplay</a>(org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&nbsp;env)</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code>afterReplay</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.procedure2.Procedure&lt;org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&gt;</code></dd>
+</dl>
+</li>
+</ul>
+<a name="getTableName--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getTableName</h4>
+<pre>public&nbsp;org.apache.hadoop.hbase.TableName&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html#line.96">getTableName</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code>getTableName</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.master.procedure.TableProcedureInterface</code></dd>
+</dl>
+</li>
+</ul>
+<a name="getTableOperationType--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getTableOperationType</h4>
+<pre>public&nbsp;org.apache.hadoop.hbase.master.procedure.TableProcedureInterface.TableOperationType&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html#line.101">getTableOperationType</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code>getTableOperationType</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.master.procedure.TableProcedureInterface</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/TestLoadProcedureError.TestProcedure.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/master/TestMaster.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html" target="_top">Frames</a></li>
+<li><a href="TestLoadProcedureError.TestProcedure.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.org.apache.hadoop.hbase.procedure2.Procedure">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.procedure2.Procedure">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2018 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/testdevapidocs/org/apache/hadoop/hbase/master/TestLoadProcedureError.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/TestLoadProcedureError.html b/testdevapidocs/org/apache/hadoop/hbase/master/TestLoadProcedureError.html
new file mode 100644
index 0000000..d1023d5
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/TestLoadProcedureError.html
@@ -0,0 +1,447 @@
+<!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>TestLoadProcedureError (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="TestLoadProcedureError (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":9,"i1":9,"i2":10,"i3":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/TestLoadProcedureError.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/master/TestHMasterRPCException.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/master/TestLoadProcedureError.html" target="_top">Frames</a></li>
+<li><a href="TestLoadProcedureError.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.master</div>
+<h2 title="Class TestLoadProcedureError" class="title">Class TestLoadProcedureError</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.master.TestLoadProcedureError</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.html#line.47">TestLoadProcedureError</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">Testcase for HBASE-21490.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
+<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError.TestProcedure</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.html#ARRIVE">ARRIVE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.html#FAIL_LOAD">FAIL_LOAD</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.html#FINISH_PROC">FINISH_PROC</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static org.apache.hadoop.hbase.TableName</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.html#NAME">NAME</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.html#UTIL">UTIL</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.html#TestLoadProcedureError--">TestLoadProcedureError</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.html#setUp--">setUp</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.html#tearDown--">tearDown</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.html#testLoadError--">testLoadError</a></span>()</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/master/TestLoadProcedureError.html#waitNoMaster--">waitNoMaster</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/ja
 va/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="CLASS_RULE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>CLASS_RULE</h4>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.html#line.50">CLASS_RULE</a></pre>
+</li>
+</ul>
+<a name="UTIL">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>UTIL</h4>
+<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.html#line.53">UTIL</a></pre>
+</li>
+</ul>
+<a name="NAME">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>NAME</h4>
+<pre>private static&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.html#line.55">NAME</a></pre>
+</li>
+</ul>
+<a name="ARRIVE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>ARRIVE</h4>
+<pre>private static volatile&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.html#line.57">ARRIVE</a></pre>
+</li>
+</ul>
+<a name="FINISH_PROC">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>FINISH_PROC</h4>
+<pre>private static volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.html#line.59">FINISH_PROC</a></pre>
+</li>
+</ul>
+<a name="FAIL_LOAD">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>FAIL_LOAD</h4>
+<pre>private static volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.html#line.61">FAIL_LOAD</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="TestLoadProcedureError--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestLoadProcedureError</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.html#line.47">TestLoadProcedureError</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="setUp--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setUp</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.html#line.107">setUp</a>()
+                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="tearDown--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>tearDown</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.html#line.112">tearDown</a>()
+                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="waitNoMaster--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>waitNoMaster</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.html#line.116">waitNoMaster</a>()</pre>
+</li>
+</ul>
+<a name="testLoadError--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testLoadError</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/TestLoadProcedureError.html#line.121">testLoadError</a>()
+                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestLoadProcedureError.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../org/apache/hadoop/hbase/master/TestHMasterRPCException.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/master/TestLoadProcedureError.html" target="_top">Frames</a></li>
+<li><a href="TestLoadProcedureError.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/c8b83ace/testdevapidocs/org/apache/hadoop/hbase/master/TestMaster.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/TestMaster.html b/testdevapidocs/org/apache/hadoop/hbase/master/TestMaster.html
index fd243cc..ca51548 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/TestMaster.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/TestMaster.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/master/TestHMasterRPCException.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterAbortAndRSGotKilled.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -466,7 +466,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/master/TestHMasterRPCException.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterAbortAndRSGotKilled.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/testdevapidocs/org/apache/hadoop/hbase/master/package-summary.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/package-summary.html b/testdevapidocs/org/apache/hadoop/hbase/master/package-summary.html
index 8fdb419..1d99022 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/package-summary.html
@@ -206,6 +206,16 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError</a></td>
+<td class="colLast">
+<div class="block">Testcase for HBASE-21490.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError.TestProcedure</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/master/TestMaster.html" title="class in org.apache.hadoop.hbase.master">TestMaster</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/testdevapidocs/org/apache/hadoop/hbase/master/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/master/package-tree.html
index 5b04558..401039d 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -117,6 +117,11 @@
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MockRegionServer.RegionNameAndIndex.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">MockRegionServer.RegionNameAndIndex</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.Procedure&lt;TEnvironment&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.NoopProcedure.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">ProcedureTestingUtility.NoopProcedure</span></a>&lt;TEnv&gt;
+<ul>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestLoadProcedureError.TestProcedure</span></a> (implements org.apache.hadoop.hbase.master.procedure.TableProcedureInterface)</li>
+</ul>
+</li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.StateMachineProcedure&lt;TEnvironment,TState&gt;
 <ul>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.AbstractStateMachineTableProcedure&lt;TState&gt; (implements org.apache.hadoop.hbase.master.procedure.TableProcedureInterface)
@@ -151,6 +156,7 @@
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/TestGetReplicationLoad.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestGetReplicationLoad</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/TestHMasterCommandLine.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestHMasterCommandLine</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/TestHMasterRPCException.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestHMasterRPCException</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestLoadProcedureError</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/TestMaster.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestMaster</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/TestMasterAbortAndRSGotKilled.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestMasterAbortAndRSGotKilled</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/TestMasterAbortAndRSGotKilled.DelayCloseCP.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestMasterAbortAndRSGotKilled.DelayCloseCP</span></a> (implements org.apache.hadoop.hbase.coprocessor.RegionCoprocessor, org.apache.hadoop.hbase.coprocessor.RegionObserver)</li>

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/testdevapidocs/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.NoopProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.NoopProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.NoopProcedure.html
index 685cb5b..97e2fd4 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.NoopProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.NoopProcedure.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <dl>
 <dt>Direct Known Subclasses:</dt>
-<dd><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureTestingUtility.TestProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestForceUpdateProcedure.ExchangeProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestForceUpdateProcedure.ExchangeProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestForceUpdateProcedure.NoopNoAckProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestForceUpdateProcedure.NoopNoAckProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestForceUpdateProcedure.ParentProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestForceUpdateProcedure.ParentProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestForceUpdateProcedure.WaitingProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestForceUpdat
 eProcedure.WaitingProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/client/TestHbck.SuspendProcedure.html" title="class in org.apache.hadoop.hbase.client">TestHbck.SuspendProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureBypass.RootProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureBypass.RootProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureBypass.StuckProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureBypass.StuckProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureBypass.SuspendProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureBypass.SuspendProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureBypass.WaitingTimeoutProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureBypass.WaitingTimeoutProcedure</a>, <a href=".
 ./../../../../org/apache/hadoop/hbase/procedure2/TestProcedureCleanup.ExchangeProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureCleanup.ExchangeProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureCleanup.RootProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureCleanup.RootProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureCleanup.SuspendProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureCleanup.SuspendProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureCleanup.WaitProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureCleanup.WaitProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureEvents.TestTimeoutEventProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureEvents.TestTimeoutEventProcedure</a>, <a href="..
 /../../../../org/apache/hadoop/hbase/procedure2/TestProcedureExecutor.BusyWaitProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureExecutor.BusyWaitProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRollbackAIOOB.ParentProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureRollbackAIOOB.ParentProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRollbackAIOOB.SubProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureRollbackAIOOB.SubProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureSchedulerConcurrency.TestProcedureWithEvent.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureSchedulerConcurrency.TestProcedureWithEvent</a>, <a href="../../../../../org/apache/hadoop/hbase/master/procedure/TestSchedulerQueueDeadLock.TableExclusiveProcedure.html" title="class in org.apache.hadoop.hbas
 e.master.procedure">TestSchedulerQueueDeadLock.TableExclusiveProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/master/procedure/TestSchedulerQueueDeadLock.TableShardParentProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestSchedulerQueueDeadLock.TableShardParentProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/master/procedure/TestSchedulerQueueDeadLock.TableSharedProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestSchedulerQueueDeadLock.TableSharedProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.SimpleChildProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestStateMachineProcedure.SimpleChildProcedure</a></dd>
+<dd><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureTestingUtility.TestProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestForceUpdateProcedure.ExchangeProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestForceUpdateProcedure.ExchangeProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestForceUpdateProcedure.NoopNoAckProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestForceUpdateProcedure.NoopNoAckProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestForceUpdateProcedure.ParentProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestForceUpdateProcedure.ParentProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestForceUpdateProcedure.WaitingProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestForceUpdat
 eProcedure.WaitingProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/client/TestHbck.SuspendProcedure.html" title="class in org.apache.hadoop.hbase.client">TestHbck.SuspendProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError.TestProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureBypass.RootProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureBypass.RootProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureBypass.StuckProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureBypass.StuckProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureBypass.SuspendProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureBypass.SuspendProcedure</a>, <a href="../../../../../org/apac
 he/hadoop/hbase/procedure2/TestProcedureBypass.WaitingTimeoutProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureBypass.WaitingTimeoutProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureCleanup.ExchangeProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureCleanup.ExchangeProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureCleanup.RootProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureCleanup.RootProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureCleanup.SuspendProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureCleanup.SuspendProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureCleanup.WaitProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureCleanup.WaitProcedure</a>, <a href="../../../../../org/apache/ha
 doop/hbase/procedure2/TestProcedureEvents.TestTimeoutEventProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureEvents.TestTimeoutEventProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureExecutor.BusyWaitProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureExecutor.BusyWaitProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRollbackAIOOB.ParentProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureRollbackAIOOB.ParentProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRollbackAIOOB.SubProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureRollbackAIOOB.SubProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureSchedulerConcurrency.TestProcedureWithEvent.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureSchedulerConcurrency.
 TestProcedureWithEvent</a>, <a href="../../../../../org/apache/hadoop/hbase/master/procedure/TestSchedulerQueueDeadLock.TableExclusiveProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestSchedulerQueueDeadLock.TableExclusiveProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/master/procedure/TestSchedulerQueueDeadLock.TableShardParentProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestSchedulerQueueDeadLock.TableShardParentProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/master/procedure/TestSchedulerQueueDeadLock.TableSharedProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestSchedulerQueueDeadLock.TableSharedProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.SimpleChildProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestStateMachineProcedure.SimpleChildProcedure</a></dd>
 </dl>
 <dl>
 <dt>Enclosing class:</dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/testdevapidocs/org/apache/hadoop/hbase/procedure2/class-use/ProcedureTestingUtility.NoopProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/class-use/ProcedureTestingUtility.NoopProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/class-use/ProcedureTestingUtility.NoopProcedure.html
index 126b9a9..e7ab65c 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/class-use/ProcedureTestingUtility.NoopProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/class-use/ProcedureTestingUtility.NoopProcedure.html
@@ -87,10 +87,14 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.master.procedure">org.apache.hadoop.hbase.master.procedure</a></td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.master">org.apache.hadoop.hbase.master</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.master.procedure">org.apache.hadoop.hbase.master.procedure</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
@@ -117,6 +121,24 @@
 </tbody>
 </table>
 </li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.master">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.NoopProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureTestingUtility.NoopProcedure</a> in <a href="../../../../../../org/apache/hadoop/hbase/master/package-summary.html">org.apache.hadoop.hbase.master</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing subclasses, and an explanation">
+<caption><span>Subclasses of <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.NoopProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureTestingUtility.NoopProcedure</a> in <a href="../../../../../../org/apache/hadoop/hbase/master/package-summary.html">org.apache.hadoop.hbase.master</a></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>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError.TestProcedure</a></span></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.master.procedure">
 <!--   -->
 </a>


[08/11] hbase-site git commit: Published site at 405bf5e6383a09f435baadbac6c389e9f6c43ac6.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/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 257263c..7a81ab8 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
@@ -96,183 +96,180 @@
 <span class="sourceLineNo">088</span>      Loader loader) throws IOException {<a name="line.88"></a>
 <span class="sourceLineNo">089</span>    ProcedureWALFormatReader reader = new ProcedureWALFormatReader(tracker, loader);<a name="line.89"></a>
 <span class="sourceLineNo">090</span>    tracker.setKeepDeletes(true);<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    try {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      // Ignore the last log which is current active log.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      while (logs.hasNext()) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>        ProcedureWALFile log = logs.next();<a name="line.94"></a>
-<span class="sourceLineNo">095</span>        log.open();<a name="line.95"></a>
-<span class="sourceLineNo">096</span>        try {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>          reader.read(log);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        } finally {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>          log.close();<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>      reader.finish();<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>      // The tracker is now updated with all the procedures read from the logs<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      if (tracker.isPartial()) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>        tracker.setPartialFlag(false);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      }<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      tracker.resetModified();<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    } finally {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      tracker.setKeepDeletes(false);<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>  public static void writeHeader(OutputStream stream, ProcedureWALHeader header)<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      throws IOException {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    header.writeDelimitedTo(stream);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  /*<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * +-----------------+<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * | END OF WAL DATA | &lt;---+<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>   * |     Tracker     |     |<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>   * |     version     |     |<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   * +-----------------+     |<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   * |  TRAILER_MAGIC  |     |<a name="line.129"></a>
-<span class="sourceLineNo">130</span>   * +-----------------+     |<a name="line.130"></a>
-<span class="sourceLineNo">131</span>   * |      offset     |-----+<a name="line.131"></a>
-<span class="sourceLineNo">132</span>   * +-----------------+<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   */<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  public static long writeTrailer(FSDataOutputStream stream, ProcedureStoreTracker tracker)<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      throws IOException {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    long offset = stream.getPos();<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>    // Write EOF Entry<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    ProcedureWALEntry.newBuilder()<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      .setType(ProcedureWALEntry.Type.PROCEDURE_WAL_EOF)<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      .build().writeDelimitedTo(stream);<a name="line.141"></a>
+<span class="sourceLineNo">091</span>    // Ignore the last log which is current active log.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    while (logs.hasNext()) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      ProcedureWALFile log = logs.next();<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      log.open();<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      try {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>        reader.read(log);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      } finally {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>        log.close();<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>    reader.finish();<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>    // The tracker is now updated with all the procedures read from the logs<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    if (tracker.isPartial()) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      tracker.setPartialFlag(false);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    tracker.resetModified();<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    tracker.setKeepDeletes(false);<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>  public static void writeHeader(OutputStream stream, ProcedureWALHeader header)<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      throws IOException {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    header.writeDelimitedTo(stream);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  }<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  /*<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * +-----------------+<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * | END OF WAL DATA | &lt;---+<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * +-----------------+     |<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * |                 |     |<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * |     Tracker     |     |<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>   * |     version     |     |<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * +-----------------+     |<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   * |  TRAILER_MAGIC  |     |<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   * +-----------------+     |<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * |      offset     |-----+<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 static long writeTrailer(FSDataOutputStream stream, ProcedureStoreTracker tracker)<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      throws IOException {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    long offset = stream.getPos();<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span>    // Write EOF Entry<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    ProcedureWALEntry.newBuilder()<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      .setType(ProcedureWALEntry.Type.PROCEDURE_WAL_EOF)<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      .build().writeDelimitedTo(stream);<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>    // Write Tracker<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    tracker.toProto().writeDelimitedTo(stream);<a name="line.141"></a>
 <span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>    // Write Tracker<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    tracker.toProto().writeDelimitedTo(stream);<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>    stream.write(TRAILER_VERSION);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    StreamUtils.writeLong(stream, TRAILER_MAGIC);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    StreamUtils.writeLong(stream, offset);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    return stream.getPos() - offset;<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 static ProcedureWALHeader readHeader(InputStream stream)<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      throws IOException {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    ProcedureWALHeader header;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    try {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      header = ProcedureWALHeader.parseDelimitedFrom(stream);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    } catch (InvalidProtocolBufferException e) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      throw new InvalidWALDataException(e);<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>    if (header == null) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      throw new InvalidWALDataException("No data available to read the Header");<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>    if (header.getVersion() &lt; 0 || header.getVersion() != HEADER_VERSION) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      throw new InvalidWALDataException("Invalid Header version. got " + header.getVersion() +<a name="line.166"></a>
-<span class="sourceLineNo">167</span>          " expected " + HEADER_VERSION);<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 (header.getType() &lt; 0 || header.getType() &gt; LOG_TYPE_MAX_VALID) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      throw new InvalidWALDataException("Invalid header type. got " + header.getType());<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    }<a name="line.172"></a>
+<span class="sourceLineNo">143</span>    stream.write(TRAILER_VERSION);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    StreamUtils.writeLong(stream, TRAILER_MAGIC);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    StreamUtils.writeLong(stream, offset);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    return stream.getPos() - offset;<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>  public static ProcedureWALHeader readHeader(InputStream stream)<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      throws IOException {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    ProcedureWALHeader header;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    try {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      header = ProcedureWALHeader.parseDelimitedFrom(stream);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    } catch (InvalidProtocolBufferException e) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      throw new InvalidWALDataException(e);<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>    if (header == null) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      throw new InvalidWALDataException("No data available to read the Header");<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>    if (header.getVersion() &lt; 0 || header.getVersion() != HEADER_VERSION) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      throw new InvalidWALDataException("Invalid Header version. got " + header.getVersion() +<a name="line.163"></a>
+<span class="sourceLineNo">164</span>          " expected " + HEADER_VERSION);<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 (header.getType() &lt; 0 || header.getType() &gt; LOG_TYPE_MAX_VALID) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      throw new InvalidWALDataException("Invalid header type. got " + header.getType());<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>    return header;<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>    return header;<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 static ProcedureWALTrailer readTrailer(FSDataInputStream stream, long startPos, long size)<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // Beginning of the Trailer Jump. 17 = 1 byte version + 8 byte magic + 8 byte offset<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    long trailerPos = size - 17;<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>    if (trailerPos &lt; startPos) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      throw new InvalidWALDataException("Missing trailer: size=" + size + " startPos=" + startPos);<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>    stream.seek(trailerPos);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    int version = stream.read();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    if (version != TRAILER_VERSION) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      throw new InvalidWALDataException("Invalid Trailer version. got " + version +<a name="line.189"></a>
-<span class="sourceLineNo">190</span>          " expected " + TRAILER_VERSION);<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>    long magic = StreamUtils.readLong(stream);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    if (magic != TRAILER_MAGIC) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      throw new InvalidWALDataException("Invalid Trailer magic. got " + magic +<a name="line.195"></a>
-<span class="sourceLineNo">196</span>          " expected " + TRAILER_MAGIC);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
+<span class="sourceLineNo">174</span>  public static ProcedureWALTrailer readTrailer(FSDataInputStream stream, long startPos, long size)<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      throws IOException {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    // Beginning of the Trailer Jump. 17 = 1 byte version + 8 byte magic + 8 byte offset<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    long trailerPos = size - 17;<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>    if (trailerPos &lt; startPos) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      throw new InvalidWALDataException("Missing trailer: size=" + size + " startPos=" + startPos);<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>    stream.seek(trailerPos);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    int version = stream.read();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    if (version != TRAILER_VERSION) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      throw new InvalidWALDataException("Invalid Trailer version. got " + version +<a name="line.186"></a>
+<span class="sourceLineNo">187</span>          " expected " + TRAILER_VERSION);<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>    long magic = StreamUtils.readLong(stream);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    if (magic != TRAILER_MAGIC) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      throw new InvalidWALDataException("Invalid Trailer magic. got " + magic +<a name="line.192"></a>
+<span class="sourceLineNo">193</span>          " expected " + TRAILER_MAGIC);<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>    long trailerOffset = StreamUtils.readLong(stream);<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    stream.seek(trailerOffset);<a name="line.197"></a>
 <span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>    long trailerOffset = StreamUtils.readLong(stream);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    stream.seek(trailerOffset);<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    ProcedureWALEntry entry = readEntry(stream);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    if (entry.getType() != ProcedureWALEntry.Type.PROCEDURE_WAL_EOF) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      throw new InvalidWALDataException("Invalid Trailer begin");<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>    ProcedureWALTrailer trailer = ProcedureWALTrailer.newBuilder()<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      .setVersion(version)<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      .setTrackerPos(stream.getPos())<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      .build();<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    return trailer;<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 static ProcedureWALEntry readEntry(InputStream stream) throws IOException {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    return ProcedureWALEntry.parseDelimitedFrom(stream);<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 static void writeEntry(ByteSlot slot, ProcedureWALEntry.Type type,<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs) throws IOException {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    final ProcedureWALEntry.Builder builder = ProcedureWALEntry.newBuilder();<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    builder.setType(type);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    builder.addProcedure(ProcedureUtil.convertToProtoProcedure(proc));<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    if (subprocs != null) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        builder.addProcedure(ProcedureUtil.convertToProtoProcedure(subprocs[i]));<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>    builder.build().writeDelimitedTo(slot);<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 static void writeInsert(ByteSlot slot, Procedure&lt;?&gt; proc)<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      throws IOException {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_INIT, proc, 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>  public static void writeInsert(ByteSlot slot, Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs)<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      throws IOException {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_INSERT, proc, subprocs);<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 static void writeUpdate(ByteSlot slot, Procedure&lt;?&gt; proc)<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      throws IOException {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_UPDATE, proc, null);<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>  public static void writeDelete(ByteSlot slot, long procId)<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      throws IOException {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    final ProcedureWALEntry.Builder builder = ProcedureWALEntry.newBuilder();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    builder.setType(ProcedureWALEntry.Type.PROCEDURE_WAL_DELETE);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    builder.setProcId(procId);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    builder.build().writeDelimitedTo(slot);<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>  public static void writeDelete(ByteSlot slot, Procedure&lt;?&gt; proc, long[] subprocs)<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      throws IOException {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    final ProcedureWALEntry.Builder builder = ProcedureWALEntry.newBuilder();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    builder.setType(ProcedureWALEntry.Type.PROCEDURE_WAL_DELETE);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    builder.setProcId(proc.getProcId());<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    if (subprocs != null) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      builder.addProcedure(ProcedureUtil.convertToProtoProcedure(proc));<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        builder.addChildId(subprocs[i]);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      }<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    builder.build().writeDelimitedTo(slot);<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">199</span>    ProcedureWALEntry entry = readEntry(stream);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    if (entry.getType() != ProcedureWALEntry.Type.PROCEDURE_WAL_EOF) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      throw new InvalidWALDataException("Invalid Trailer begin");<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>    ProcedureWALTrailer trailer = ProcedureWALTrailer.newBuilder()<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      .setVersion(version)<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      .setTrackerPos(stream.getPos())<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      .build();<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    return trailer;<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 static ProcedureWALEntry readEntry(InputStream stream) throws IOException {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    return ProcedureWALEntry.parseDelimitedFrom(stream);<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>  public static void writeEntry(ByteSlot slot, ProcedureWALEntry.Type type,<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs) throws IOException {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    final ProcedureWALEntry.Builder builder = ProcedureWALEntry.newBuilder();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    builder.setType(type);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    builder.addProcedure(ProcedureUtil.convertToProtoProcedure(proc));<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    if (subprocs != null) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        builder.addProcedure(ProcedureUtil.convertToProtoProcedure(subprocs[i]));<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>    builder.build().writeDelimitedTo(slot);<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 static void writeInsert(ByteSlot slot, Procedure&lt;?&gt; proc)<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      throws IOException {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_INIT, proc, null);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  }<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>  public static void writeInsert(ByteSlot slot, Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs)<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      throws IOException {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_INSERT, proc, subprocs);<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>  public static void writeUpdate(ByteSlot slot, Procedure&lt;?&gt; proc)<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      throws IOException {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_UPDATE, proc, null);<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, long procId)<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>
+<span class="sourceLineNo">247</span>    builder.setProcId(procId);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    builder.build().writeDelimitedTo(slot);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  }<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span>  public static void writeDelete(ByteSlot slot, Procedure&lt;?&gt; proc, long[] subprocs)<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      throws IOException {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    final ProcedureWALEntry.Builder builder = ProcedureWALEntry.newBuilder();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    builder.setType(ProcedureWALEntry.Type.PROCEDURE_WAL_DELETE);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    builder.setProcId(proc.getProcId());<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    if (subprocs != null) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      builder.addProcedure(ProcedureUtil.convertToProtoProcedure(proc));<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        builder.addChildId(subprocs[i]);<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>    builder.build().writeDelimitedTo(slot);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>}<a name="line.264"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/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 257263c..7a81ab8 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
@@ -96,183 +96,180 @@
 <span class="sourceLineNo">088</span>      Loader loader) throws IOException {<a name="line.88"></a>
 <span class="sourceLineNo">089</span>    ProcedureWALFormatReader reader = new ProcedureWALFormatReader(tracker, loader);<a name="line.89"></a>
 <span class="sourceLineNo">090</span>    tracker.setKeepDeletes(true);<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    try {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      // Ignore the last log which is current active log.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      while (logs.hasNext()) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>        ProcedureWALFile log = logs.next();<a name="line.94"></a>
-<span class="sourceLineNo">095</span>        log.open();<a name="line.95"></a>
-<span class="sourceLineNo">096</span>        try {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>          reader.read(log);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        } finally {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>          log.close();<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>      reader.finish();<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>      // The tracker is now updated with all the procedures read from the logs<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      if (tracker.isPartial()) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>        tracker.setPartialFlag(false);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      }<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      tracker.resetModified();<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    } finally {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      tracker.setKeepDeletes(false);<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>  public static void writeHeader(OutputStream stream, ProcedureWALHeader header)<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      throws IOException {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    header.writeDelimitedTo(stream);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  /*<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * +-----------------+<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * | END OF WAL DATA | &lt;---+<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>   * |     Tracker     |     |<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>   * |     version     |     |<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   * +-----------------+     |<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   * |  TRAILER_MAGIC  |     |<a name="line.129"></a>
-<span class="sourceLineNo">130</span>   * +-----------------+     |<a name="line.130"></a>
-<span class="sourceLineNo">131</span>   * |      offset     |-----+<a name="line.131"></a>
-<span class="sourceLineNo">132</span>   * +-----------------+<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   */<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  public static long writeTrailer(FSDataOutputStream stream, ProcedureStoreTracker tracker)<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      throws IOException {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    long offset = stream.getPos();<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>    // Write EOF Entry<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    ProcedureWALEntry.newBuilder()<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      .setType(ProcedureWALEntry.Type.PROCEDURE_WAL_EOF)<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      .build().writeDelimitedTo(stream);<a name="line.141"></a>
+<span class="sourceLineNo">091</span>    // Ignore the last log which is current active log.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    while (logs.hasNext()) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      ProcedureWALFile log = logs.next();<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      log.open();<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      try {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>        reader.read(log);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      } finally {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>        log.close();<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>    reader.finish();<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>    // The tracker is now updated with all the procedures read from the logs<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    if (tracker.isPartial()) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      tracker.setPartialFlag(false);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    tracker.resetModified();<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    tracker.setKeepDeletes(false);<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>  public static void writeHeader(OutputStream stream, ProcedureWALHeader header)<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      throws IOException {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    header.writeDelimitedTo(stream);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  }<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  /*<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * +-----------------+<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * | END OF WAL DATA | &lt;---+<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * +-----------------+     |<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * |                 |     |<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * |     Tracker     |     |<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>   * |     version     |     |<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * +-----------------+     |<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   * |  TRAILER_MAGIC  |     |<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   * +-----------------+     |<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * |      offset     |-----+<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 static long writeTrailer(FSDataOutputStream stream, ProcedureStoreTracker tracker)<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      throws IOException {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    long offset = stream.getPos();<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span>    // Write EOF Entry<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    ProcedureWALEntry.newBuilder()<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      .setType(ProcedureWALEntry.Type.PROCEDURE_WAL_EOF)<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      .build().writeDelimitedTo(stream);<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>    // Write Tracker<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    tracker.toProto().writeDelimitedTo(stream);<a name="line.141"></a>
 <span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>    // Write Tracker<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    tracker.toProto().writeDelimitedTo(stream);<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>    stream.write(TRAILER_VERSION);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    StreamUtils.writeLong(stream, TRAILER_MAGIC);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    StreamUtils.writeLong(stream, offset);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    return stream.getPos() - offset;<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 static ProcedureWALHeader readHeader(InputStream stream)<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      throws IOException {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    ProcedureWALHeader header;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    try {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      header = ProcedureWALHeader.parseDelimitedFrom(stream);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    } catch (InvalidProtocolBufferException e) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      throw new InvalidWALDataException(e);<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>    if (header == null) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      throw new InvalidWALDataException("No data available to read the Header");<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>    if (header.getVersion() &lt; 0 || header.getVersion() != HEADER_VERSION) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      throw new InvalidWALDataException("Invalid Header version. got " + header.getVersion() +<a name="line.166"></a>
-<span class="sourceLineNo">167</span>          " expected " + HEADER_VERSION);<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 (header.getType() &lt; 0 || header.getType() &gt; LOG_TYPE_MAX_VALID) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      throw new InvalidWALDataException("Invalid header type. got " + header.getType());<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    }<a name="line.172"></a>
+<span class="sourceLineNo">143</span>    stream.write(TRAILER_VERSION);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    StreamUtils.writeLong(stream, TRAILER_MAGIC);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    StreamUtils.writeLong(stream, offset);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    return stream.getPos() - offset;<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>  public static ProcedureWALHeader readHeader(InputStream stream)<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      throws IOException {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    ProcedureWALHeader header;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    try {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      header = ProcedureWALHeader.parseDelimitedFrom(stream);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    } catch (InvalidProtocolBufferException e) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      throw new InvalidWALDataException(e);<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>    if (header == null) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      throw new InvalidWALDataException("No data available to read the Header");<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>    if (header.getVersion() &lt; 0 || header.getVersion() != HEADER_VERSION) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      throw new InvalidWALDataException("Invalid Header version. got " + header.getVersion() +<a name="line.163"></a>
+<span class="sourceLineNo">164</span>          " expected " + HEADER_VERSION);<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 (header.getType() &lt; 0 || header.getType() &gt; LOG_TYPE_MAX_VALID) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      throw new InvalidWALDataException("Invalid header type. got " + header.getType());<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>    return header;<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>    return header;<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 static ProcedureWALTrailer readTrailer(FSDataInputStream stream, long startPos, long size)<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // Beginning of the Trailer Jump. 17 = 1 byte version + 8 byte magic + 8 byte offset<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    long trailerPos = size - 17;<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>    if (trailerPos &lt; startPos) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      throw new InvalidWALDataException("Missing trailer: size=" + size + " startPos=" + startPos);<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>    stream.seek(trailerPos);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    int version = stream.read();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    if (version != TRAILER_VERSION) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      throw new InvalidWALDataException("Invalid Trailer version. got " + version +<a name="line.189"></a>
-<span class="sourceLineNo">190</span>          " expected " + TRAILER_VERSION);<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>    long magic = StreamUtils.readLong(stream);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    if (magic != TRAILER_MAGIC) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      throw new InvalidWALDataException("Invalid Trailer magic. got " + magic +<a name="line.195"></a>
-<span class="sourceLineNo">196</span>          " expected " + TRAILER_MAGIC);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
+<span class="sourceLineNo">174</span>  public static ProcedureWALTrailer readTrailer(FSDataInputStream stream, long startPos, long size)<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      throws IOException {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    // Beginning of the Trailer Jump. 17 = 1 byte version + 8 byte magic + 8 byte offset<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    long trailerPos = size - 17;<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>    if (trailerPos &lt; startPos) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      throw new InvalidWALDataException("Missing trailer: size=" + size + " startPos=" + startPos);<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>    stream.seek(trailerPos);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    int version = stream.read();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    if (version != TRAILER_VERSION) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      throw new InvalidWALDataException("Invalid Trailer version. got " + version +<a name="line.186"></a>
+<span class="sourceLineNo">187</span>          " expected " + TRAILER_VERSION);<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>    long magic = StreamUtils.readLong(stream);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    if (magic != TRAILER_MAGIC) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      throw new InvalidWALDataException("Invalid Trailer magic. got " + magic +<a name="line.192"></a>
+<span class="sourceLineNo">193</span>          " expected " + TRAILER_MAGIC);<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>    long trailerOffset = StreamUtils.readLong(stream);<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    stream.seek(trailerOffset);<a name="line.197"></a>
 <span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>    long trailerOffset = StreamUtils.readLong(stream);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    stream.seek(trailerOffset);<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    ProcedureWALEntry entry = readEntry(stream);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    if (entry.getType() != ProcedureWALEntry.Type.PROCEDURE_WAL_EOF) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      throw new InvalidWALDataException("Invalid Trailer begin");<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>    ProcedureWALTrailer trailer = ProcedureWALTrailer.newBuilder()<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      .setVersion(version)<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      .setTrackerPos(stream.getPos())<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      .build();<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    return trailer;<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 static ProcedureWALEntry readEntry(InputStream stream) throws IOException {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    return ProcedureWALEntry.parseDelimitedFrom(stream);<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 static void writeEntry(ByteSlot slot, ProcedureWALEntry.Type type,<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs) throws IOException {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    final ProcedureWALEntry.Builder builder = ProcedureWALEntry.newBuilder();<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    builder.setType(type);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    builder.addProcedure(ProcedureUtil.convertToProtoProcedure(proc));<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    if (subprocs != null) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        builder.addProcedure(ProcedureUtil.convertToProtoProcedure(subprocs[i]));<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>    builder.build().writeDelimitedTo(slot);<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 static void writeInsert(ByteSlot slot, Procedure&lt;?&gt; proc)<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      throws IOException {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_INIT, proc, 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>  public static void writeInsert(ByteSlot slot, Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs)<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      throws IOException {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_INSERT, proc, subprocs);<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 static void writeUpdate(ByteSlot slot, Procedure&lt;?&gt; proc)<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      throws IOException {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_UPDATE, proc, null);<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>  public static void writeDelete(ByteSlot slot, long procId)<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      throws IOException {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    final ProcedureWALEntry.Builder builder = ProcedureWALEntry.newBuilder();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    builder.setType(ProcedureWALEntry.Type.PROCEDURE_WAL_DELETE);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    builder.setProcId(procId);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    builder.build().writeDelimitedTo(slot);<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>  public static void writeDelete(ByteSlot slot, Procedure&lt;?&gt; proc, long[] subprocs)<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      throws IOException {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    final ProcedureWALEntry.Builder builder = ProcedureWALEntry.newBuilder();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    builder.setType(ProcedureWALEntry.Type.PROCEDURE_WAL_DELETE);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    builder.setProcId(proc.getProcId());<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    if (subprocs != null) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      builder.addProcedure(ProcedureUtil.convertToProtoProcedure(proc));<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        builder.addChildId(subprocs[i]);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      }<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    builder.build().writeDelimitedTo(slot);<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">199</span>    ProcedureWALEntry entry = readEntry(stream);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    if (entry.getType() != ProcedureWALEntry.Type.PROCEDURE_WAL_EOF) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      throw new InvalidWALDataException("Invalid Trailer begin");<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>    ProcedureWALTrailer trailer = ProcedureWALTrailer.newBuilder()<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      .setVersion(version)<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      .setTrackerPos(stream.getPos())<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      .build();<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    return trailer;<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 static ProcedureWALEntry readEntry(InputStream stream) throws IOException {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    return ProcedureWALEntry.parseDelimitedFrom(stream);<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>  public static void writeEntry(ByteSlot slot, ProcedureWALEntry.Type type,<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs) throws IOException {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    final ProcedureWALEntry.Builder builder = ProcedureWALEntry.newBuilder();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    builder.setType(type);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    builder.addProcedure(ProcedureUtil.convertToProtoProcedure(proc));<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    if (subprocs != null) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        builder.addProcedure(ProcedureUtil.convertToProtoProcedure(subprocs[i]));<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>    builder.build().writeDelimitedTo(slot);<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 static void writeInsert(ByteSlot slot, Procedure&lt;?&gt; proc)<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      throws IOException {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_INIT, proc, null);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  }<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>  public static void writeInsert(ByteSlot slot, Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs)<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      throws IOException {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_INSERT, proc, subprocs);<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>  public static void writeUpdate(ByteSlot slot, Procedure&lt;?&gt; proc)<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      throws IOException {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_UPDATE, proc, null);<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, long procId)<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>
+<span class="sourceLineNo">247</span>    builder.setProcId(procId);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    builder.build().writeDelimitedTo(slot);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  }<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span>  public static void writeDelete(ByteSlot slot, Procedure&lt;?&gt; proc, long[] subprocs)<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      throws IOException {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    final ProcedureWALEntry.Builder builder = ProcedureWALEntry.newBuilder();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    builder.setType(ProcedureWALEntry.Type.PROCEDURE_WAL_DELETE);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    builder.setProcId(proc.getProcId());<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    if (subprocs != null) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      builder.addProcedure(ProcedureUtil.convertToProtoProcedure(proc));<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        builder.addChildId(subprocs[i]);<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>    builder.build().writeDelimitedTo(slot);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>}<a name="line.264"></a>
 
 
 


[06/11] hbase-site git commit: Published site at 405bf5e6383a09f435baadbac6c389e9f6c43ac6.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/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 ab175b6..72a3459 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
@@ -456,969 +456,979 @@
 <span class="sourceLineNo">448</span>    lock.lock();<a name="line.448"></a>
 <span class="sourceLineNo">449</span>    try {<a name="line.449"></a>
 <span class="sourceLineNo">450</span>      if (logs.isEmpty()) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        throw new RuntimeException("recoverLease() must be called before loading data");<a name="line.451"></a>
+<span class="sourceLineNo">451</span>        throw new IllegalStateException("recoverLease() must be called before loading data");<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>      // Nothing to do, If we have only the current log.<a name="line.454"></a>
 <span class="sourceLineNo">455</span>      if (logs.size() == 1) {<a name="line.455"></a>
 <span class="sourceLineNo">456</span>        LOG.debug("No state logs to replay.");<a name="line.456"></a>
 <span class="sourceLineNo">457</span>        loader.setMaxProcId(0);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        return;<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>      // Load the old logs<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      Iterator&lt;ProcedureWALFile&gt; it = logs.descendingIterator();<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      it.next(); // Skip the current log<a name="line.463"></a>
-<span class="sourceLineNo">464</span><a name="line.464"></a>
-<span class="sourceLineNo">465</span>      ProcedureWALFormat.load(it, storeTracker, new ProcedureWALFormat.Loader() {<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>        @Override<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        public void setMaxProcId(long maxProcId) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>          loader.setMaxProcId(maxProcId);<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>        @Override<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        public void load(ProcedureIterator procIter) throws IOException {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>          loader.load(procIter);<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>        @Override<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>          loader.handleCorrupted(procIter);<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>        @Override<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        public void markCorruptedWAL(ProcedureWALFile log, IOException e) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>          if (corruptedLogs == null) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>            corruptedLogs = new HashSet&lt;&gt;();<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          }<a name="line.486"></a>
-<span class="sourceLineNo">487</span>          corruptedLogs.add(log);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>          // TODO: sideline corrupted log<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>    } finally {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      try {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        // try to cleanup inactive wals and complete the operation<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        buildHoldingCleanupTracker();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        tryCleanupLogsOnLoad();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        loading.set(false);<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      } finally {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        lock.unlock();<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><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  private void tryCleanupLogsOnLoad() {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    // nothing to cleanup.<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    if (logs.size() &lt;= 1) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      return;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    }<a name="line.507"></a>
+<span class="sourceLineNo">458</span>        loading.set(false);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        return;<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>      // Load the old logs<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      Iterator&lt;ProcedureWALFile&gt; it = logs.descendingIterator();<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      it.next(); // Skip the current log<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>      ProcedureWALFormat.load(it, storeTracker, new ProcedureWALFormat.Loader() {<a name="line.466"></a>
+<span class="sourceLineNo">467</span><a name="line.467"></a>
+<span class="sourceLineNo">468</span>        @Override<a name="line.468"></a>
+<span class="sourceLineNo">469</span>        public void setMaxProcId(long maxProcId) {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>          loader.setMaxProcId(maxProcId);<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>        @Override<a name="line.473"></a>
+<span class="sourceLineNo">474</span>        public void load(ProcedureIterator procIter) throws IOException {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>          loader.load(procIter);<a name="line.475"></a>
+<span class="sourceLineNo">476</span>        }<a name="line.476"></a>
+<span class="sourceLineNo">477</span><a name="line.477"></a>
+<span class="sourceLineNo">478</span>        @Override<a name="line.478"></a>
+<span class="sourceLineNo">479</span>        public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>          loader.handleCorrupted(procIter);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>        }<a name="line.481"></a>
+<span class="sourceLineNo">482</span><a name="line.482"></a>
+<span class="sourceLineNo">483</span>        @Override<a name="line.483"></a>
+<span class="sourceLineNo">484</span>        public void markCorruptedWAL(ProcedureWALFile log, IOException e) {<a name="line.484"></a>
+<span class="sourceLineNo">485</span>          if (corruptedLogs == null) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>            corruptedLogs = new HashSet&lt;&gt;();<a name="line.486"></a>
+<span class="sourceLineNo">487</span>          }<a name="line.487"></a>
+<span class="sourceLineNo">488</span>          corruptedLogs.add(log);<a name="line.488"></a>
+<span class="sourceLineNo">489</span>          // TODO: sideline corrupted log<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>      // if we fail when loading, we should prevent persisting the storeTracker later in the stop<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      // method. As it may happen that, we have finished constructing the modified and deleted bits,<a name="line.493"></a>
+<span class="sourceLineNo">494</span>      // but before we call resetModified, we fail, then if we persist the storeTracker then when<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      // restarting, we will consider that all procedures have been included in this file and delete<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      // all the previous files. Obviously this not correct. So here we will only set loading to<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      // false when we successfully loaded all the procedures, and when closing we will skip<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      // persisting the store tracker. And also, this will prevent the sync thread to do<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      // periodicRoll, where we may also clean old logs.<a name="line.499"></a>
+<span class="sourceLineNo">500</span>      loading.set(false);<a name="line.500"></a>
+<span class="sourceLineNo">501</span>      // try to cleanup inactive wals and complete the operation<a name="line.501"></a>
+<span class="sourceLineNo">502</span>      buildHoldingCleanupTracker();<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      tryCleanupLogsOnLoad();<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    } finally {<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      lock.unlock();<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>    // the config says to not cleanup wals on load.<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    if (!conf.getBoolean(EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY,<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY)) {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      LOG.debug("WALs cleanup on load is not enabled: " + getActiveLogs());<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      return;<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    }<a name="line.514"></a>
-<span class="sourceLineNo">515</span><a name="line.515"></a>
-<span class="sourceLineNo">516</span>    try {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      periodicRoll();<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    } catch (IOException e) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      LOG.warn("Unable to cleanup logs on load: " + e.getMessage(), e);<a name="line.519"></a>
+<span class="sourceLineNo">509</span>  private void tryCleanupLogsOnLoad() {<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    // nothing to cleanup.<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    if (logs.size() &lt;= 1) {<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      return;<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    }<a name="line.513"></a>
+<span class="sourceLineNo">514</span><a name="line.514"></a>
+<span class="sourceLineNo">515</span>    // the config says to not cleanup wals on load.<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    if (!conf.getBoolean(EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY,<a name="line.516"></a>
+<span class="sourceLineNo">517</span>      DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY)) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      LOG.debug("WALs cleanup on load is not enabled: " + getActiveLogs());<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      return;<a name="line.519"></a>
 <span class="sourceLineNo">520</span>    }<a name="line.520"></a>
-<span class="sourceLineNo">521</span>  }<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>  @Override<a name="line.523"></a>
-<span class="sourceLineNo">524</span>  public void insert(Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    if (LOG.isTraceEnabled()) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      LOG.trace("Insert " + proc + ", subproc=" + Arrays.toString(subprocs));<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    }<a name="line.527"></a>
+<span class="sourceLineNo">521</span><a name="line.521"></a>
+<span class="sourceLineNo">522</span>    try {<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      periodicRoll();<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    } catch (IOException e) {<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      LOG.warn("Unable to cleanup logs on load: " + e.getMessage(), e);<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
+<span class="sourceLineNo">527</span>  }<a name="line.527"></a>
 <span class="sourceLineNo">528</span><a name="line.528"></a>
-<span class="sourceLineNo">529</span>    ByteSlot slot = acquireSlot();<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    try {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      // Serialize the insert<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      long[] subProcIds = null;<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      if (subprocs != null) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        ProcedureWALFormat.writeInsert(slot, proc, subprocs);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        subProcIds = new long[subprocs.length];<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>          subProcIds[i] = subprocs[i].getProcId();<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      } else {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>        assert !proc.hasParent();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        ProcedureWALFormat.writeInsert(slot, proc);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>      // Push the transaction data and wait until it is persisted<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      pushData(PushType.INSERT, slot, proc.getProcId(), subProcIds);<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    } catch (IOException e) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      // We are not able to serialize the procedure.<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      // this is a code error, and we are not able to go on.<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: proc=" +<a name="line.549"></a>
-<span class="sourceLineNo">550</span>          proc + ", subprocs=" + Arrays.toString(subprocs), e);<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      throw new RuntimeException(e);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    } finally {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      releaseSlot(slot);<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>  @Override<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  public void insert(Procedure&lt;?&gt;[] procs) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    if (LOG.isTraceEnabled()) {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      LOG.trace("Insert " + Arrays.toString(procs));<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">529</span>  @Override<a name="line.529"></a>
+<span class="sourceLineNo">530</span>  public void insert(Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs) {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    if (LOG.isTraceEnabled()) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      LOG.trace("Insert " + proc + ", subproc=" + Arrays.toString(subprocs));<a name="line.532"></a>
+<span class="sourceLineNo">533</span>    }<a name="line.533"></a>
+<span class="sourceLineNo">534</span><a name="line.534"></a>
+<span class="sourceLineNo">535</span>    ByteSlot slot = acquireSlot();<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    try {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      // Serialize the insert<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      long[] subProcIds = null;<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      if (subprocs != null) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        ProcedureWALFormat.writeInsert(slot, proc, subprocs);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>        subProcIds = new long[subprocs.length];<a name="line.541"></a>
+<span class="sourceLineNo">542</span>        for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>          subProcIds[i] = subprocs[i].getProcId();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>        }<a name="line.544"></a>
+<span class="sourceLineNo">545</span>      } else {<a name="line.545"></a>
+<span class="sourceLineNo">546</span>        assert !proc.hasParent();<a name="line.546"></a>
+<span class="sourceLineNo">547</span>        ProcedureWALFormat.writeInsert(slot, proc);<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>      // Push the transaction data and wait until it is persisted<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      pushData(PushType.INSERT, slot, proc.getProcId(), subProcIds);<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    } catch (IOException e) {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      // We are not able to serialize the procedure.<a name="line.553"></a>
+<span class="sourceLineNo">554</span>      // this is a code error, and we are not able to go on.<a name="line.554"></a>
+<span class="sourceLineNo">555</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: proc=" +<a name="line.555"></a>
+<span class="sourceLineNo">556</span>          proc + ", subprocs=" + Arrays.toString(subprocs), e);<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      throw new RuntimeException(e);<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    } finally {<a name="line.558"></a>
+<span class="sourceLineNo">559</span>      releaseSlot(slot);<a name="line.559"></a>
+<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  }<a name="line.561"></a>
 <span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    ByteSlot slot = acquireSlot();<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    try {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      // Serialize the insert<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      long[] procIds = new long[procs.length];<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.567"></a>
-<span class="sourceLineNo">568</span>        assert !procs[i].hasParent();<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        procIds[i] = procs[i].getProcId();<a name="line.569"></a>
-<span class="sourceLineNo">570</span>        ProcedureWALFormat.writeInsert(slot, procs[i]);<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>      // Push the transaction data and wait until it is persisted<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      pushData(PushType.INSERT, slot, Procedure.NO_PROC_ID, procIds);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    } catch (IOException e) {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      // We are not able to serialize the procedure.<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      // this is a code error, and we are not able to go on.<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: " +<a name="line.578"></a>
-<span class="sourceLineNo">579</span>          Arrays.toString(procs), e);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      throw new RuntimeException(e);<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    } finally {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      releaseSlot(slot);<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>  @Override<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  public void update(Procedure&lt;?&gt; proc) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    if (LOG.isTraceEnabled()) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      LOG.trace("Update " + proc);<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    }<a name="line.590"></a>
+<span class="sourceLineNo">563</span>  @Override<a name="line.563"></a>
+<span class="sourceLineNo">564</span>  public void insert(Procedure&lt;?&gt;[] procs) {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>    if (LOG.isTraceEnabled()) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      LOG.trace("Insert " + Arrays.toString(procs));<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>    ByteSlot slot = acquireSlot();<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    try {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      // Serialize the insert<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      long[] procIds = new long[procs.length];<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.573"></a>
+<span class="sourceLineNo">574</span>        assert !procs[i].hasParent();<a name="line.574"></a>
+<span class="sourceLineNo">575</span>        procIds[i] = procs[i].getProcId();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>        ProcedureWALFormat.writeInsert(slot, procs[i]);<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>      // Push the transaction data and wait until it is persisted<a name="line.579"></a>
+<span class="sourceLineNo">580</span>      pushData(PushType.INSERT, slot, Procedure.NO_PROC_ID, procIds);<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    } catch (IOException e) {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      // We are not able to serialize the procedure.<a name="line.582"></a>
+<span class="sourceLineNo">583</span>      // this is a code error, and we are not able to go on.<a name="line.583"></a>
+<span class="sourceLineNo">584</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: " +<a name="line.584"></a>
+<span class="sourceLineNo">585</span>          Arrays.toString(procs), e);<a name="line.585"></a>
+<span class="sourceLineNo">586</span>      throw new RuntimeException(e);<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    } finally {<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      releaseSlot(slot);<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    }<a name="line.589"></a>
+<span class="sourceLineNo">590</span>  }<a name="line.590"></a>
 <span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span>    ByteSlot slot = acquireSlot();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    try {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>      // Serialize the update<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      ProcedureWALFormat.writeUpdate(slot, proc);<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span>      // Push the transaction data and wait until it is persisted<a name="line.597"></a>
-<span class="sourceLineNo">598</span>      pushData(PushType.UPDATE, slot, proc.getProcId(), null);<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    } catch (IOException e) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      // We are not able to serialize the procedure.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      // this is a code error, and we are not able to go on.<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      throw new RuntimeException(e);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    } finally {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      releaseSlot(slot);<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    }<a name="line.606"></a>
-<span class="sourceLineNo">607</span>  }<a name="line.607"></a>
-<span class="sourceLineNo">608</span><a name="line.608"></a>
-<span class="sourceLineNo">609</span>  @Override<a name="line.609"></a>
-<span class="sourceLineNo">610</span>  public void delete(long procId) {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    LOG.trace("Delete {}", procId);<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    ByteSlot slot = acquireSlot();<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    try {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      // Serialize the delete<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      ProcedureWALFormat.writeDelete(slot, procId);<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>      // Push the transaction data and wait until it is persisted<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      pushData(PushType.DELETE, slot, procId, null);<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    } catch (IOException e) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      // We are not able to serialize the procedure.<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      // this is a code error, and we are not able to go on.<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + procId, e);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      throw new RuntimeException(e);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    } finally {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      releaseSlot(slot);<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    }<a name="line.626"></a>
-<span class="sourceLineNo">627</span>  }<a name="line.627"></a>
-<span class="sourceLineNo">628</span><a name="line.628"></a>
-<span class="sourceLineNo">629</span>  @Override<a name="line.629"></a>
-<span class="sourceLineNo">630</span>  public void delete(Procedure&lt;?&gt; proc, long[] subProcIds) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    assert proc != null : "expected a non-null procedure";<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    assert subProcIds != null &amp;&amp; subProcIds.length &gt; 0 : "expected subProcIds";<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    if (LOG.isTraceEnabled()) {<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      LOG.trace("Update " + proc + " and Delete " + Arrays.toString(subProcIds));<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>    ByteSlot slot = acquireSlot();<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    try {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      // Serialize the delete<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      ProcedureWALFormat.writeDelete(slot, proc, subProcIds);<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>      // Push the transaction data and wait until it is persisted<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      pushData(PushType.DELETE, slot, proc.getProcId(), subProcIds);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    } catch (IOException e) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      // We are not able to serialize the procedure.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      // this is a code error, and we are not able to go on.<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      throw new RuntimeException(e);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    } finally {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      releaseSlot(slot);<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    }<a name="line.651"></a>
-<span class="sourceLineNo">652</span>  }<a name="line.652"></a>
-<span class="sourceLineNo">653</span><a name="line.653"></a>
-<span class="sourceLineNo">654</span>  @Override<a name="line.654"></a>
-<span class="sourceLineNo">655</span>  public void delete(final long[] procIds, final int offset, final int count) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    if (count == 0) return;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    if (offset == 0 &amp;&amp; count == procIds.length) {<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      delete(procIds);<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    } else if (count == 1) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      delete(procIds[offset]);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    } else {<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      delete(Arrays.copyOfRange(procIds, offset, offset + count));<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><a name="line.665"></a>
-<span class="sourceLineNo">666</span>  private void delete(long[] procIds) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    if (LOG.isTraceEnabled()) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      LOG.trace("Delete " + Arrays.toString(procIds));<a name="line.668"></a>
+<span class="sourceLineNo">592</span>  @Override<a name="line.592"></a>
+<span class="sourceLineNo">593</span>  public void update(Procedure&lt;?&gt; proc) {<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    if (LOG.isTraceEnabled()) {<a name="line.594"></a>
+<span class="sourceLineNo">595</span>      LOG.trace("Update " + proc);<a name="line.595"></a>
+<span class="sourceLineNo">596</span>    }<a name="line.596"></a>
+<span class="sourceLineNo">597</span><a name="line.597"></a>
+<span class="sourceLineNo">598</span>    ByteSlot slot = acquireSlot();<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    try {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>      // Serialize the update<a name="line.600"></a>
+<span class="sourceLineNo">601</span>      ProcedureWALFormat.writeUpdate(slot, proc);<a name="line.601"></a>
+<span class="sourceLineNo">602</span><a name="line.602"></a>
+<span class="sourceLineNo">603</span>      // Push the transaction data and wait until it is persisted<a name="line.603"></a>
+<span class="sourceLineNo">604</span>      pushData(PushType.UPDATE, slot, proc.getProcId(), null);<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    } catch (IOException e) {<a name="line.605"></a>
+<span class="sourceLineNo">606</span>      // We are not able to serialize the procedure.<a name="line.606"></a>
+<span class="sourceLineNo">607</span>      // this is a code error, and we are not able to go on.<a name="line.607"></a>
+<span class="sourceLineNo">608</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      throw new RuntimeException(e);<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    } finally {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>      releaseSlot(slot);<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    }<a name="line.612"></a>
+<span class="sourceLineNo">613</span>  }<a name="line.613"></a>
+<span class="sourceLineNo">614</span><a name="line.614"></a>
+<span class="sourceLineNo">615</span>  @Override<a name="line.615"></a>
+<span class="sourceLineNo">616</span>  public void delete(long procId) {<a name="line.616"></a>
+<span class="sourceLineNo">617</span>    LOG.trace("Delete {}", procId);<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    ByteSlot slot = acquireSlot();<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    try {<a name="line.619"></a>
+<span class="sourceLineNo">620</span>      // Serialize the delete<a name="line.620"></a>
+<span class="sourceLineNo">621</span>      ProcedureWALFormat.writeDelete(slot, procId);<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>      // Push the transaction data and wait until it is persisted<a name="line.623"></a>
+<span class="sourceLineNo">624</span>      pushData(PushType.DELETE, slot, procId, null);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    } catch (IOException e) {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>      // We are not able to serialize the procedure.<a name="line.626"></a>
+<span class="sourceLineNo">627</span>      // this is a code error, and we are not able to go on.<a name="line.627"></a>
+<span class="sourceLineNo">628</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + procId, e);<a name="line.628"></a>
+<span class="sourceLineNo">629</span>      throw new RuntimeException(e);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>    } finally {<a name="line.630"></a>
+<span class="sourceLineNo">631</span>      releaseSlot(slot);<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    }<a name="line.632"></a>
+<span class="sourceLineNo">633</span>  }<a name="line.633"></a>
+<span class="sourceLineNo">634</span><a name="line.634"></a>
+<span class="sourceLineNo">635</span>  @Override<a name="line.635"></a>
+<span class="sourceLineNo">636</span>  public void delete(Procedure&lt;?&gt; proc, long[] subProcIds) {<a name="line.636"></a>
+<span class="sourceLineNo">637</span>    assert proc != null : "expected a non-null procedure";<a name="line.637"></a>
+<span class="sourceLineNo">638</span>    assert subProcIds != null &amp;&amp; subProcIds.length &gt; 0 : "expected subProcIds";<a name="line.638"></a>
+<span class="sourceLineNo">639</span>    if (LOG.isTraceEnabled()) {<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      LOG.trace("Update " + proc + " and Delete " + Arrays.toString(subProcIds));<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>    ByteSlot slot = acquireSlot();<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    try {<a name="line.644"></a>
+<span class="sourceLineNo">645</span>      // Serialize the delete<a name="line.645"></a>
+<span class="sourceLineNo">646</span>      ProcedureWALFormat.writeDelete(slot, proc, subProcIds);<a name="line.646"></a>
+<span class="sourceLineNo">647</span><a name="line.647"></a>
+<span class="sourceLineNo">648</span>      // Push the transaction data and wait until it is persisted<a name="line.648"></a>
+<span class="sourceLineNo">649</span>      pushData(PushType.DELETE, slot, proc.getProcId(), subProcIds);<a name="line.649"></a>
+<span class="sourceLineNo">650</span>    } catch (IOException e) {<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      // We are not able to serialize the procedure.<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      // this is a code error, and we are not able to go on.<a name="line.652"></a>
+<span class="sourceLineNo">653</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      throw new RuntimeException(e);<a name="line.654"></a>
+<span class="sourceLineNo">655</span>    } finally {<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      releaseSlot(slot);<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><a name="line.659"></a>
+<span class="sourceLineNo">660</span>  @Override<a name="line.660"></a>
+<span class="sourceLineNo">661</span>  public void delete(final long[] procIds, final int offset, final int count) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>    if (count == 0) return;<a name="line.662"></a>
+<span class="sourceLineNo">663</span>    if (offset == 0 &amp;&amp; count == procIds.length) {<a name="line.663"></a>
+<span class="sourceLineNo">664</span>      delete(procIds);<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    } else if (count == 1) {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>      delete(procIds[offset]);<a name="line.666"></a>
+<span class="sourceLineNo">667</span>    } else {<a name="line.667"></a>
+<span class="sourceLineNo">668</span>      delete(Arrays.copyOfRange(procIds, offset, offset + count));<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>    final ByteSlot slot = acquireSlot();<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    try {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      // Serialize the delete<a name="line.673"></a>
-<span class="sourceLineNo">674</span>      for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>        ProcedureWALFormat.writeDelete(slot, procIds[i]);<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      }<a name="line.676"></a>
-<span class="sourceLineNo">677</span><a name="line.677"></a>
-<span class="sourceLineNo">678</span>      // Push the transaction data and wait until it is persisted<a name="line.678"></a>
-<span class="sourceLineNo">679</span>      pushData(PushType.DELETE, slot, Procedure.NO_PROC_ID, procIds);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    } catch (IOException e) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      // We are not able to serialize the procedure.<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      // this is a code error, and we are not able to go on.<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      LOG.error("Unable to serialize the procedures: " + Arrays.toString(procIds), e);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>      throw new RuntimeException(e);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    } finally {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      releaseSlot(slot);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>    }<a name="line.687"></a>
-<span class="sourceLineNo">688</span>  }<a name="line.688"></a>
-<span class="sourceLineNo">689</span><a name="line.689"></a>
-<span class="sourceLineNo">690</span>  private ByteSlot acquireSlot() {<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    ByteSlot slot = slotsCache.poll();<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    return slot != null ? slot : new ByteSlot();<a name="line.692"></a>
-<span class="sourceLineNo">693</span>  }<a name="line.693"></a>
-<span class="sourceLineNo">694</span><a name="line.694"></a>
-<span class="sourceLineNo">695</span>  private void releaseSlot(final ByteSlot slot) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    slot.reset();<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    slotsCache.offer(slot);<a name="line.697"></a>
-<span class="sourceLineNo">698</span>  }<a name="line.698"></a>
-<span class="sourceLineNo">699</span><a name="line.699"></a>
-<span class="sourceLineNo">700</span>  private enum PushType { INSERT, UPDATE, DELETE }<a name="line.700"></a>
-<span class="sourceLineNo">701</span><a name="line.701"></a>
-<span class="sourceLineNo">702</span>  private long pushData(final PushType type, final ByteSlot slot,<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      final long procId, final long[] subProcIds) {<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    if (!isRunning()) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      throw new RuntimeException("the store must be running before inserting data");<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    }<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    if (logs.isEmpty()) {<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      throw new RuntimeException("recoverLease() must be called before inserting data");<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    }<a name="line.709"></a>
-<span class="sourceLineNo">710</span><a name="line.710"></a>
-<span class="sourceLineNo">711</span>    long logId = -1;<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    lock.lock();<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    try {<a name="line.713"></a>
-<span class="sourceLineNo">714</span>      // Wait for the sync to be completed<a name="line.714"></a>
-<span class="sourceLineNo">715</span>      while (true) {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        if (!isRunning()) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>          throw new RuntimeException("store no longer running");<a name="line.717"></a>
-<span class="sourceLineNo">718</span>        } else if (isSyncAborted()) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>          throw new RuntimeException("sync aborted", syncException.get());<a name="line.719"></a>
-<span class="sourceLineNo">720</span>        } else if (inSync.get()) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>          syncCond.await();<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        } else if (slotIndex &gt;= syncMaxSlot) {<a name="line.722"></a>
-<span class="sourceLineNo">723</span>          slotCond.signal();<a name="line.723"></a>
-<span class="sourceLineNo">724</span>          syncCond.await();<a name="line.724"></a>
-<span class="sourceLineNo">725</span>        } else {<a name="line.725"></a>
-<span class="sourceLineNo">726</span>          break;<a name="line.726"></a>
-<span class="sourceLineNo">727</span>        }<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      }<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span>      final long pushSyncId = syncId.get();<a name="line.730"></a>
-<span class="sourceLineNo">731</span>      updateStoreTracker(type, procId, subProcIds);<a name="line.731"></a>
-<span class="sourceLineNo">732</span>      slots[slotIndex++] = slot;<a name="line.732"></a>
-<span class="sourceLineNo">733</span>      logId = flushLogId;<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span>      // Notify that there is new data<a name="line.735"></a>
-<span class="sourceLineNo">736</span>      if (slotIndex == 1) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>        waitCond.signal();<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>      // Notify that the slots are full<a name="line.740"></a>
-<span class="sourceLineNo">741</span>      if (slotIndex == syncMaxSlot) {<a name="line.741"></a>
-<span class="sourceLineNo">742</span>        waitCond.signal();<a name="line.742"></a>
-<span class="sourceLineNo">743</span>        slotCond.signal();<a name="line.743"></a>
+<span class="sourceLineNo">670</span>  }<a name="line.670"></a>
+<span class="sourceLineNo">671</span><a name="line.671"></a>
+<span class="sourceLineNo">672</span>  private void delete(long[] procIds) {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>    if (LOG.isTraceEnabled()) {<a name="line.673"></a>
+<span class="sourceLineNo">674</span>      LOG.trace("Delete " + Arrays.toString(procIds));<a name="line.674"></a>
+<span class="sourceLineNo">675</span>    }<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span>    final ByteSlot slot = acquireSlot();<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    try {<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      // Serialize the delete<a name="line.679"></a>
+<span class="sourceLineNo">680</span>      for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span>        ProcedureWALFormat.writeDelete(slot, procIds[i]);<a name="line.681"></a>
+<span class="sourceLineNo">682</span>      }<a name="line.682"></a>
+<span class="sourceLineNo">683</span><a name="line.683"></a>
+<span class="sourceLineNo">684</span>      // Push the transaction data and wait until it is persisted<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      pushData(PushType.DELETE, slot, Procedure.NO_PROC_ID, procIds);<a name="line.685"></a>
+<span class="sourceLineNo">686</span>    } catch (IOException e) {<a name="line.686"></a>
+<span class="sourceLineNo">687</span>      // We are not able to serialize the procedure.<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      // this is a code error, and we are not able to go on.<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      LOG.error("Unable to serialize the procedures: " + Arrays.toString(procIds), e);<a name="line.689"></a>
+<span class="sourceLineNo">690</span>      throw new RuntimeException(e);<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    } finally {<a name="line.691"></a>
+<span class="sourceLineNo">692</span>      releaseSlot(slot);<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    }<a name="line.693"></a>
+<span class="sourceLineNo">694</span>  }<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span>  private ByteSlot acquireSlot() {<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    ByteSlot slot = slotsCache.poll();<a name="line.697"></a>
+<span class="sourceLineNo">698</span>    return slot != null ? slot : new ByteSlot();<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>  private void releaseSlot(final ByteSlot slot) {<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    slot.reset();<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    slotsCache.offer(slot);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>  }<a name="line.704"></a>
+<span class="sourceLineNo">705</span><a name="line.705"></a>
+<span class="sourceLineNo">706</span>  private enum PushType { INSERT, UPDATE, DELETE }<a name="line.706"></a>
+<span class="sourceLineNo">707</span><a name="line.707"></a>
+<span class="sourceLineNo">708</span>  private long pushData(final PushType type, final ByteSlot slot,<a name="line.708"></a>
+<span class="sourceLineNo">709</span>      final long procId, final long[] subProcIds) {<a name="line.709"></a>
+<span class="sourceLineNo">710</span>    if (!isRunning()) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span>      throw new RuntimeException("the store must be running before inserting data");<a name="line.711"></a>
+<span class="sourceLineNo">712</span>    }<a name="line.712"></a>
+<span class="sourceLineNo">713</span>    if (logs.isEmpty()) {<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      throw new RuntimeException("recoverLease() must be called before inserting data");<a name="line.714"></a>
+<span class="sourceLineNo">715</span>    }<a name="line.715"></a>
+<span class="sourceLineNo">716</span><a name="line.716"></a>
+<span class="sourceLineNo">717</span>    long logId = -1;<a name="line.717"></a>
+<span class="sourceLineNo">718</span>    lock.lock();<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    try {<a name="line.719"></a>
+<span class="sourceLineNo">720</span>      // Wait for the sync to be completed<a name="line.720"></a>
+<span class="sourceLineNo">721</span>      while (true) {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>        if (!isRunning()) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>          throw new RuntimeException("store no longer running");<a name="line.723"></a>
+<span class="sourceLineNo">724</span>        } else if (isSyncAborted()) {<a name="line.724"></a>
+<span class="sourceLineNo">725</span>          throw new RuntimeException("sync aborted", syncException.get());<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        } else if (inSync.get()) {<a name="line.726"></a>
+<span class="sourceLineNo">727</span>          syncCond.await();<a name="line.727"></a>
+<span class="sourceLineNo">728</span>        } else if (slotIndex &gt;= syncMaxSlot) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span>          slotCond.signal();<a name="line.729"></a>
+<span class="sourceLineNo">730</span>          syncCond.await();<a name="line.730"></a>
+<span class="sourceLineNo">731</span>        } else {<a name="line.731"></a>
+<span class="sourceLineNo">732</span>          break;<a name="line.732"></a>
+<span class="sourceLineNo">733</span>        }<a name="line.733"></a>
+<span class="sourceLineNo">734</span>      }<a name="line.734"></a>
+<span class="sourceLineNo">735</span><a name="line.735"></a>
+<span class="sourceLineNo">736</span>      final long pushSyncId = syncId.get();<a name="line.736"></a>
+<span class="sourceLineNo">737</span>      updateStoreTracker(type, procId, subProcIds);<a name="line.737"></a>
+<span class="sourceLineNo">738</span>      slots[slotIndex++] = slot;<a name="line.738"></a>
+<span class="sourceLineNo">739</span>      logId = flushLogId;<a name="line.739"></a>
+<span class="sourceLineNo">740</span><a name="line.740"></a>
+<span class="sourceLineNo">741</span>      // Notify that there is new data<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      if (slotIndex == 1) {<a name="line.742"></a>
+<span class="sourceLineNo">743</span>        waitCond.signal();<a name="line.743"></a>
 <span class="sourceLineNo">744</span>      }<a name="line.744"></a>
 <span class="sourceLineNo">745</span><a name="line.745"></a>
-<span class="sourceLineNo">746</span>      while (pushSyncId == syncId.get() &amp;&amp; isRunning()) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        syncCond.await();<a name="line.747"></a>
-<span class="sourceLineNo">748</span>      }<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    } catch (InterruptedException e) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      Thread.currentThread().interrupt();<a name="line.750"></a>
-<span class="sourceLineNo">751</span>      sendAbortProcessSignal();<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      throw new RuntimeException(e);<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    } finally {<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      lock.unlock();<a name="line.754"></a>
-<span class="sourceLineNo">755</span>      if (isSyncAborted()) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span>        throw new RuntimeException("sync aborted", syncException.get());<a name="line.756"></a>
-<span class="sourceLineNo">757</span>      }<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    }<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    return logId;<a name="line.759"></a>
-<span class="sourceLineNo">760</span>  }<a name="line.760"></a>
-<span class="sourceLineNo">761</span><a name="line.761"></a>
-<span class="sourceLineNo">762</span>  private void updateStoreTracker(final PushType type,<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      final long procId, final long[] subProcIds) {<a name="line.763"></a>
-<span class="sourceLineNo">764</span>    switch (type) {<a name="line.764"></a>
-<span class="sourceLineNo">765</span>      case INSERT:<a name="line.765"></a>
-<span class="sourceLineNo">766</span>        if (subProcIds == null) {<a name="line.766"></a>
-<span class="sourceLineNo">767</span>          storeTracker.insert(procId);<a name="line.767"></a>
-<span class="sourceLineNo">768</span>        } else if (procId == Procedure.NO_PROC_ID) {<a name="line.768"></a>
-<span class="sourceLineNo">769</span>          storeTracker.insert(subProcIds);<a name="line.769"></a>
-<span class="sourceLineNo">770</span>        } else {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>          storeTracker.insert(procId, subProcIds);<a name="line.771"></a>
-<span class="sourceLineNo">772</span>          holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.772"></a>
-<span class="sourceLineNo">773</span>        }<a name="line.773"></a>
-<span class="sourceLineNo">774</span>        break;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>      case UPDATE:<a name="line.775"></a>
-<span class="sourceLineNo">776</span>        storeTracker.update(procId);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>        holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.777"></a>
-<span class="sourceLineNo">778</span>        break;<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      case DELETE:<a name="line.779"></a>
-<span class="sourceLineNo">780</span>        if (subProcIds != null &amp;&amp; subProcIds.length &gt; 0) {<a name="line.780"></a>
-<span class="sourceLineNo">781</span>          storeTracker.delete(subProcIds);<a name="line.781"></a>
-<span class="sourceLineNo">782</span>          holdingCleanupTracker.setDeletedIfModified(subProcIds);<a name="line.782"></a>
-<span class="sourceLineNo">783</span>        } else {<a name="line.783"></a>
-<span class="sourceLineNo">784</span>          storeTracker.delete(procId);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>          holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.785"></a>
-<span class="sourceLineNo">786</span>        }<a name="line.786"></a>
-<span class="sourceLineNo">787</span>        break;<a name="line.787"></a>
-<span class="sourceLineNo">788</span>      default:<a name="line.788"></a>
-<span class="sourceLineNo">789</span>        throw new RuntimeException("invalid push type " + type);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    }<a name="line.790"></a>
-<span class="sourceLineNo">791</span>  }<a name="line.791"></a>
-<span class="sourceLineNo">792</span><a name="line.792"></a>
-<span class="sourceLineNo">793</span>  private boolean isSyncAborted() {<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    return syncException.get() != null;<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 void syncLoop() throws Throwable {<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    long totalSyncedToStore = 0;<a name="line.798"></a>
-<span class="sourceLineNo">799</span>    inSync.set(false);<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    lock.lock();<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    try {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>      while (isRunning()) {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>        try {<a name="line.803"></a>
-<span class="sourceLineNo">804</span>          // Wait until new data is available<a name="line.804"></a>
-<span class="sourceLineNo">805</span>          if (slotIndex == 0) {<a name="line.805"></a>
-<span class="sourceLineNo">806</span>            if (!loading.get()) {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>              periodicRoll();<a name="line.807"></a>
-<span class="sourceLineNo">808</span>            }<a name="line.808"></a>
-<span class="sourceLineNo">809</span><a name="line.809"></a>
-<span class="sourceLineNo">810</span>            if (LOG.isTraceEnabled()) {<a name="line.810"></a>
-<span class="sourceLineNo">811</span>              float rollTsSec = getMillisFromLastRoll() / 1000.0f;<a name="line.811"></a>
-<span class="sourceLineNo">812</span>              LOG.trace(String.format("Waiting for data. flushed=%s (%s/sec)",<a name="line.812"></a>
-<span class="sourceLineNo">813</span>                        StringUtils.humanSize(totalSynced.get()),<a name="line.813"></a>
-<span class="sourceLineNo">814</span>                        StringUtils.humanSize(totalSynced.get() / rollTsSec)));<a name="line.814"></a>
-<span class="sourceLineNo">815</span>            }<a name="line.815"></a>
-<span class="sourceLineNo">816</span><a name="line.816"></a>
-<span class="sourceLineNo">817</span>            waitCond.await(getMillisToNextPeriodicRoll(), TimeUnit.MILLISECONDS);<a name="line.817"></a>
-<span class="sourceLineNo">818</span>            if (slotIndex == 0) {<a name="line.818"></a>
-<span class="sourceLineNo">819</span>              // no data.. probably a stop() or a periodic roll<a name="line.819"></a>
-<span class="sourceLineNo">820</span>              continue;<a name="line.820"></a>
+<span class="sourceLineNo">746</span>      // Notify that the slots are full<a name="line.746"></a>
+<span class="sourceLineNo">747</span>      if (slotIndex == syncMaxSlot) {<a name="line.747"></a>
+<span class="sourceLineNo">748</span>        waitCond.signal();<a name="line.748"></a>
+<span class="sourceLineNo">749</span>        slotCond.signal();<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>      while (pushSyncId == syncId.get() &amp;&amp; isRunning()) {<a name="line.752"></a>
+<span class="sourceLineNo">753</span>        syncCond.await();<a name="line.753"></a>
+<span class="sourceLineNo">754</span>      }<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    } catch (InterruptedException e) {<a name="line.755"></a>
+<span class="sourceLineNo">756</span>      Thread.currentThread().interrupt();<a name="line.756"></a>
+<span class="sourceLineNo">757</span>      sendAbortProcessSignal();<a name="line.757"></a>
+<span class="sourceLineNo">758</span>      throw new RuntimeException(e);<a name="line.758"></a>
+<span class="sourceLineNo">759</span>    } finally {<a name="line.759"></a>
+<span class="sourceLineNo">760</span>      lock.unlock();<a name="line.760"></a>
+<span class="sourceLineNo">761</span>      if (isSyncAborted()) {<a name="line.761"></a>
+<span class="sourceLineNo">762</span>        throw new RuntimeException("sync aborted", syncException.get());<a name="line.762"></a>
+<span class="sourceLineNo">763</span>      }<a name="line.763"></a>
+<span class="sourceLineNo">764</span>    }<a name="line.764"></a>
+<span class="sourceLineNo">765</span>    return logId;<a name="line.765"></a>
+<span class="sourceLineNo">766</span>  }<a name="line.766"></a>
+<span class="sourceLineNo">767</span><a name="line.767"></a>
+<span class="sourceLineNo">768</span>  private void updateStoreTracker(final PushType type,<a name="line.768"></a>
+<span class="sourceLineNo">769</span>      final long procId, final long[] subProcIds) {<a name="line.769"></a>
+<span class="sourceLineNo">770</span>    switch (type) {<a name="line.770"></a>
+<span class="sourceLineNo">771</span>      case INSERT:<a name="line.771"></a>
+<span class="sourceLineNo">772</span>        if (subProcIds == null) {<a name="line.772"></a>
+<span class="sourceLineNo">773</span>          storeTracker.insert(procId);<a name="line.773"></a>
+<span class="sourceLineNo">774</span>        } else if (procId == Procedure.NO_PROC_ID) {<a name="line.774"></a>
+<span class="sourceLineNo">775</span>          storeTracker.insert(subProcIds);<a name="line.775"></a>
+<span class="sourceLineNo">776</span>        } else {<a name="line.776"></a>
+<span class="sourceLineNo">777</span>          storeTracker.insert(procId, subProcIds);<a name="line.777"></a>
+<span class="sourceLineNo">778</span>          holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.778"></a>
+<span class="sourceLineNo">779</span>        }<a name="line.779"></a>
+<span class="sourceLineNo">780</span>        break;<a name="line.780"></a>
+<span class="sourceLineNo">781</span>      case UPDATE:<a name="line.781"></a>
+<span class="sourceLineNo">782</span>        storeTracker.update(procId);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>        holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.783"></a>
+<span class="sourceLineNo">784</span>        break;<a name="line.784"></a>
+<span class="sourceLineNo">785</span>      case DELETE:<a name="line.785"></a>
+<span class="sourceLineNo">786</span>        if (subProcIds != null &amp;&amp; subProcIds.length &gt; 0) {<a name="line.786"></a>
+<span class="sourceLineNo">787</span>          storeTracker.delete(subProcIds);<a name="line.787"></a>
+<span class="sourceLineNo">788</span>          holdingCleanupTracker.setDeletedIfModified(subProcIds);<a name="line.788"></a>
+<span class="sourceLineNo">789</span>        } else {<a name="line.789"></a>
+<span class="sourceLineNo">790</span>          storeTracker.delete(procId);<a name="line.790"></a>
+<span class="sourceLineNo">791</span>          holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.791"></a>
+<span class="sourceLineNo">792</span>        }<a name="line.792"></a>
+<span class="sourceLineNo">793</span>        break;<a name="line.793"></a>
+<span class="sourceLineNo">794</span>      default:<a name="line.794"></a>
+<span class="sourceLineNo">795</span>        throw new RuntimeException("invalid push type " + type);<a name="line.795"></a>
+<span class="sourceLineNo">796</span>    }<a name="line.796"></a>
+<span class="sourceLineNo">797</span>  }<a name="line.797"></a>
+<span class="sourceLineNo">798</span><a name="line.798"></a>
+<span class="sourceLineNo">799</span>  private boolean isSyncAborted() {<a name="line.799"></a>
+<span class="sourceLineNo">800</span>    return syncException.get() != null;<a name="line.800"></a>
+<span class="sourceLineNo">801</span>  }<a name="line.801"></a>
+<span class="sourceLineNo">802</span><a name="line.802"></a>
+<span class="sourceLineNo">803</span>  private void syncLoop() throws Throwable {<a name="line.803"></a>
+<span class="sourceLineNo">804</span>    long totalSyncedToStore = 0;<a name="line.804"></a>
+<span class="sourceLineNo">805</span>    inSync.set(false);<a name="line.805"></a>
+<span class="sourceLineNo">806</span>    lock.lock();<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    try {<a name="line.807"></a>
+<span class="sourceLineNo">808</span>      while (isRunning()) {<a name="line.808"></a>
+<span class="sourceLineNo">809</span>        try {<a name="line.809"></a>
+<span class="sourceLineNo">810</span>          // Wait until new data is available<a name="line.810"></a>
+<span class="sourceLineNo">811</span>          if (slotIndex == 0) {<a name="line.811"></a>
+<span class="sourceLineNo">812</span>            if (!loading.get()) {<a name="line.812"></a>
+<span class="sourceLineNo">813</span>              periodicRoll();<a name="line.813"></a>
+<span class="sourceLineNo">814</span>            }<a name="line.814"></a>
+<span class="sourceLineNo">815</span><a name="line.815"></a>
+<span class="sourceLineNo">816</span>            if (LOG.isTraceEnabled()) {<a name="line.816"></a>
+<span class="sourceLineNo">817</span>              float rollTsSec = getMillisFromLastRoll() / 1000.0f;<a name="line.817"></a>
+<span class="sourceLineNo">818</span>              LOG.trace(String.format("Waiting for data. flushed=%s (%s/sec)",<a name="line.818"></a>
+<span class="sourceLineNo">819</span>                        StringUtils.humanSize(totalSynced.get()),<a name="line.819"></a>
+<span class="sourceLineNo">820</span>                        StringUtils.humanSize(totalSynced.get() / rollTsSec)));<a name="line.820"></a>
 <span class="sourceLineNo">821</span>            }<a name="line.821"></a>
-<span class="sourceLineNo">822</span>          }<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          // Wait SYNC_WAIT_MSEC or the signal of "slots full" before flushing<a name="line.823"></a>
-<span class="sourceLineNo">824</span>          syncMaxSlot = runningProcCount;<a name="line.824"></a>
-<span class="sourceLineNo">825</span>          assert syncMaxSlot &gt; 0 : "unexpected syncMaxSlot=" + syncMaxSlot;<a name="line.825"></a>
-<span class="sourceLineNo">826</span>          final long syncWaitSt = System.currentTimeMillis();<a name="line.826"></a>
-<span class="sourceLineNo">827</span>          if (slotIndex != syncMaxSlot) {<a name="line.827"></a>
-<span class="sourceLineNo">828</span>            slotCond.await(syncWaitMsec, TimeUnit.MILLISECONDS);<a name="line.828"></a>
-<span class="sourceLineNo">829</span>          }<a name="line.829"></a>
-<span class="sourceLineNo">830</span><a name="line.830"></a>
-<span class="sourceLineNo">831</span>          final long currentTs = System.currentTimeMillis();<a name="line.831"></a>
-<span class="sourceLineNo">832</span>          final long syncWaitMs = currentTs - syncWaitSt;<a name="line.832"></a>
-<span class="sourceLineNo">833</span>          final float rollSec = getMillisFromLastRoll() / 1000.0f;<a name="line.833"></a>
-<span class="sourceLineNo">834</span>          final float syncedPerSec = totalSyncedToStore / rollSec;<a name="line.834"></a>
-<span class="sourceLineNo">835</span>          if (LOG.isTraceEnabled() &amp;&amp; (syncWaitMs &gt; 10 || slotIndex &lt; syncMaxSlot)) {<a name="line.835"></a>
-<span class="sourceLineNo">836</span>            LOG.trace(String.format("Sync wait %s, slotIndex=%s , totalSynced=%s (%s/sec)",<a name="line.836"></a>
-<span class="sourceLineNo">837</span>                      StringUtils.humanTimeDiff(syncWaitMs), slotIndex,<a name="line.837"></a>
-<span class="sourceLineNo">838</span>                      StringUtils.humanSize(totalSyncedToStore),<a name="line.838"></a>
-<span class="sourceLineNo">839</span>                      StringUtils.humanSize(syncedPerSec)));<a name="line.839"></a>
-<span class="sourceLineNo">840</span>          }<a name="line.840"></a>
-<span class="sourceLineNo">841</span><a name="line.841"></a>
-<span class="sourceLineNo">842</span>          // update webui circular buffers (TODO: get rid of allocations)<a name="line.842"></a>
-<span class="sourceLineNo">843</span>          final SyncMetrics syncMetrics = new SyncMetrics();<a name="line.843"></a>
-<span class="sourceLineNo">844</span>          syncMetrics.timestamp = currentTs;<a name="line.844"></a>
-<span class="sourceLineNo">845</span>          syncMetrics.syncWaitMs = syncWaitMs;<a name="line.845"></a>
-<span class="sourceLineNo">846</span>          syncMetrics.syncedEntries = slotIndex;<a name="line.846"></a>
-<span class="sourceLineNo">847</span>          syncMetrics.totalSyncedBytes = totalSyncedToStore;<a name="line.847"></a>
-<span class="sourceLineNo">848</span>          syncMetrics.syncedPerSec = syncedPerSec;<a name="line.848"></a>
-<span class="sourceLineNo">849</span>          syncMetricsQueue.add(syncMetrics);<a name="line.849"></a>
-<span class="sourceLineNo">850</span><a name="line.850"></a>
-<span class="sourceLineNo">851</span>          // sync<a name="line.851"></a>
-<span class="sourceLineNo">852</span>          inSync.set(true);<a name="line.852"></a>
-<span class="sourceLineNo">853</span>          long slotSize = syncSlots();<a name="line.853"></a>
-<span class="sourceLineNo">854</span>          logs.getLast().addToSize(slotSize);<a name="line.854"></a>
-<span class="sourceLineNo">855</span>          totalSyncedToStore = totalSynced.addAndGet(slotSize);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>          slotIndex = 0;<a name="line.856"></a>
-<span class="sourceLineNo">857</span>          inSync.set(false);<a name="line.857"></a>
-<span class="sourceLineNo">858</span>          syncId.incrementAndGet();<a name="line.858"></a>
-<span class="sourceLineNo">859</span>        } catch (InterruptedException e) {<a name="line.859"></a>
-<span class="sourceLineNo">860</span>          Thread.currentThread().interrupt();<a name="line.860"></a>
-<span class="sourceLineNo">861</span>          syncException.compareAndSet(null, e);<a name="line.861"></a>
-<span class="sourceLineNo">862</span>          sendAbortProcessSignal();<a name="line.862"></a>
-<span class="sourceLineNo">863</span>          throw e;<a name="line.863"></a>
-<span class="sourceLineNo">864</span>        } catch (Throwable t) {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>          syncException.compareAndSet(null, t);<a name="line.865"></a>
-<span class="sourceLineNo">866</span>          sendAbortProcessSignal();<a name="line.866"></a>
-<span class="sourceLineNo">867</span>          throw t;<a name="line.867"></a>
-<span class="sourceLineNo">868</span>        } finally {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>          syncCond.signalAll();<a name="line.869"></a>
-<span class="sourceLineNo">870</span>        }<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      }<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    } finally {<a name="line.872"></a>
-<span class="sourceLineNo">873</span>      lock.unlock();<a name="line.873"></a>
-<span class="sourceLineNo">874</span>    }<a name="line.874"></a>
-<span class="sourceLineNo">875</span>  }<a name="line.875"></a>
-<span class="sourceLineNo">876</span><a name="line.876"></a>
-<span class="sourceLineNo">877</span>  public ArrayList&lt;SyncMetrics&gt; getSyncMetrics() {<a name="line.877"></a>
-<span class="sourceLineNo">878</span>    lock.lock();<a name="line.878"></a>
-<span class="sourceLineNo">879</span>    try {<a name="line.879"></a>
-<span class="sourceLineNo">880</span>      return new ArrayList&lt;&gt;(syncMetricsQueue);<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    } finally {<a name="line.881"></a>
-<span class="sourceLineNo">882</span>      lock.unlock();<a name="line.882"></a>
-<span class="sourceLineNo">883</span>    }<a name="line.883"></a>
-<span class="sourceLineNo">884</span>  }<a name="line.884"></a>
-<span class="sourceLineNo">885</span><a name="line.885"></a>
-<span class="sourceLineNo">886</span>  private long syncSlots() throws Throwable {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    int retry = 0;<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    int logRolled = 0;<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    long totalSynced = 0;<a name="line.889"></a>
-<span class="sourceLineNo">890</span>    do {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>      try {<a name="line.891"></a>
-<span class="sourceLineNo">892</span>        totalSynced = syncSlots(stream, slots, 0, slotIndex);<a name="line.892"></a>
-<span class="sourceLineNo">893</span>        break;<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      } catch (Throwable e) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span>        LOG.warn("unable to sync slots, retry=" + retry);<a name="line.895"></a>
-<span class="sourceLineNo">896</span>        if (++retry &gt;= maxRetriesBeforeRoll) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>          if (logRolled &gt;= maxSyncFailureRoll &amp;&amp; isRunning()) {<a name="line.897"></a>
-<span class="sourceLineNo">898</span>            LOG.error("Sync slots after log roll failed, abort.", e);<a name="line.898"></a>
-<span class="sourceLineNo">899</span>            throw e;<a name="line.899"></a>
-<span class="sourceLineNo">900</span>          }<a name="line.900"></a>
-<span class="sourceLineNo">901</span><a name="line.901"></a>
-<span class="sourceLineNo">902</span>          if (!rollWriterWithRetries()) {<a name="line.902"></a>
-<span class="sourceLineNo">903</span>            throw e;<a name="line.903"></a>
-<span class="sourceLineNo">904</span>          }<a name="line.904"></a>
-<span class="sourceLineNo">905</span><a name="line.905"></a>
-<span class="sourceLineNo">906</span>          logRolled++;<a name="line.906"></a>
-<span class="sourceLineNo">907</span>          retry = 0;<a name="line.907"></a>
-<span class="sourceLineNo">908</span>        }<a name="line.908"></a>
-<span class="sourceLineNo">909</span>      }<a name="line.909"></a>
-<span class="sourceLineNo">910</span>    } while (isRunning());<a name="line.910"></a>
-<span class="sourceLineNo">911</span>    return totalSynced;<a name="line.911"></a>
-<span class="sourceLineNo">912</span>  }<a name="line.912"></a>
-<span class="sourceLineNo">913</span><a name="line.913"></a>
-<span class="sourceLineNo">914</span>  protected long syncSlots(final FSDataOutputStream stream, final ByteSlot[] slots,<a name="line.914"></a>
-<span class="sourceLineNo">915</span>      final int offset, final int count) throws IOException {<a name="line.915"></a>
-<span class="sourceLineNo">916</span>    long totalSynced = 0;<a name="line.916"></a>
-<span class="sourceLineNo">917</span>    for (int i = 0; i &lt; count; ++i) {<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      final ByteSlot data = slots[offset + i];<a name="line.918"></a>
-<span class="sourceLineNo">919</span>      data.writeTo(stream);<a name="line.919"></a>
-<span class="sourceLineNo">920</span>      totalSynced += data.size();<a name="line.920"></a>
-<span class="sourceLineNo">921</span>    }<a name="line.921"></a>
-<span class="sourceLineNo">922</span><a name="line.922"></a>
-<span class="sourceLineNo">923</span>    syncStream(stream);<a name="line.923"></a>
-<span class="sourceLineNo">924</span>    sendPostSyncSignal();<a name="line.924"></a>
-<span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>    if (LOG.isTraceEnabled()) {<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      LOG.trace("Sync slots=" + count + '/' + syncMaxSlot +<a name="line.927"></a>
-<span class="sourceLineNo">928</span>                ", flushed=" + StringUtils.humanSize(totalSynced));<a name="line.928"></a>
-<span class="sourceLineNo">929</span>    }<a name="line.929"></a>
-<span class="sourceLineNo">930</span>    return totalSynced;<a name="line.930"></a>
-<span class="sourceLineNo">931</span>  }<a name="line.931"></a>
-<span class="sourceLineNo">932</span><a name="line.932"></a>
-<span class="sourceLineNo">933</span>  protected void syncStream(final FSDataOutputStream stream) throws IOException {<a name="line.933"></a>
-<span class="sourceLineNo">934</span>    if (useHsync) {<a name="line.934"></a>
-<span class="sourceLineNo">935</span>      stream.hsync();<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    } else {<a name="line.936"></a>
-<span class="sourceLineNo">937</span>      stream.hflush();<a name="line.937"></a>
-<span class="sourceLineNo">938</span>    }<a name="line.938"></a>
-<span class="sourceLineNo">939</span>  }<a name="line.939"></a>
-<span class="sourceLineNo">940</span><a name="line.940"></a>
-<span class="sourceLineNo">941</span>  private boolean rollWriterWithRetries() {<a name="line.941"></a>
-<span class="sourceLineNo">942</span>    for (int i = 0; i &lt; rollRetries &amp;&amp; isRunning(); ++i) {<a name="line.942"></a>
-<span class="sourceLineNo">943</span>      if (i &gt; 0) Threads.sleepWithoutInterrupt(waitBeforeRoll * i);<a name="line.943"></a>
-<span class="sourceLineNo">944</span><a name="line.944"></a>
-<span class="sourceLineNo">945</span>      try {<a name="line.945"></a>
-<span class="sourceLineNo">946</span>        if (rollWriter()) {<a name="line.946"></a>
-<span class="sourceLineNo">947</span>          return true;<a name="line.947"></a>
-<span class="sourceLineNo">948</span>        }<a name="line.948"></a>
-<span class="sourceLineNo">949</span>      } catch (IOException e) {<a name="line.949"></a>
-<span class="sourceLineNo">950</span>        LOG.warn("Unable to roll the log, attempt=" + (i + 1), e);<a name="line.950"></a>
-<span class="sourceLineNo">951</span>      }<a name="line.951"></a>
-<span class="sourceLineNo">952</span>    }<a name="line.952"></a>
-<span class="sourceLineNo">953</span>    LOG.error(HBaseMarkers.FATAL, "Unable to roll the log");<a name="line.953"></a>
-<span class="sourceLineNo">954</span>    return false;<a name="line.954"></a>
-<span class="sourceLineNo">955</span>  }<a name="line.955"></a>
-<span class="sourceLineNo">956</span><a name="line.956"></a>
-<span class="sourceLineNo">957</span>  private boolean tryRollWriter() {<a name="line.957"></a>
-<span class="sourceLineNo">958</span>    try {<a name="line.958"></a>
-<span class="sourceLineNo">959</span>      return rollWriter();<a name="line.959"></a>
-<span class="sourceLineNo">960</span>    } catch (IOException e) {<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      LOG.warn("Unable to roll the log", e);<a name="line.961"></a>
-<span class="sourceLineNo">962</span>      return false;<a name="line.962"></a>
-<span class="sourceLineNo">963</span>    }<a name="line.963"></a>
-<span class="sourceLineNo">964</span>  }<a name="line.964"></a>
-<span class="sourceLineNo">965</span><a name="line.965"></a>
-<span class="sourceLineNo">966</span>  public long getMillisToNextPeriodicRoll() {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    if (lastRollTs.get() &gt; 0 &amp;&amp; periodicRollMsec &gt; 0) {<a name="line.967"></a>
-<span class="sourceLineNo">968</span>      return periodicRollMsec - getMillisFromLastRoll();<a name="line.968"></a>
+<span class="sourceLineNo">822</span><a name="line.822"></a>
+<span class="sourceLineNo">823</span>            waitCond.await(getMillisToNextPeriodicRoll(), TimeUnit.MILLISECONDS);<a name="line.823"></a>
+<span class="sourceLineNo">824</span>            if (slotIndex == 0) {<a name="line.824"></a>
+<span class="sourceLineNo">825</span>              // no data.. probably a stop() or a periodic roll<a name="line.825"></a>
+<span class="sourceLineNo">826</span>              continue;<a name="line.826"></a>
+<span class="sourceLineNo">827</span>            }<a name="line.827"></a>
+<span class="sourceLineNo">828</span>          }<a name="line.828"></a>
+<span class="sourceLineNo">829</span>          // Wait SYNC_WAIT_MSEC or the signal of "slots full" before flushing<a name="line.829"></a>
+<span class="sourceLineNo">830</span>          syncMaxSlot = runningProcCount;<a name="line.830"></a>
+<span class="sourceLineNo">831</span>          assert syncMaxSlot &gt; 0 : "unexpected syncMaxSlot=" + syncMaxSlot;<a name="line.831"></a>
+<span class="sourceLineNo">832</span>          final long syncWaitSt = System.currentTimeMillis();<a name="line.832"></a>
+<span class="sourceLineNo">833</span>          if (slotIndex != syncMaxSlot) {<a name="line.833"></a>
+<span class="sourceLineNo">834</span>            slotCond.await(syncWaitMsec, TimeUnit.MILLISECONDS);<a name="line.834"></a>
+<span class="sourceLineNo">835</span>          }<a name="line.835"></a>
+<span class="sourceLineNo">836</span><a name="line.836"></a>
+<span class="sourceLineNo">837</span>          final long currentTs = System.currentTimeMillis();<a name="line.837"></a>
+<span class="sourceLineNo">838</span>          final long syncWaitMs = currentTs - syncWaitSt;<a name="line.838"></a>
+<span class="sourceLineNo">839</span>          final float rollSec = getMillisFromLastRoll() / 1000.0f;<a name="line.839"></a>
+<span class="sourceLineNo">840</span>          final float syncedPerSec = totalSyncedToStore / rollSec;<a name="line.840"></a>
+<span class="sourceLineNo">841</span>          if (LOG.isTraceEnabled() &amp;&amp; (syncWaitMs &gt; 10 || slotIndex &lt; syncMaxSlot)) {<a name="line.841"></a>
+<span class="sourceLineNo">842</span>            LOG.trace(String.format("Sync wait %s, slotIndex=%s , totalSynced=%s (%s/sec)",<a name="line.842"></a>
+<span class="sourceLineNo">843</span>                      StringUtils.humanTimeDiff(syncWaitMs), slotIndex,<a name="line.843"></a>
+<span class="sourceLineNo">844</span>                      StringUtils.humanSize(totalSyncedToStore),<a name="line.844"></a>
+<span class="sourceLineNo">845</span>                      StringUtils.humanSize(syncedPerSec)));<a name="line.845"></a>
+<span class="sourceLineNo">846</span>          }<a name="line.846"></a>
+<span class="sourceLineNo">847</span><a name="line.847"></a>
+<span class="sourceLineNo">848</span>          // update webui circular buffers (TODO: get rid of allocations)<a name="line.848"></a>
+<span class="sourceLineNo">849</span>          final SyncMetrics syncMetrics = new SyncMetrics();<a name="line.849"></a>
+<span class="sourceLineNo">850</span>          syncMetrics.timestamp = currentTs;<a name="line.850"></a>
+<span class="sourceLineNo">851</span>          syncMetrics.syncWaitMs = syncWaitMs;<a name="line.851"></a>
+<span class="sourceLineNo">852</span>          syncMetrics.syncedEntries = slotIndex;<a name="line.852"></a>
+<span class="sourceLineNo">853</span>          syncMetrics.totalSyncedBytes = totalSyncedToStore;<a name="line.853"></a>
+<span class="sourceLineNo">854</span>          syncMetrics.syncedPerSec = syncedPerSec;<a name="line.854"></a>
+<span class="sourceLineNo">855</span>          syncMetricsQueue.add(syncMetrics);<a name="line.855"></a>
+<span class="sourceLineNo">856</span><a name="line.856"></a>
+<span class="sourceLineNo">857</span>          // sync<a name="line.857"></a>
+<span class="sourceLineNo">858</span>          inSync.set(true);<a name="line.858"></a>
+<span class="sourceLineNo">859</span>          long slotSize = syncSlots();<a name="line.859"></a>
+<span class="sourceLineNo">860</span>          logs.getLast().addToSize(slotSize);<a name="line.860"></a>
+<span class="sourceLineNo">861</span>          totalSyncedToStore = totalSynced.addAndGet(slotSize);<a name="line.861"></a>
+<span class="sourceLineNo">862</span>          slotIndex = 0;<a name="line.862"></a>
+<span class="sourceLineNo">863</span>          inSync.set(false);<a name="line.863"></a>
+<span class="sourceLineNo">864</span>          syncId.incrementAndGet();<a name="line.864"></a>
+<span class="sourceLineNo">865</span>        } catch (InterruptedException e) {<a name="line.865"></a>
+<span class="sourceLineNo">866</span>          Thread.currentThread().interrupt();<a name="line.866"></a>
+<span class="sourceLineNo">867</span>          syncException.compareAndSet(null, e);<a name="line.867"></a>
+<span class="sourceLineNo">868</span>          sendAbortProcessSignal();<a name="line.868"></a>
+<span class="sourceLineNo">869</span>          throw e;<a name="line.869"></a>
+<span class="sourceLineNo">870</span>        } catch (Throwable t) {<a name="line.870"></a>
+<span class="sourceLineNo">871</span>          syncException.compareAndSet(null, t);<a name="line.871"></a>
+<span class="sourceLineNo">872</span>          sendAbortProcessSignal();<a name="line.872"></a>
+<span class="sourceLineNo">873</span>          throw t;<a name="line.873"></a>
+<span class="sourceLineNo">874</span>        } finally {<a name="line.874"></a>
+<span class="sourceLineNo">875</span>          syncCond.signalAll();<a name="line.875"></a>
+<span class="sourceLineNo">876</span>        }<a name="line.876"></a>
+<span class="sourceLineNo">877</span>      }<a name="line.877"></a>
+<span class="sourceLineNo">878</span>    } finally {<a name="line.878"></a>
+<span class="sourceLineNo">879</span>      lock.unlock();<a name="line.879"></a>
+<span class="sourceLineNo">880</span>    }<a name="line.880"></a>
+<span class="sourceLineNo">881</span>  }<a name="line.881"></a>
+<span class="sourceLineNo">882</span><a name="line.882"></a>
+<span class="sourceLineNo">883</span>  public ArrayList&lt;SyncMetrics&gt; getSyncMetrics() {<a name="line.883"></a>
+<span class="sourceLineNo">884</span>    lock.lock();<a name="line.884"></a>
+<span class="sourceLineNo">885</span>    try {<a name="line.885"></a>
+<span class="sourceLineNo">886</span>      return new ArrayList&lt;&gt;(syncMetricsQueue);<a name="line.886"></a>
+<span class="sourceLineNo">887</span>    } finally {<a name="line.887"></a>
+<span class="sourceLineNo">888</span>      lock.unlock();<a name="line.888"></a>
+<span class="sourceLineNo">889</span>    }<a name="line.889"></a>
+<span class="sourceLineNo">890</span>  }<a name="line.890"></a>
+<span class="sourceLineNo">891</span><a name="line.891"></a>
+<span class="sourceLineNo">892</span>  private long syncSlots() throws Throwable {<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    int 

<TRUNCATED>

[05/11] hbase-site git commit: Published site at 405bf5e6383a09f435baadbac6c389e9f6c43ac6.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/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 ab175b6..72a3459 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
@@ -456,969 +456,979 @@
 <span class="sourceLineNo">448</span>    lock.lock();<a name="line.448"></a>
 <span class="sourceLineNo">449</span>    try {<a name="line.449"></a>
 <span class="sourceLineNo">450</span>      if (logs.isEmpty()) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        throw new RuntimeException("recoverLease() must be called before loading data");<a name="line.451"></a>
+<span class="sourceLineNo">451</span>        throw new IllegalStateException("recoverLease() must be called before loading data");<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>      // Nothing to do, If we have only the current log.<a name="line.454"></a>
 <span class="sourceLineNo">455</span>      if (logs.size() == 1) {<a name="line.455"></a>
 <span class="sourceLineNo">456</span>        LOG.debug("No state logs to replay.");<a name="line.456"></a>
 <span class="sourceLineNo">457</span>        loader.setMaxProcId(0);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        return;<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>      // Load the old logs<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      Iterator&lt;ProcedureWALFile&gt; it = logs.descendingIterator();<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      it.next(); // Skip the current log<a name="line.463"></a>
-<span class="sourceLineNo">464</span><a name="line.464"></a>
-<span class="sourceLineNo">465</span>      ProcedureWALFormat.load(it, storeTracker, new ProcedureWALFormat.Loader() {<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>        @Override<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        public void setMaxProcId(long maxProcId) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>          loader.setMaxProcId(maxProcId);<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>        @Override<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        public void load(ProcedureIterator procIter) throws IOException {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>          loader.load(procIter);<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>        @Override<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>          loader.handleCorrupted(procIter);<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>        @Override<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        public void markCorruptedWAL(ProcedureWALFile log, IOException e) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>          if (corruptedLogs == null) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>            corruptedLogs = new HashSet&lt;&gt;();<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          }<a name="line.486"></a>
-<span class="sourceLineNo">487</span>          corruptedLogs.add(log);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>          // TODO: sideline corrupted log<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>    } finally {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      try {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        // try to cleanup inactive wals and complete the operation<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        buildHoldingCleanupTracker();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        tryCleanupLogsOnLoad();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        loading.set(false);<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      } finally {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        lock.unlock();<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><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  private void tryCleanupLogsOnLoad() {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    // nothing to cleanup.<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    if (logs.size() &lt;= 1) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      return;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    }<a name="line.507"></a>
+<span class="sourceLineNo">458</span>        loading.set(false);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        return;<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>      // Load the old logs<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      Iterator&lt;ProcedureWALFile&gt; it = logs.descendingIterator();<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      it.next(); // Skip the current log<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>      ProcedureWALFormat.load(it, storeTracker, new ProcedureWALFormat.Loader() {<a name="line.466"></a>
+<span class="sourceLineNo">467</span><a name="line.467"></a>
+<span class="sourceLineNo">468</span>        @Override<a name="line.468"></a>
+<span class="sourceLineNo">469</span>        public void setMaxProcId(long maxProcId) {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>          loader.setMaxProcId(maxProcId);<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>        @Override<a name="line.473"></a>
+<span class="sourceLineNo">474</span>        public void load(ProcedureIterator procIter) throws IOException {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>          loader.load(procIter);<a name="line.475"></a>
+<span class="sourceLineNo">476</span>        }<a name="line.476"></a>
+<span class="sourceLineNo">477</span><a name="line.477"></a>
+<span class="sourceLineNo">478</span>        @Override<a name="line.478"></a>
+<span class="sourceLineNo">479</span>        public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>          loader.handleCorrupted(procIter);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>        }<a name="line.481"></a>
+<span class="sourceLineNo">482</span><a name="line.482"></a>
+<span class="sourceLineNo">483</span>        @Override<a name="line.483"></a>
+<span class="sourceLineNo">484</span>        public void markCorruptedWAL(ProcedureWALFile log, IOException e) {<a name="line.484"></a>
+<span class="sourceLineNo">485</span>          if (corruptedLogs == null) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>            corruptedLogs = new HashSet&lt;&gt;();<a name="line.486"></a>
+<span class="sourceLineNo">487</span>          }<a name="line.487"></a>
+<span class="sourceLineNo">488</span>          corruptedLogs.add(log);<a name="line.488"></a>
+<span class="sourceLineNo">489</span>          // TODO: sideline corrupted log<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>      // if we fail when loading, we should prevent persisting the storeTracker later in the stop<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      // method. As it may happen that, we have finished constructing the modified and deleted bits,<a name="line.493"></a>
+<span class="sourceLineNo">494</span>      // but before we call resetModified, we fail, then if we persist the storeTracker then when<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      // restarting, we will consider that all procedures have been included in this file and delete<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      // all the previous files. Obviously this not correct. So here we will only set loading to<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      // false when we successfully loaded all the procedures, and when closing we will skip<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      // persisting the store tracker. And also, this will prevent the sync thread to do<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      // periodicRoll, where we may also clean old logs.<a name="line.499"></a>
+<span class="sourceLineNo">500</span>      loading.set(false);<a name="line.500"></a>
+<span class="sourceLineNo">501</span>      // try to cleanup inactive wals and complete the operation<a name="line.501"></a>
+<span class="sourceLineNo">502</span>      buildHoldingCleanupTracker();<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      tryCleanupLogsOnLoad();<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    } finally {<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      lock.unlock();<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>    // the config says to not cleanup wals on load.<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    if (!conf.getBoolean(EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY,<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY)) {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      LOG.debug("WALs cleanup on load is not enabled: " + getActiveLogs());<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      return;<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    }<a name="line.514"></a>
-<span class="sourceLineNo">515</span><a name="line.515"></a>
-<span class="sourceLineNo">516</span>    try {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      periodicRoll();<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    } catch (IOException e) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      LOG.warn("Unable to cleanup logs on load: " + e.getMessage(), e);<a name="line.519"></a>
+<span class="sourceLineNo">509</span>  private void tryCleanupLogsOnLoad() {<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    // nothing to cleanup.<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    if (logs.size() &lt;= 1) {<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      return;<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    }<a name="line.513"></a>
+<span class="sourceLineNo">514</span><a name="line.514"></a>
+<span class="sourceLineNo">515</span>    // the config says to not cleanup wals on load.<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    if (!conf.getBoolean(EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY,<a name="line.516"></a>
+<span class="sourceLineNo">517</span>      DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY)) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      LOG.debug("WALs cleanup on load is not enabled: " + getActiveLogs());<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      return;<a name="line.519"></a>
 <span class="sourceLineNo">520</span>    }<a name="line.520"></a>
-<span class="sourceLineNo">521</span>  }<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>  @Override<a name="line.523"></a>
-<span class="sourceLineNo">524</span>  public void insert(Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    if (LOG.isTraceEnabled()) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      LOG.trace("Insert " + proc + ", subproc=" + Arrays.toString(subprocs));<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    }<a name="line.527"></a>
+<span class="sourceLineNo">521</span><a name="line.521"></a>
+<span class="sourceLineNo">522</span>    try {<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      periodicRoll();<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    } catch (IOException e) {<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      LOG.warn("Unable to cleanup logs on load: " + e.getMessage(), e);<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
+<span class="sourceLineNo">527</span>  }<a name="line.527"></a>
 <span class="sourceLineNo">528</span><a name="line.528"></a>
-<span class="sourceLineNo">529</span>    ByteSlot slot = acquireSlot();<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    try {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      // Serialize the insert<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      long[] subProcIds = null;<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      if (subprocs != null) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        ProcedureWALFormat.writeInsert(slot, proc, subprocs);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        subProcIds = new long[subprocs.length];<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>          subProcIds[i] = subprocs[i].getProcId();<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      } else {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>        assert !proc.hasParent();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        ProcedureWALFormat.writeInsert(slot, proc);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>      // Push the transaction data and wait until it is persisted<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      pushData(PushType.INSERT, slot, proc.getProcId(), subProcIds);<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    } catch (IOException e) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      // We are not able to serialize the procedure.<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      // this is a code error, and we are not able to go on.<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: proc=" +<a name="line.549"></a>
-<span class="sourceLineNo">550</span>          proc + ", subprocs=" + Arrays.toString(subprocs), e);<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      throw new RuntimeException(e);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    } finally {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      releaseSlot(slot);<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>  @Override<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  public void insert(Procedure&lt;?&gt;[] procs) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    if (LOG.isTraceEnabled()) {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      LOG.trace("Insert " + Arrays.toString(procs));<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">529</span>  @Override<a name="line.529"></a>
+<span class="sourceLineNo">530</span>  public void insert(Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs) {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    if (LOG.isTraceEnabled()) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      LOG.trace("Insert " + proc + ", subproc=" + Arrays.toString(subprocs));<a name="line.532"></a>
+<span class="sourceLineNo">533</span>    }<a name="line.533"></a>
+<span class="sourceLineNo">534</span><a name="line.534"></a>
+<span class="sourceLineNo">535</span>    ByteSlot slot = acquireSlot();<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    try {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      // Serialize the insert<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      long[] subProcIds = null;<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      if (subprocs != null) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        ProcedureWALFormat.writeInsert(slot, proc, subprocs);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>        subProcIds = new long[subprocs.length];<a name="line.541"></a>
+<span class="sourceLineNo">542</span>        for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>          subProcIds[i] = subprocs[i].getProcId();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>        }<a name="line.544"></a>
+<span class="sourceLineNo">545</span>      } else {<a name="line.545"></a>
+<span class="sourceLineNo">546</span>        assert !proc.hasParent();<a name="line.546"></a>
+<span class="sourceLineNo">547</span>        ProcedureWALFormat.writeInsert(slot, proc);<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>      // Push the transaction data and wait until it is persisted<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      pushData(PushType.INSERT, slot, proc.getProcId(), subProcIds);<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    } catch (IOException e) {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      // We are not able to serialize the procedure.<a name="line.553"></a>
+<span class="sourceLineNo">554</span>      // this is a code error, and we are not able to go on.<a name="line.554"></a>
+<span class="sourceLineNo">555</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: proc=" +<a name="line.555"></a>
+<span class="sourceLineNo">556</span>          proc + ", subprocs=" + Arrays.toString(subprocs), e);<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      throw new RuntimeException(e);<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    } finally {<a name="line.558"></a>
+<span class="sourceLineNo">559</span>      releaseSlot(slot);<a name="line.559"></a>
+<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  }<a name="line.561"></a>
 <span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    ByteSlot slot = acquireSlot();<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    try {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      // Serialize the insert<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      long[] procIds = new long[procs.length];<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.567"></a>
-<span class="sourceLineNo">568</span>        assert !procs[i].hasParent();<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        procIds[i] = procs[i].getProcId();<a name="line.569"></a>
-<span class="sourceLineNo">570</span>        ProcedureWALFormat.writeInsert(slot, procs[i]);<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>      // Push the transaction data and wait until it is persisted<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      pushData(PushType.INSERT, slot, Procedure.NO_PROC_ID, procIds);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    } catch (IOException e) {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      // We are not able to serialize the procedure.<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      // this is a code error, and we are not able to go on.<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: " +<a name="line.578"></a>
-<span class="sourceLineNo">579</span>          Arrays.toString(procs), e);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      throw new RuntimeException(e);<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    } finally {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      releaseSlot(slot);<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>  @Override<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  public void update(Procedure&lt;?&gt; proc) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    if (LOG.isTraceEnabled()) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      LOG.trace("Update " + proc);<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    }<a name="line.590"></a>
+<span class="sourceLineNo">563</span>  @Override<a name="line.563"></a>
+<span class="sourceLineNo">564</span>  public void insert(Procedure&lt;?&gt;[] procs) {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>    if (LOG.isTraceEnabled()) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      LOG.trace("Insert " + Arrays.toString(procs));<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>    ByteSlot slot = acquireSlot();<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    try {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      // Serialize the insert<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      long[] procIds = new long[procs.length];<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.573"></a>
+<span class="sourceLineNo">574</span>        assert !procs[i].hasParent();<a name="line.574"></a>
+<span class="sourceLineNo">575</span>        procIds[i] = procs[i].getProcId();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>        ProcedureWALFormat.writeInsert(slot, procs[i]);<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>      // Push the transaction data and wait until it is persisted<a name="line.579"></a>
+<span class="sourceLineNo">580</span>      pushData(PushType.INSERT, slot, Procedure.NO_PROC_ID, procIds);<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    } catch (IOException e) {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      // We are not able to serialize the procedure.<a name="line.582"></a>
+<span class="sourceLineNo">583</span>      // this is a code error, and we are not able to go on.<a name="line.583"></a>
+<span class="sourceLineNo">584</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: " +<a name="line.584"></a>
+<span class="sourceLineNo">585</span>          Arrays.toString(procs), e);<a name="line.585"></a>
+<span class="sourceLineNo">586</span>      throw new RuntimeException(e);<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    } finally {<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      releaseSlot(slot);<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    }<a name="line.589"></a>
+<span class="sourceLineNo">590</span>  }<a name="line.590"></a>
 <span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span>    ByteSlot slot = acquireSlot();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    try {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>      // Serialize the update<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      ProcedureWALFormat.writeUpdate(slot, proc);<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span>      // Push the transaction data and wait until it is persisted<a name="line.597"></a>
-<span class="sourceLineNo">598</span>      pushData(PushType.UPDATE, slot, proc.getProcId(), null);<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    } catch (IOException e) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      // We are not able to serialize the procedure.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      // this is a code error, and we are not able to go on.<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      throw new RuntimeException(e);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    } finally {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      releaseSlot(slot);<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    }<a name="line.606"></a>
-<span class="sourceLineNo">607</span>  }<a name="line.607"></a>
-<span class="sourceLineNo">608</span><a name="line.608"></a>
-<span class="sourceLineNo">609</span>  @Override<a name="line.609"></a>
-<span class="sourceLineNo">610</span>  public void delete(long procId) {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    LOG.trace("Delete {}", procId);<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    ByteSlot slot = acquireSlot();<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    try {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      // Serialize the delete<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      ProcedureWALFormat.writeDelete(slot, procId);<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>      // Push the transaction data and wait until it is persisted<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      pushData(PushType.DELETE, slot, procId, null);<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    } catch (IOException e) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      // We are not able to serialize the procedure.<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      // this is a code error, and we are not able to go on.<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + procId, e);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      throw new RuntimeException(e);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    } finally {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      releaseSlot(slot);<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    }<a name="line.626"></a>
-<span class="sourceLineNo">627</span>  }<a name="line.627"></a>
-<span class="sourceLineNo">628</span><a name="line.628"></a>
-<span class="sourceLineNo">629</span>  @Override<a name="line.629"></a>
-<span class="sourceLineNo">630</span>  public void delete(Procedure&lt;?&gt; proc, long[] subProcIds) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    assert proc != null : "expected a non-null procedure";<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    assert subProcIds != null &amp;&amp; subProcIds.length &gt; 0 : "expected subProcIds";<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    if (LOG.isTraceEnabled()) {<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      LOG.trace("Update " + proc + " and Delete " + Arrays.toString(subProcIds));<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>    ByteSlot slot = acquireSlot();<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    try {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      // Serialize the delete<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      ProcedureWALFormat.writeDelete(slot, proc, subProcIds);<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>      // Push the transaction data and wait until it is persisted<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      pushData(PushType.DELETE, slot, proc.getProcId(), subProcIds);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    } catch (IOException e) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      // We are not able to serialize the procedure.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      // this is a code error, and we are not able to go on.<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      throw new RuntimeException(e);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    } finally {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      releaseSlot(slot);<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    }<a name="line.651"></a>
-<span class="sourceLineNo">652</span>  }<a name="line.652"></a>
-<span class="sourceLineNo">653</span><a name="line.653"></a>
-<span class="sourceLineNo">654</span>  @Override<a name="line.654"></a>
-<span class="sourceLineNo">655</span>  public void delete(final long[] procIds, final int offset, final int count) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    if (count == 0) return;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    if (offset == 0 &amp;&amp; count == procIds.length) {<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      delete(procIds);<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    } else if (count == 1) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      delete(procIds[offset]);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    } else {<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      delete(Arrays.copyOfRange(procIds, offset, offset + count));<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><a name="line.665"></a>
-<span class="sourceLineNo">666</span>  private void delete(long[] procIds) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    if (LOG.isTraceEnabled()) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      LOG.trace("Delete " + Arrays.toString(procIds));<a name="line.668"></a>
+<span class="sourceLineNo">592</span>  @Override<a name="line.592"></a>
+<span class="sourceLineNo">593</span>  public void update(Procedure&lt;?&gt; proc) {<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    if (LOG.isTraceEnabled()) {<a name="line.594"></a>
+<span class="sourceLineNo">595</span>      LOG.trace("Update " + proc);<a name="line.595"></a>
+<span class="sourceLineNo">596</span>    }<a name="line.596"></a>
+<span class="sourceLineNo">597</span><a name="line.597"></a>
+<span class="sourceLineNo">598</span>    ByteSlot slot = acquireSlot();<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    try {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>      // Serialize the update<a name="line.600"></a>
+<span class="sourceLineNo">601</span>      ProcedureWALFormat.writeUpdate(slot, proc);<a name="line.601"></a>
+<span class="sourceLineNo">602</span><a name="line.602"></a>
+<span class="sourceLineNo">603</span>      // Push the transaction data and wait until it is persisted<a name="line.603"></a>
+<span class="sourceLineNo">604</span>      pushData(PushType.UPDATE, slot, proc.getProcId(), null);<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    } catch (IOException e) {<a name="line.605"></a>
+<span class="sourceLineNo">606</span>      // We are not able to serialize the procedure.<a name="line.606"></a>
+<span class="sourceLineNo">607</span>      // this is a code error, and we are not able to go on.<a name="line.607"></a>
+<span class="sourceLineNo">608</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      throw new RuntimeException(e);<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    } finally {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>      releaseSlot(slot);<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    }<a name="line.612"></a>
+<span class="sourceLineNo">613</span>  }<a name="line.613"></a>
+<span class="sourceLineNo">614</span><a name="line.614"></a>
+<span class="sourceLineNo">615</span>  @Override<a name="line.615"></a>
+<span class="sourceLineNo">616</span>  public void delete(long procId) {<a name="line.616"></a>
+<span class="sourceLineNo">617</span>    LOG.trace("Delete {}", procId);<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    ByteSlot slot = acquireSlot();<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    try {<a name="line.619"></a>
+<span class="sourceLineNo">620</span>      // Serialize the delete<a name="line.620"></a>
+<span class="sourceLineNo">621</span>      ProcedureWALFormat.writeDelete(slot, procId);<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>      // Push the transaction data and wait until it is persisted<a name="line.623"></a>
+<span class="sourceLineNo">624</span>      pushData(PushType.DELETE, slot, procId, null);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    } catch (IOException e) {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>      // We are not able to serialize the procedure.<a name="line.626"></a>
+<span class="sourceLineNo">627</span>      // this is a code error, and we are not able to go on.<a name="line.627"></a>
+<span class="sourceLineNo">628</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + procId, e);<a name="line.628"></a>
+<span class="sourceLineNo">629</span>      throw new RuntimeException(e);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>    } finally {<a name="line.630"></a>
+<span class="sourceLineNo">631</span>      releaseSlot(slot);<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    }<a name="line.632"></a>
+<span class="sourceLineNo">633</span>  }<a name="line.633"></a>
+<span class="sourceLineNo">634</span><a name="line.634"></a>
+<span class="sourceLineNo">635</span>  @Override<a name="line.635"></a>
+<span class="sourceLineNo">636</span>  public void delete(Procedure&lt;?&gt; proc, long[] subProcIds) {<a name="line.636"></a>
+<span class="sourceLineNo">637</span>    assert proc != null : "expected a non-null procedure";<a name="line.637"></a>
+<span class="sourceLineNo">638</span>    assert subProcIds != null &amp;&amp; subProcIds.length &gt; 0 : "expected subProcIds";<a name="line.638"></a>
+<span class="sourceLineNo">639</span>    if (LOG.isTraceEnabled()) {<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      LOG.trace("Update " + proc + " and Delete " + Arrays.toString(subProcIds));<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>    ByteSlot slot = acquireSlot();<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    try {<a name="line.644"></a>
+<span class="sourceLineNo">645</span>      // Serialize the delete<a name="line.645"></a>
+<span class="sourceLineNo">646</span>      ProcedureWALFormat.writeDelete(slot, proc, subProcIds);<a name="line.646"></a>
+<span class="sourceLineNo">647</span><a name="line.647"></a>
+<span class="sourceLineNo">648</span>      // Push the transaction data and wait until it is persisted<a name="line.648"></a>
+<span class="sourceLineNo">649</span>      pushData(PushType.DELETE, slot, proc.getProcId(), subProcIds);<a name="line.649"></a>
+<span class="sourceLineNo">650</span>    } catch (IOException e) {<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      // We are not able to serialize the procedure.<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      // this is a code error, and we are not able to go on.<a name="line.652"></a>
+<span class="sourceLineNo">653</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      throw new RuntimeException(e);<a name="line.654"></a>
+<span class="sourceLineNo">655</span>    } finally {<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      releaseSlot(slot);<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><a name="line.659"></a>
+<span class="sourceLineNo">660</span>  @Override<a name="line.660"></a>
+<span class="sourceLineNo">661</span>  public void delete(final long[] procIds, final int offset, final int count) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>    if (count == 0) return;<a name="line.662"></a>
+<span class="sourceLineNo">663</span>    if (offset == 0 &amp;&amp; count == procIds.length) {<a name="line.663"></a>
+<span class="sourceLineNo">664</span>      delete(procIds);<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    } else if (count == 1) {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>      delete(procIds[offset]);<a name="line.666"></a>
+<span class="sourceLineNo">667</span>    } else {<a name="line.667"></a>
+<span class="sourceLineNo">668</span>      delete(Arrays.copyOfRange(procIds, offset, offset + count));<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>    final ByteSlot slot = acquireSlot();<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    try {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      // Serialize the delete<a name="line.673"></a>
-<span class="sourceLineNo">674</span>      for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>        ProcedureWALFormat.writeDelete(slot, procIds[i]);<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      }<a name="line.676"></a>
-<span class="sourceLineNo">677</span><a name="line.677"></a>
-<span class="sourceLineNo">678</span>      // Push the transaction data and wait until it is persisted<a name="line.678"></a>
-<span class="sourceLineNo">679</span>      pushData(PushType.DELETE, slot, Procedure.NO_PROC_ID, procIds);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    } catch (IOException e) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      // We are not able to serialize the procedure.<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      // this is a code error, and we are not able to go on.<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      LOG.error("Unable to serialize the procedures: " + Arrays.toString(procIds), e);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>      throw new RuntimeException(e);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    } finally {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      releaseSlot(slot);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>    }<a name="line.687"></a>
-<span class="sourceLineNo">688</span>  }<a name="line.688"></a>
-<span class="sourceLineNo">689</span><a name="line.689"></a>
-<span class="sourceLineNo">690</span>  private ByteSlot acquireSlot() {<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    ByteSlot slot = slotsCache.poll();<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    return slot != null ? slot : new ByteSlot();<a name="line.692"></a>
-<span class="sourceLineNo">693</span>  }<a name="line.693"></a>
-<span class="sourceLineNo">694</span><a name="line.694"></a>
-<span class="sourceLineNo">695</span>  private void releaseSlot(final ByteSlot slot) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    slot.reset();<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    slotsCache.offer(slot);<a name="line.697"></a>
-<span class="sourceLineNo">698</span>  }<a name="line.698"></a>
-<span class="sourceLineNo">699</span><a name="line.699"></a>
-<span class="sourceLineNo">700</span>  private enum PushType { INSERT, UPDATE, DELETE }<a name="line.700"></a>
-<span class="sourceLineNo">701</span><a name="line.701"></a>
-<span class="sourceLineNo">702</span>  private long pushData(final PushType type, final ByteSlot slot,<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      final long procId, final long[] subProcIds) {<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    if (!isRunning()) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      throw new RuntimeException("the store must be running before inserting data");<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    }<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    if (logs.isEmpty()) {<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      throw new RuntimeException("recoverLease() must be called before inserting data");<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    }<a name="line.709"></a>
-<span class="sourceLineNo">710</span><a name="line.710"></a>
-<span class="sourceLineNo">711</span>    long logId = -1;<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    lock.lock();<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    try {<a name="line.713"></a>
-<span class="sourceLineNo">714</span>      // Wait for the sync to be completed<a name="line.714"></a>
-<span class="sourceLineNo">715</span>      while (true) {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        if (!isRunning()) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>          throw new RuntimeException("store no longer running");<a name="line.717"></a>
-<span class="sourceLineNo">718</span>        } else if (isSyncAborted()) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>          throw new RuntimeException("sync aborted", syncException.get());<a name="line.719"></a>
-<span class="sourceLineNo">720</span>        } else if (inSync.get()) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>          syncCond.await();<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        } else if (slotIndex &gt;= syncMaxSlot) {<a name="line.722"></a>
-<span class="sourceLineNo">723</span>          slotCond.signal();<a name="line.723"></a>
-<span class="sourceLineNo">724</span>          syncCond.await();<a name="line.724"></a>
-<span class="sourceLineNo">725</span>        } else {<a name="line.725"></a>
-<span class="sourceLineNo">726</span>          break;<a name="line.726"></a>
-<span class="sourceLineNo">727</span>        }<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      }<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span>      final long pushSyncId = syncId.get();<a name="line.730"></a>
-<span class="sourceLineNo">731</span>      updateStoreTracker(type, procId, subProcIds);<a name="line.731"></a>
-<span class="sourceLineNo">732</span>      slots[slotIndex++] = slot;<a name="line.732"></a>
-<span class="sourceLineNo">733</span>      logId = flushLogId;<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span>      // Notify that there is new data<a name="line.735"></a>
-<span class="sourceLineNo">736</span>      if (slotIndex == 1) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>        waitCond.signal();<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>      // Notify that the slots are full<a name="line.740"></a>
-<span class="sourceLineNo">741</span>      if (slotIndex == syncMaxSlot) {<a name="line.741"></a>
-<span class="sourceLineNo">742</span>        waitCond.signal();<a name="line.742"></a>
-<span class="sourceLineNo">743</span>        slotCond.signal();<a name="line.743"></a>
+<span class="sourceLineNo">670</span>  }<a name="line.670"></a>
+<span class="sourceLineNo">671</span><a name="line.671"></a>
+<span class="sourceLineNo">672</span>  private void delete(long[] procIds) {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>    if (LOG.isTraceEnabled()) {<a name="line.673"></a>
+<span class="sourceLineNo">674</span>      LOG.trace("Delete " + Arrays.toString(procIds));<a name="line.674"></a>
+<span class="sourceLineNo">675</span>    }<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span>    final ByteSlot slot = acquireSlot();<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    try {<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      // Serialize the delete<a name="line.679"></a>
+<span class="sourceLineNo">680</span>      for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span>        ProcedureWALFormat.writeDelete(slot, procIds[i]);<a name="line.681"></a>
+<span class="sourceLineNo">682</span>      }<a name="line.682"></a>
+<span class="sourceLineNo">683</span><a name="line.683"></a>
+<span class="sourceLineNo">684</span>      // Push the transaction data and wait until it is persisted<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      pushData(PushType.DELETE, slot, Procedure.NO_PROC_ID, procIds);<a name="line.685"></a>
+<span class="sourceLineNo">686</span>    } catch (IOException e) {<a name="line.686"></a>
+<span class="sourceLineNo">687</span>      // We are not able to serialize the procedure.<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      // this is a code error, and we are not able to go on.<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      LOG.error("Unable to serialize the procedures: " + Arrays.toString(procIds), e);<a name="line.689"></a>
+<span class="sourceLineNo">690</span>      throw new RuntimeException(e);<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    } finally {<a name="line.691"></a>
+<span class="sourceLineNo">692</span>      releaseSlot(slot);<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    }<a name="line.693"></a>
+<span class="sourceLineNo">694</span>  }<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span>  private ByteSlot acquireSlot() {<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    ByteSlot slot = slotsCache.poll();<a name="line.697"></a>
+<span class="sourceLineNo">698</span>    return slot != null ? slot : new ByteSlot();<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>  private void releaseSlot(final ByteSlot slot) {<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    slot.reset();<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    slotsCache.offer(slot);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>  }<a name="line.704"></a>
+<span class="sourceLineNo">705</span><a name="line.705"></a>
+<span class="sourceLineNo">706</span>  private enum PushType { INSERT, UPDATE, DELETE }<a name="line.706"></a>
+<span class="sourceLineNo">707</span><a name="line.707"></a>
+<span class="sourceLineNo">708</span>  private long pushData(final PushType type, final ByteSlot slot,<a name="line.708"></a>
+<span class="sourceLineNo">709</span>      final long procId, final long[] subProcIds) {<a name="line.709"></a>
+<span class="sourceLineNo">710</span>    if (!isRunning()) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span>      throw new RuntimeException("the store must be running before inserting data");<a name="line.711"></a>
+<span class="sourceLineNo">712</span>    }<a name="line.712"></a>
+<span class="sourceLineNo">713</span>    if (logs.isEmpty()) {<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      throw new RuntimeException("recoverLease() must be called before inserting data");<a name="line.714"></a>
+<span class="sourceLineNo">715</span>    }<a name="line.715"></a>
+<span class="sourceLineNo">716</span><a name="line.716"></a>
+<span class="sourceLineNo">717</span>    long logId = -1;<a name="line.717"></a>
+<span class="sourceLineNo">718</span>    lock.lock();<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    try {<a name="line.719"></a>
+<span class="sourceLineNo">720</span>      // Wait for the sync to be completed<a name="line.720"></a>
+<span class="sourceLineNo">721</span>      while (true) {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>        if (!isRunning()) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>          throw new RuntimeException("store no longer running");<a name="line.723"></a>
+<span class="sourceLineNo">724</span>        } else if (isSyncAborted()) {<a name="line.724"></a>
+<span class="sourceLineNo">725</span>          throw new RuntimeException("sync aborted", syncException.get());<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        } else if (inSync.get()) {<a name="line.726"></a>
+<span class="sourceLineNo">727</span>          syncCond.await();<a name="line.727"></a>
+<span class="sourceLineNo">728</span>        } else if (slotIndex &gt;= syncMaxSlot) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span>          slotCond.signal();<a name="line.729"></a>
+<span class="sourceLineNo">730</span>          syncCond.await();<a name="line.730"></a>
+<span class="sourceLineNo">731</span>        } else {<a name="line.731"></a>
+<span class="sourceLineNo">732</span>          break;<a name="line.732"></a>
+<span class="sourceLineNo">733</span>        }<a name="line.733"></a>
+<span class="sourceLineNo">734</span>      }<a name="line.734"></a>
+<span class="sourceLineNo">735</span><a name="line.735"></a>
+<span class="sourceLineNo">736</span>      final long pushSyncId = syncId.get();<a name="line.736"></a>
+<span class="sourceLineNo">737</span>      updateStoreTracker(type, procId, subProcIds);<a name="line.737"></a>
+<span class="sourceLineNo">738</span>      slots[slotIndex++] = slot;<a name="line.738"></a>
+<span class="sourceLineNo">739</span>      logId = flushLogId;<a name="line.739"></a>
+<span class="sourceLineNo">740</span><a name="line.740"></a>
+<span class="sourceLineNo">741</span>      // Notify that there is new data<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      if (slotIndex == 1) {<a name="line.742"></a>
+<span class="sourceLineNo">743</span>        waitCond.signal();<a name="line.743"></a>
 <span class="sourceLineNo">744</span>      }<a name="line.744"></a>
 <span class="sourceLineNo">745</span><a name="line.745"></a>
-<span class="sourceLineNo">746</span>      while (pushSyncId == syncId.get() &amp;&amp; isRunning()) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        syncCond.await();<a name="line.747"></a>
-<span class="sourceLineNo">748</span>      }<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    } catch (InterruptedException e) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      Thread.currentThread().interrupt();<a name="line.750"></a>
-<span class="sourceLineNo">751</span>      sendAbortProcessSignal();<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      throw new RuntimeException(e);<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    } finally {<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      lock.unlock();<a name="line.754"></a>
-<span class="sourceLineNo">755</span>      if (isSyncAborted()) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span>        throw new RuntimeException("sync aborted", syncException.get());<a name="line.756"></a>
-<span class="sourceLineNo">757</span>      }<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    }<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    return logId;<a name="line.759"></a>
-<span class="sourceLineNo">760</span>  }<a name="line.760"></a>
-<span class="sourceLineNo">761</span><a name="line.761"></a>
-<span class="sourceLineNo">762</span>  private void updateStoreTracker(final PushType type,<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      final long procId, final long[] subProcIds) {<a name="line.763"></a>
-<span class="sourceLineNo">764</span>    switch (type) {<a name="line.764"></a>
-<span class="sourceLineNo">765</span>      case INSERT:<a name="line.765"></a>
-<span class="sourceLineNo">766</span>        if (subProcIds == null) {<a name="line.766"></a>
-<span class="sourceLineNo">767</span>          storeTracker.insert(procId);<a name="line.767"></a>
-<span class="sourceLineNo">768</span>        } else if (procId == Procedure.NO_PROC_ID) {<a name="line.768"></a>
-<span class="sourceLineNo">769</span>          storeTracker.insert(subProcIds);<a name="line.769"></a>
-<span class="sourceLineNo">770</span>        } else {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>          storeTracker.insert(procId, subProcIds);<a name="line.771"></a>
-<span class="sourceLineNo">772</span>          holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.772"></a>
-<span class="sourceLineNo">773</span>        }<a name="line.773"></a>
-<span class="sourceLineNo">774</span>        break;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>      case UPDATE:<a name="line.775"></a>
-<span class="sourceLineNo">776</span>        storeTracker.update(procId);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>        holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.777"></a>
-<span class="sourceLineNo">778</span>        break;<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      case DELETE:<a name="line.779"></a>
-<span class="sourceLineNo">780</span>        if (subProcIds != null &amp;&amp; subProcIds.length &gt; 0) {<a name="line.780"></a>
-<span class="sourceLineNo">781</span>          storeTracker.delete(subProcIds);<a name="line.781"></a>
-<span class="sourceLineNo">782</span>          holdingCleanupTracker.setDeletedIfModified(subProcIds);<a name="line.782"></a>
-<span class="sourceLineNo">783</span>        } else {<a name="line.783"></a>
-<span class="sourceLineNo">784</span>          storeTracker.delete(procId);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>          holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.785"></a>
-<span class="sourceLineNo">786</span>        }<a name="line.786"></a>
-<span class="sourceLineNo">787</span>        break;<a name="line.787"></a>
-<span class="sourceLineNo">788</span>      default:<a name="line.788"></a>
-<span class="sourceLineNo">789</span>        throw new RuntimeException("invalid push type " + type);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    }<a name="line.790"></a>
-<span class="sourceLineNo">791</span>  }<a name="line.791"></a>
-<span class="sourceLineNo">792</span><a name="line.792"></a>
-<span class="sourceLineNo">793</span>  private boolean isSyncAborted() {<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    return syncException.get() != null;<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 void syncLoop() throws Throwable {<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    long totalSyncedToStore = 0;<a name="line.798"></a>
-<span class="sourceLineNo">799</span>    inSync.set(false);<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    lock.lock();<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    try {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>      while (isRunning()) {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>        try {<a name="line.803"></a>
-<span class="sourceLineNo">804</span>          // Wait until new data is available<a name="line.804"></a>
-<span class="sourceLineNo">805</span>          if (slotIndex == 0) {<a name="line.805"></a>
-<span class="sourceLineNo">806</span>            if (!loading.get()) {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>              periodicRoll();<a name="line.807"></a>
-<span class="sourceLineNo">808</span>            }<a name="line.808"></a>
-<span class="sourceLineNo">809</span><a name="line.809"></a>
-<span class="sourceLineNo">810</span>            if (LOG.isTraceEnabled()) {<a name="line.810"></a>
-<span class="sourceLineNo">811</span>              float rollTsSec = getMillisFromLastRoll() / 1000.0f;<a name="line.811"></a>
-<span class="sourceLineNo">812</span>              LOG.trace(String.format("Waiting for data. flushed=%s (%s/sec)",<a name="line.812"></a>
-<span class="sourceLineNo">813</span>                        StringUtils.humanSize(totalSynced.get()),<a name="line.813"></a>
-<span class="sourceLineNo">814</span>                        StringUtils.humanSize(totalSynced.get() / rollTsSec)));<a name="line.814"></a>
-<span class="sourceLineNo">815</span>            }<a name="line.815"></a>
-<span class="sourceLineNo">816</span><a name="line.816"></a>
-<span class="sourceLineNo">817</span>            waitCond.await(getMillisToNextPeriodicRoll(), TimeUnit.MILLISECONDS);<a name="line.817"></a>
-<span class="sourceLineNo">818</span>            if (slotIndex == 0) {<a name="line.818"></a>
-<span class="sourceLineNo">819</span>              // no data.. probably a stop() or a periodic roll<a name="line.819"></a>
-<span class="sourceLineNo">820</span>              continue;<a name="line.820"></a>
+<span class="sourceLineNo">746</span>      // Notify that the slots are full<a name="line.746"></a>
+<span class="sourceLineNo">747</span>      if (slotIndex == syncMaxSlot) {<a name="line.747"></a>
+<span class="sourceLineNo">748</span>        waitCond.signal();<a name="line.748"></a>
+<span class="sourceLineNo">749</span>        slotCond.signal();<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>      while (pushSyncId == syncId.get() &amp;&amp; isRunning()) {<a name="line.752"></a>
+<span class="sourceLineNo">753</span>        syncCond.await();<a name="line.753"></a>
+<span class="sourceLineNo">754</span>      }<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    } catch (InterruptedException e) {<a name="line.755"></a>
+<span class="sourceLineNo">756</span>      Thread.currentThread().interrupt();<a name="line.756"></a>
+<span class="sourceLineNo">757</span>      sendAbortProcessSignal();<a name="line.757"></a>
+<span class="sourceLineNo">758</span>      throw new RuntimeException(e);<a name="line.758"></a>
+<span class="sourceLineNo">759</span>    } finally {<a name="line.759"></a>
+<span class="sourceLineNo">760</span>      lock.unlock();<a name="line.760"></a>
+<span class="sourceLineNo">761</span>      if (isSyncAborted()) {<a name="line.761"></a>
+<span class="sourceLineNo">762</span>        throw new RuntimeException("sync aborted", syncException.get());<a name="line.762"></a>
+<span class="sourceLineNo">763</span>      }<a name="line.763"></a>
+<span class="sourceLineNo">764</span>    }<a name="line.764"></a>
+<span class="sourceLineNo">765</span>    return logId;<a name="line.765"></a>
+<span class="sourceLineNo">766</span>  }<a name="line.766"></a>
+<span class="sourceLineNo">767</span><a name="line.767"></a>
+<span class="sourceLineNo">768</span>  private void updateStoreTracker(final PushType type,<a name="line.768"></a>
+<span class="sourceLineNo">769</span>      final long procId, final long[] subProcIds) {<a name="line.769"></a>
+<span class="sourceLineNo">770</span>    switch (type) {<a name="line.770"></a>
+<span class="sourceLineNo">771</span>      case INSERT:<a name="line.771"></a>
+<span class="sourceLineNo">772</span>        if (subProcIds == null) {<a name="line.772"></a>
+<span class="sourceLineNo">773</span>          storeTracker.insert(procId);<a name="line.773"></a>
+<span class="sourceLineNo">774</span>        } else if (procId == Procedure.NO_PROC_ID) {<a name="line.774"></a>
+<span class="sourceLineNo">775</span>          storeTracker.insert(subProcIds);<a name="line.775"></a>
+<span class="sourceLineNo">776</span>        } else {<a name="line.776"></a>
+<span class="sourceLineNo">777</span>          storeTracker.insert(procId, subProcIds);<a name="line.777"></a>
+<span class="sourceLineNo">778</span>          holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.778"></a>
+<span class="sourceLineNo">779</span>        }<a name="line.779"></a>
+<span class="sourceLineNo">780</span>        break;<a name="line.780"></a>
+<span class="sourceLineNo">781</span>      case UPDATE:<a name="line.781"></a>
+<span class="sourceLineNo">782</span>        storeTracker.update(procId);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>        holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.783"></a>
+<span class="sourceLineNo">784</span>        break;<a name="line.784"></a>
+<span class="sourceLineNo">785</span>      case DELETE:<a name="line.785"></a>
+<span class="sourceLineNo">786</span>        if (subProcIds != null &amp;&amp; subProcIds.length &gt; 0) {<a name="line.786"></a>
+<span class="sourceLineNo">787</span>          storeTracker.delete(subProcIds);<a name="line.787"></a>
+<span class="sourceLineNo">788</span>          holdingCleanupTracker.setDeletedIfModified(subProcIds);<a name="line.788"></a>
+<span class="sourceLineNo">789</span>        } else {<a name="line.789"></a>
+<span class="sourceLineNo">790</span>          storeTracker.delete(procId);<a name="line.790"></a>
+<span class="sourceLineNo">791</span>          holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.791"></a>
+<span class="sourceLineNo">792</span>        }<a name="line.792"></a>
+<span class="sourceLineNo">793</span>        break;<a name="line.793"></a>
+<span class="sourceLineNo">794</span>      default:<a name="line.794"></a>
+<span class="sourceLineNo">795</span>        throw new RuntimeException("invalid push type " + type);<a name="line.795"></a>
+<span class="sourceLineNo">796</span>    }<a name="line.796"></a>
+<span class="sourceLineNo">797</span>  }<a name="line.797"></a>
+<span class="sourceLineNo">798</span><a name="line.798"></a>
+<span class="sourceLineNo">799</span>  private boolean isSyncAborted() {<a name="line.799"></a>
+<span class="sourceLineNo">800</span>    return syncException.get() != null;<a name="line.800"></a>
+<span class="sourceLineNo">801</span>  }<a name="line.801"></a>
+<span class="sourceLineNo">802</span><a name="line.802"></a>
+<span class="sourceLineNo">803</span>  private void syncLoop() throws Throwable {<a name="line.803"></a>
+<span class="sourceLineNo">804</span>    long totalSyncedToStore = 0;<a name="line.804"></a>
+<span class="sourceLineNo">805</span>    inSync.set(false);<a name="line.805"></a>
+<span class="sourceLineNo">806</span>    lock.lock();<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    try {<a name="line.807"></a>
+<span class="sourceLineNo">808</span>      while (isRunning()) {<a name="line.808"></a>
+<span class="sourceLineNo">809</span>        try {<a name="line.809"></a>
+<span class="sourceLineNo">810</span>          // Wait until new data is available<a name="line.810"></a>
+<span class="sourceLineNo">811</span>          if (slotIndex == 0) {<a name="line.811"></a>
+<span class="sourceLineNo">812</span>            if (!loading.get()) {<a name="line.812"></a>
+<span class="sourceLineNo">813</span>              periodicRoll();<a name="line.813"></a>
+<span class="sourceLineNo">814</span>            }<a name="line.814"></a>
+<span class="sourceLineNo">815</span><a name="line.815"></a>
+<span class="sourceLineNo">816</span>            if (LOG.isTraceEnabled()) {<a name="line.816"></a>
+<span class="sourceLineNo">817</span>              float rollTsSec = getMillisFromLastRoll() / 1000.0f;<a name="line.817"></a>
+<span class="sourceLineNo">818</span>              LOG.trace(String.format("Waiting for data. flushed=%s (%s/sec)",<a name="line.818"></a>
+<span class="sourceLineNo">819</span>                        StringUtils.humanSize(totalSynced.get()),<a name="line.819"></a>
+<span class="sourceLineNo">820</span>                        StringUtils.humanSize(totalSynced.get() / rollTsSec)));<a name="line.820"></a>
 <span class="sourceLineNo">821</span>            }<a name="line.821"></a>
-<span class="sourceLineNo">822</span>          }<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          // Wait SYNC_WAIT_MSEC or the signal of "slots full" before flushing<a name="line.823"></a>
-<span class="sourceLineNo">824</span>          syncMaxSlot = runningProcCount;<a name="line.824"></a>
-<span class="sourceLineNo">825</span>          assert syncMaxSlot &gt; 0 : "unexpected syncMaxSlot=" + syncMaxSlot;<a name="line.825"></a>
-<span class="sourceLineNo">826</span>          final long syncWaitSt = System.currentTimeMillis();<a name="line.826"></a>
-<span class="sourceLineNo">827</span>          if (slotIndex != syncMaxSlot) {<a name="line.827"></a>
-<span class="sourceLineNo">828</span>            slotCond.await(syncWaitMsec, TimeUnit.MILLISECONDS);<a name="line.828"></a>
-<span class="sourceLineNo">829</span>          }<a name="line.829"></a>
-<span class="sourceLineNo">830</span><a name="line.830"></a>
-<span class="sourceLineNo">831</span>          final long currentTs = System.currentTimeMillis();<a name="line.831"></a>
-<span class="sourceLineNo">832</span>          final long syncWaitMs = currentTs - syncWaitSt;<a name="line.832"></a>
-<span class="sourceLineNo">833</span>          final float rollSec = getMillisFromLastRoll() / 1000.0f;<a name="line.833"></a>
-<span class="sourceLineNo">834</span>          final float syncedPerSec = totalSyncedToStore / rollSec;<a name="line.834"></a>
-<span class="sourceLineNo">835</span>          if (LOG.isTraceEnabled() &amp;&amp; (syncWaitMs &gt; 10 || slotIndex &lt; syncMaxSlot)) {<a name="line.835"></a>
-<span class="sourceLineNo">836</span>            LOG.trace(String.format("Sync wait %s, slotIndex=%s , totalSynced=%s (%s/sec)",<a name="line.836"></a>
-<span class="sourceLineNo">837</span>                      StringUtils.humanTimeDiff(syncWaitMs), slotIndex,<a name="line.837"></a>
-<span class="sourceLineNo">838</span>                      StringUtils.humanSize(totalSyncedToStore),<a name="line.838"></a>
-<span class="sourceLineNo">839</span>                      StringUtils.humanSize(syncedPerSec)));<a name="line.839"></a>
-<span class="sourceLineNo">840</span>          }<a name="line.840"></a>
-<span class="sourceLineNo">841</span><a name="line.841"></a>
-<span class="sourceLineNo">842</span>          // update webui circular buffers (TODO: get rid of allocations)<a name="line.842"></a>
-<span class="sourceLineNo">843</span>          final SyncMetrics syncMetrics = new SyncMetrics();<a name="line.843"></a>
-<span class="sourceLineNo">844</span>          syncMetrics.timestamp = currentTs;<a name="line.844"></a>
-<span class="sourceLineNo">845</span>          syncMetrics.syncWaitMs = syncWaitMs;<a name="line.845"></a>
-<span class="sourceLineNo">846</span>          syncMetrics.syncedEntries = slotIndex;<a name="line.846"></a>
-<span class="sourceLineNo">847</span>          syncMetrics.totalSyncedBytes = totalSyncedToStore;<a name="line.847"></a>
-<span class="sourceLineNo">848</span>          syncMetrics.syncedPerSec = syncedPerSec;<a name="line.848"></a>
-<span class="sourceLineNo">849</span>          syncMetricsQueue.add(syncMetrics);<a name="line.849"></a>
-<span class="sourceLineNo">850</span><a name="line.850"></a>
-<span class="sourceLineNo">851</span>          // sync<a name="line.851"></a>
-<span class="sourceLineNo">852</span>          inSync.set(true);<a name="line.852"></a>
-<span class="sourceLineNo">853</span>          long slotSize = syncSlots();<a name="line.853"></a>
-<span class="sourceLineNo">854</span>          logs.getLast().addToSize(slotSize);<a name="line.854"></a>
-<span class="sourceLineNo">855</span>          totalSyncedToStore = totalSynced.addAndGet(slotSize);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>          slotIndex = 0;<a name="line.856"></a>
-<span class="sourceLineNo">857</span>          inSync.set(false);<a name="line.857"></a>
-<span class="sourceLineNo">858</span>          syncId.incrementAndGet();<a name="line.858"></a>
-<span class="sourceLineNo">859</span>        } catch (InterruptedException e) {<a name="line.859"></a>
-<span class="sourceLineNo">860</span>          Thread.currentThread().interrupt();<a name="line.860"></a>
-<span class="sourceLineNo">861</span>          syncException.compareAndSet(null, e);<a name="line.861"></a>
-<span class="sourceLineNo">862</span>          sendAbortProcessSignal();<a name="line.862"></a>
-<span class="sourceLineNo">863</span>          throw e;<a name="line.863"></a>
-<span class="sourceLineNo">864</span>        } catch (Throwable t) {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>          syncException.compareAndSet(null, t);<a name="line.865"></a>
-<span class="sourceLineNo">866</span>          sendAbortProcessSignal();<a name="line.866"></a>
-<span class="sourceLineNo">867</span>          throw t;<a name="line.867"></a>
-<span class="sourceLineNo">868</span>        } finally {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>          syncCond.signalAll();<a name="line.869"></a>
-<span class="sourceLineNo">870</span>        }<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      }<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    } finally {<a name="line.872"></a>
-<span class="sourceLineNo">873</span>      lock.unlock();<a name="line.873"></a>
-<span class="sourceLineNo">874</span>    }<a name="line.874"></a>
-<span class="sourceLineNo">875</span>  }<a name="line.875"></a>
-<span class="sourceLineNo">876</span><a name="line.876"></a>
-<span class="sourceLineNo">877</span>  public ArrayList&lt;SyncMetrics&gt; getSyncMetrics() {<a name="line.877"></a>
-<span class="sourceLineNo">878</span>    lock.lock();<a name="line.878"></a>
-<span class="sourceLineNo">879</span>    try {<a name="line.879"></a>
-<span class="sourceLineNo">880</span>      return new ArrayList&lt;&gt;(syncMetricsQueue);<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    } finally {<a name="line.881"></a>
-<span class="sourceLineNo">882</span>      lock.unlock();<a name="line.882"></a>
-<span class="sourceLineNo">883</span>    }<a name="line.883"></a>
-<span class="sourceLineNo">884</span>  }<a name="line.884"></a>
-<span class="sourceLineNo">885</span><a name="line.885"></a>
-<span class="sourceLineNo">886</span>  private long syncSlots() throws Throwable {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    int retry = 0;<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    int logRolled = 0;<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    long totalSynced = 0;<a name="line.889"></a>
-<span class="sourceLineNo">890</span>    do {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>      try {<a name="line.891"></a>
-<span class="sourceLineNo">892</span>        totalSynced = syncSlots(stream, slots, 0, slotIndex);<a name="line.892"></a>
-<span class="sourceLineNo">893</span>        break;<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      } catch (Throwable e) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span>        LOG.warn("unable to sync slots, retry=" + retry);<a name="line.895"></a>
-<span class="sourceLineNo">896</span>        if (++retry &gt;= maxRetriesBeforeRoll) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>          if (logRolled &gt;= maxSyncFailureRoll &amp;&amp; isRunning()) {<a name="line.897"></a>
-<span class="sourceLineNo">898</span>            LOG.error("Sync slots after log roll failed, abort.", e);<a name="line.898"></a>
-<span class="sourceLineNo">899</span>            throw e;<a name="line.899"></a>
-<span class="sourceLineNo">900</span>          }<a name="line.900"></a>
-<span class="sourceLineNo">901</span><a name="line.901"></a>
-<span class="sourceLineNo">902</span>          if (!rollWriterWithRetries()) {<a name="line.902"></a>
-<span class="sourceLineNo">903</span>            throw e;<a name="line.903"></a>
-<span class="sourceLineNo">904</span>          }<a name="line.904"></a>
-<span class="sourceLineNo">905</span><a name="line.905"></a>
-<span class="sourceLineNo">906</span>          logRolled++;<a name="line.906"></a>
-<span class="sourceLineNo">907</span>          retry = 0;<a name="line.907"></a>
-<span class="sourceLineNo">908</span>        }<a name="line.908"></a>
-<span class="sourceLineNo">909</span>      }<a name="line.909"></a>
-<span class="sourceLineNo">910</span>    } while (isRunning());<a name="line.910"></a>
-<span class="sourceLineNo">911</span>    return totalSynced;<a name="line.911"></a>
-<span class="sourceLineNo">912</span>  }<a name="line.912"></a>
-<span class="sourceLineNo">913</span><a name="line.913"></a>
-<span class="sourceLineNo">914</span>  protected long syncSlots(final FSDataOutputStream stream, final ByteSlot[] slots,<a name="line.914"></a>
-<span class="sourceLineNo">915</span>      final int offset, final int count) throws IOException {<a name="line.915"></a>
-<span class="sourceLineNo">916</span>    long totalSynced = 0;<a name="line.916"></a>
-<span class="sourceLineNo">917</span>    for (int i = 0; i &lt; count; ++i) {<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      final ByteSlot data = slots[offset + i];<a name="line.918"></a>
-<span class="sourceLineNo">919</span>      data.writeTo(stream);<a name="line.919"></a>
-<span class="sourceLineNo">920</span>      totalSynced += data.size();<a name="line.920"></a>
-<span class="sourceLineNo">921</span>    }<a name="line.921"></a>
-<span class="sourceLineNo">922</span><a name="line.922"></a>
-<span class="sourceLineNo">923</span>    syncStream(stream);<a name="line.923"></a>
-<span class="sourceLineNo">924</span>    sendPostSyncSignal();<a name="line.924"></a>
-<span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>    if (LOG.isTraceEnabled()) {<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      LOG.trace("Sync slots=" + count + '/' + syncMaxSlot +<a name="line.927"></a>
-<span class="sourceLineNo">928</span>                ", flushed=" + StringUtils.humanSize(totalSynced));<a name="line.928"></a>
-<span class="sourceLineNo">929</span>    }<a name="line.929"></a>
-<span class="sourceLineNo">930</span>    return totalSynced;<a name="line.930"></a>
-<span class="sourceLineNo">931</span>  }<a name="line.931"></a>
-<span class="sourceLineNo">932</span><a name="line.932"></a>
-<span class="sourceLineNo">933</span>  protected void syncStream(final FSDataOutputStream stream) throws IOException {<a name="line.933"></a>
-<span class="sourceLineNo">934</span>    if (useHsync) {<a name="line.934"></a>
-<span class="sourceLineNo">935</span>      stream.hsync();<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    } else {<a name="line.936"></a>
-<span class="sourceLineNo">937</span>      stream.hflush();<a name="line.937"></a>
-<span class="sourceLineNo">938</span>    }<a name="line.938"></a>
-<span class="sourceLineNo">939</span>  }<a name="line.939"></a>
-<span class="sourceLineNo">940</span><a name="line.940"></a>
-<span class="sourceLineNo">941</span>  private boolean rollWriterWithRetries() {<a name="line.941"></a>
-<span class="sourceLineNo">942</span>    for (int i = 0; i &lt; rollRetries &amp;&amp; isRunning(); ++i) {<a name="line.942"></a>
-<span class="sourceLineNo">943</span>      if (i &gt; 0) Threads.sleepWithoutInterrupt(waitBeforeRoll * i);<a name="line.943"></a>
-<span class="sourceLineNo">944</span><a name="line.944"></a>
-<span class="sourceLineNo">945</span>      try {<a name="line.945"></a>
-<span class="sourceLineNo">946</span>        if (rollWriter()) {<a name="line.946"></a>
-<span class="sourceLineNo">947</span>          return true;<a name="line.947"></a>
-<span class="sourceLineNo">948</span>        }<a name="line.948"></a>
-<span class="sourceLineNo">949</span>      } catch (IOException e) {<a name="line.949"></a>
-<span class="sourceLineNo">950</span>        LOG.warn("Unable to roll the log, attempt=" + (i + 1), e);<a name="line.950"></a>
-<span class="sourceLineNo">951</span>      }<a name="line.951"></a>
-<span class="sourceLineNo">952</span>    }<a name="line.952"></a>
-<span class="sourceLineNo">953</span>    LOG.error(HBaseMarkers.FATAL, "Unable to roll the log");<a name="line.953"></a>
-<span class="sourceLineNo">954</span>    return false;<a name="line.954"></a>
-<span class="sourceLineNo">955</span>  }<a name="line.955"></a>
-<span class="sourceLineNo">956</span><a name="line.956"></a>
-<span class="sourceLineNo">957</span>  private boolean tryRollWriter() {<a name="line.957"></a>
-<span class="sourceLineNo">958</span>    try {<a name="line.958"></a>
-<span class="sourceLineNo">959</span>      return rollWriter();<a name="line.959"></a>
-<span class="sourceLineNo">960</span>    } catch (IOException e) {<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      LOG.warn("Unable to roll the log", e);<a name="line.961"></a>
-<span class="sourceLineNo">962</span>      return false;<a name="line.962"></a>
-<span class="sourceLineNo">963</span>    }<a name="line.963"></a>
-<span class="sourceLineNo">964</span>  }<a name="line.964"></a>
-<span class="sourceLineNo">965</span><a name="line.965"></a>
-<span class="sourceLineNo">966</span>  public long getMillisToNextPeriodicRoll() {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    if (lastRollTs.get() &gt; 0 &amp;&amp; periodicRollMsec &gt; 0) {<a name="line.967"></a>
-<span class="sourceLineNo">968</span>      return periodicRollMsec - getMillisFromLastRoll();<a name="line.968"></a>
+<span class="sourceLineNo">822</span><a name="line.822"></a>
+<span class="sourceLineNo">823</span>            waitCond.await(getMillisToNextPeriodicRoll(), TimeUnit.MILLISECONDS);<a name="line.823"></a>
+<span class="sourceLineNo">824</span>            if (slotIndex == 0) {<a name="line.824"></a>
+<span class="sourceLineNo">825</span>              // no data.. probably a stop() or a periodic roll<a name="line.825"></a>
+<span class="sourceLineNo">826</span>              continue;<a name="line.826"></a>
+<span class="sourceLineNo">827</span>            }<a name="line.827"></a>
+<span class="sourceLineNo">828</span>          }<a name="line.828"></a>
+<span class="sourceLineNo">829</span>          // Wait SYNC_WAIT_MSEC or the signal of "slots full" before flushing<a name="line.829"></a>
+<span class="sourceLineNo">830</span>          syncMaxSlot = runningProcCount;<a name="line.830"></a>
+<span class="sourceLineNo">831</span>          assert syncMaxSlot &gt; 0 : "unexpected syncMaxSlot=" + syncMaxSlot;<a name="line.831"></a>
+<span class="sourceLineNo">832</span>          final long syncWaitSt = System.currentTimeMillis();<a name="line.832"></a>
+<span class="sourceLineNo">833</span>          if (slotIndex != syncMaxSlot) {<a name="line.833"></a>
+<span class="sourceLineNo">834</span>            slotCond.await(syncWaitMsec, TimeUnit.MILLISECONDS);<a name="line.834"></a>
+<span class="sourceLineNo">835</span>          }<a name="line.835"></a>
+<span class="sourceLineNo">836</span><a name="line.836"></a>
+<span class="sourceLineNo">837</span>          final long currentTs = System.currentTimeMillis();<a name="line.837"></a>
+<span class="sourceLineNo">838</span>          final long syncWaitMs = currentTs - syncWaitSt;<a name="line.838"></a>
+<span class="sourceLineNo">839</span>          final float rollSec = getMillisFromLastRoll() / 1000.0f;<a name="line.839"></a>
+<span class="sourceLineNo">840</span>          final float syncedPerSec = totalSyncedToStore / rollSec;<a name="line.840"></a>
+<span class="sourceLineNo">841</span>          if (LOG.isTraceEnabled() &amp;&amp; (syncWaitMs &gt; 10 || slotIndex &lt; syncMaxSlot)) {<a name="line.841"></a>
+<span class="sourceLineNo">842</span>            LOG.trace(String.format("Sync wait %s, slotIndex=%s , totalSynced=%s (%s/sec)",<a name="line.842"></a>
+<span class="sourceLineNo">843</span>                      StringUtils.humanTimeDiff(syncWaitMs), slotIndex,<a name="line.843"></a>
+<span class="sourceLineNo">844</span>                      StringUtils.humanSize(totalSyncedToStore),<a name="line.844"></a>
+<span class="sourceLineNo">845</span>                      StringUtils.humanSize(syncedPerSec)));<a name="line.845"></a>
+<span class="sourceLineNo">846</span>          }<a name="line.846"></a>
+<span class="sourceLineNo">847</span><a name="line.847"></a>
+<span class="sourceLineNo">848</span>          // update webui circular buffers (TODO: get rid of allocations)<a name="line.848"></a>
+<span class="sourceLineNo">849</span>          final SyncMetrics syncMetrics = new SyncMetrics();<a name="line.849"></a>
+<span class="sourceLineNo">850</span>          syncMetrics.timestamp = currentTs;<a name="line.850"></a>
+<span class="sourceLineNo">851</span>          syncMetrics.syncWaitMs = syncWaitMs;<a name="line.851"></a>
+<span class="sourceLineNo">852</span>          syncMetrics.syncedEntries = slotIndex;<a name="line.852"></a>
+<span class="sourceLineNo">853</span>          syncMetrics.totalSyncedBytes = totalSyncedToStore;<a name="line.853"></a>
+<span class="sourceLineNo">854</span>          syncMetrics.syncedPerSec = syncedPerSec;<a name="line.854"></a>
+<span class="sourceLineNo">855</span>          syncMetricsQueue.add(syncMetrics);<a name="line.855"></a>
+<span class="sourceLineNo">856</span><a name="line.856"></a>
+<span class="sourceLineNo">857</span>          // sync<a name="line.857"></a>
+<span class="sourceLineNo">858</span>          inSync.set(true);<a name="line.858"></a>
+<span class="sourceLineNo">859</span>          long slotSize = syncSlots();<a name="line.859"></a>
+<span class="sourceLineNo">860</span>          logs.getLast().addToSize(slotSize);<a name="line.860"></a>
+<span class="sourceLineNo">861</span>          totalSyncedToStore = totalSynced.addAndGet(slotSize);<a name="line.861"></a>
+<span class="sourceLineNo">862</span>          slotIndex = 0;<a name="line.862"></a>
+<span class="sourceLineNo">863</span>          inSync.set(false);<a name="line.863"></a>
+<span class="sourceLineNo">864</span>          syncId.incrementAndGet();<a name="line.864"></a>
+<span class="sourceLineNo">865</span>        } catch (InterruptedException e) {<a name="line.865"></a>
+<span class="sourceLineNo">866</span>          Thread.currentThread().interrupt();<a name="line.866"></a>
+<span class="sourceLineNo">867</span>          syncException.compareAndSet(null, e);<a name="line.867"></a>
+<span class="sourceLineNo">868</span>          sendAbortProcessSignal();<a name="line.868"></a>
+<span class="sourceLineNo">869</span>          throw e;<a name="line.869"></a>
+<span class="sourceLineNo">870</span>        } catch (Throwable t) {<a name="line.870"></a>
+<span class="sourceLineNo">871</span>          syncException.compareAndSet(null, t);<a name="line.871"></a>
+<span class="sourceLineNo">872</span>          sendAbortProcessSignal();<a name="line.872"></a>
+<span class="sourceLineNo">873</span>          throw t;<a name="line.873"></a>
+<span class="sourceLineNo">874</span>        } finally {<a name="line.874"></a>
+<span class="sourceLineNo">875</span>          syncCond.signalAll();<a name="line.875"></a>
+<span class="sourceLineNo">876</span>        }<a name="line.876"></a>
+<span class="sourceLineNo">877</span>      }<a name="line.877"></a>
+<span class="sourceLineNo">878</span>    } finally {<a name="line.878"></a>
+<span class="sourceLineNo">879</span>      lock.unlock();<a name="line.879"></a>
+<span class="sourceLineNo">880</span>    }<a name="line.880"></a>
+<span class="sourceLineNo">881</span>  }<a name="line.881"></a>
+<span class="sourceLineNo">882</span><a name="line.882"></a>
+<span class="sourceLineNo">883</span>  public ArrayList&lt;SyncMetrics&gt; getSyncMetrics() {<a name="line.883"></a>
+<span class="sourceLineNo">884</span>    lock.lock();<a name="line.884"></a>
+<span class="sourceLineNo">885</span>    try {<a name="line.885"></a>
+<span class="sourceLineNo">886</span>      return new ArrayList&lt;&gt;(syncMetricsQueue);<a name="line.886"></a>
+<span class="sourceLineNo">887</span>    } finally {<a name="line.887"></a>
+<span class="sourceLineNo">888</span>      lock.unlock();<a name="line.888"></a>
+<span class="sourceLineNo">889</span>    }<a name="line.889"></a>
+<span class="sourceLineNo">890</span>  }<a name="line.890"></a>
+<span class="sourceLineNo">891</span><a name="line.891"></a>
+<span class="sourceLineNo">892</span>  private long syncSlots() throws Throwable {<a name="line.892"></a>
+<span class="sourceLineNo">893

<TRUNCATED>

[10/11] hbase-site git commit: Published site at 405bf5e6383a09f435baadbac6c389e9f6c43ac6.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/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 a2f36de..f00006f 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html
@@ -1489,7 +1489,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>WALS_PATH_FILTER</h4>
-<pre>private static final&nbsp;org.apache.hadoop.fs.PathFilter <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1265">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.1275">WALS_PATH_FILTER</a></pre>
 </li>
 </ul>
 <a name="FILE_STATUS_ID_COMPARATOR">
@@ -1498,7 +1498,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FILE_STATUS_ID_COMPARATOR</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;org.apache.hadoop.fs.FileStatus&gt; <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1273">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.1283">FILE_STATUS_ID_COMPARATOR</a></pre>
 </li>
 </ul>
 </li>
@@ -1685,7 +1685,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>tryCleanupLogsOnLoad</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.503">tryCleanupLogsOnLoad</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.509">tryCleanupLogsOnLoad</a>()</pre>
 </li>
 </ul>
 <a name="insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">
@@ -1694,7 +1694,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>insert</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.524">insert</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.530">insert</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
                    <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;subprocs)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure-org.apache.hadoop.hbase.procedure2.Procedure:A-">ProcedureStore</a></code></span></div>
 <div class="block">When a procedure is submitted to the executor insert(proc, null) will be called.
@@ -1716,7 +1716,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>insert</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.558">insert</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;procs)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.564">insert</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;[]&nbsp;procs)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#insert-org.apache.hadoop.hbase.procedure2.Procedure:A-">ProcedureStore</a></code></span></div>
 <div class="block">Serialize a set of new procedures.
  These procedures are freshly submitted to the executor and each procedure
@@ -1733,7 +1733,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>update</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.587">update</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.593">update</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#update-org.apache.hadoop.hbase.procedure2.Procedure-">ProcedureStore</a></code></span></div>
 <div class="block">The specified procedure was executed,
  and the new state should be written to the store.</div>
@@ -1749,7 +1749,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.610">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.616">delete</a>(long&nbsp;procId)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#delete-long-">ProcedureStore</a></code></span></div>
 <div class="block">The specified procId was removed from the executor,
  due to completion, abort or failure.
@@ -1766,7 +1766,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.630">delete</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.636">delete</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;?&gt;&nbsp;proc,
                    long[]&nbsp;subProcIds)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#delete-org.apache.hadoop.hbase.procedure2.Procedure-long:A-">ProcedureStore</a></code></span></div>
 <div class="block">The parent procedure completed.
@@ -1784,7 +1784,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.655">delete</a>(long[]&nbsp;procIds,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.661">delete</a>(long[]&nbsp;procIds,
                    int&nbsp;offset,
                    int&nbsp;count)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html#delete-long:A-int-int-">ProcedureStore</a></code></span></div>
@@ -1805,7 +1805,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.666">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.672">delete</a>(long[]&nbsp;procIds)</pre>
 </li>
 </ul>
 <a name="acquireSlot--">
@@ -1814,7 +1814,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>acquireSlot</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.690">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.696">acquireSlot</a>()</pre>
 </li>
 </ul>
 <a name="releaseSlot-org.apache.hadoop.hbase.procedure2.util.ByteSlot-">
@@ -1823,7 +1823,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>releaseSlot</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.695">releaseSlot</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.701">releaseSlot</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot)</pre>
 </li>
 </ul>
 <a name="pushData-org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.PushType-org.apache.hadoop.hbase.procedure2.util.ByteSlot-long-long:A-">
@@ -1832,7 +1832,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>pushData</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.702">pushData</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a>&nbsp;type,
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.708">pushData</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a>&nbsp;type,
                       <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>&nbsp;slot,
                       long&nbsp;procId,
                       long[]&nbsp;subProcIds)</pre>
@@ -1844,7 +1844,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>updateStoreTracker</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.762">updateStoreTracker</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a>&nbsp;type,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.768">updateStoreTracker</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.PushType</a>&nbsp;type,
                                 long&nbsp;procId,
                                 long[]&nbsp;subProcIds)</pre>
 </li>
@@ -1855,7 +1855,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>isSyncAborted</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.793">isSyncAborted</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.799">isSyncAborted</a>()</pre>
 </li>
 </ul>
 <a name="syncLoop--">
@@ -1864,7 +1864,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>syncLoop</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.797">syncLoop</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.803">syncLoop</a>()
                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1878,7 +1878,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getSyncMetrics</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.SyncMetrics</a>&gt;&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.877">getSyncMetrics</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.SyncMetrics.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore.SyncMetrics</a>&gt;&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.883">getSyncMetrics</a>()</pre>
 </li>
 </ul>
 <a name="syncSlots--">
@@ -1887,7 +1887,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>syncSlots</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.886">syncSlots</a>()
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.892">syncSlots</a>()
                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1901,7 +1901,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>syncSlots</h4>
-<pre>protected&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.914">syncSlots</a>(org.apache.hadoop.fs.FSDataOutputStream&nbsp;stream,
+<pre>protected&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.920">syncSlots</a>(org.apache.hadoop.fs.FSDataOutputStream&nbsp;stream,
                          <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/util/ByteSlot.html" title="class in org.apache.hadoop.hbase.procedure2.util">ByteSlot</a>[]&nbsp;slots,
                          int&nbsp;offset,
                          int&nbsp;count)
@@ -1918,7 +1918,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>syncStream</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.933">syncStream</a>(org.apache.hadoop.fs.FSDataOutputStream&nbsp;stream)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.939">syncStream</a>(org.apache.hadoop.fs.FSDataOutputStream&nbsp;stream)
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1932,7 +1932,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>rollWriterWithRetries</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.941">rollWriterWithRetries</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.947">rollWriterWithRetries</a>()</pre>
 </li>
 </ul>
 <a name="tryRollWriter--">
@@ -1941,7 +1941,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>tryRollWriter</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.957">tryRollWriter</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.963">tryRollWriter</a>()</pre>
 </li>
 </ul>
 <a name="getMillisToNextPeriodicRoll--">
@@ -1950,7 +1950,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getMillisToNextPeriodicRoll</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.966">getMillisToNextPeriodicRoll</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.972">getMillisToNextPeriodicRoll</a>()</pre>
 </li>
 </ul>
 <a name="getMillisFromLastRoll--">
@@ -1959,7 +1959,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getMillisFromLastRoll</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.973">getMillisFromLastRoll</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.979">getMillisFromLastRoll</a>()</pre>
 </li>
 </ul>
 <a name="periodicRollForTesting--">
@@ -1968,7 +1968,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>periodicRollForTesting</h4>
-<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.978">periodicRollForTesting</a>()
+<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.984">periodicRollForTesting</a>()
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1982,7 +1982,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>rollWriterForTesting</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.988">rollWriterForTesting</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.994">rollWriterForTesting</a>()
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1996,7 +1996,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>removeInactiveLogsForTesting</h4>
-<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.998">removeInactiveLogsForTesting</a>()
+<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1004">removeInactiveLogsForTesting</a>()
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2010,7 +2010,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>periodicRoll</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1007">periodicRoll</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1013">periodicRoll</a>()
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2024,7 +2024,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>rollWriter</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1028">rollWriter</a>()
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1034">rollWriter</a>()
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2038,7 +2038,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>rollWriter</h4>
-<pre>boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1052">rollWriter</a>(long&nbsp;logId)
+<pre>boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1058">rollWriter</a>(long&nbsp;logId)
             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2052,7 +2052,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>closeCurrentLogStream</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1129">closeCurrentLogStream</a>(boolean&nbsp;abort)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1135">closeCurrentLogStream</a>(boolean&nbsp;abort)</pre>
 </li>
 </ul>
 <a name="removeInactiveLogs--">
@@ -2061,7 +2061,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>removeInactiveLogs</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1156">removeInactiveLogs</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1166">removeInactiveLogs</a>()
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2075,7 +2075,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>buildHoldingCleanupTracker</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1169">buildHoldingCleanupTracker</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1179">buildHoldingCleanupTracker</a>()</pre>
 </li>
 </ul>
 <a name="removeAllLogs-long-java.lang.String-">
@@ -2084,7 +2084,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>removeAllLogs</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1203">removeAllLogs</a>(long&nbsp;lastLogId,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1213">removeAllLogs</a>(long&nbsp;lastLogId,
                            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why)</pre>
 <div class="block">Remove all logs with logId <= <code>lastLogId</code>.</div>
 </li>
@@ -2095,7 +2095,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>removeLogFile</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1225">removeLogFile</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&nbsp;log,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1235">removeLogFile</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&nbsp;log,
                               org.apache.hadoop.fs.Path&nbsp;walArchiveDir)</pre>
 </li>
 </ul>
@@ -2105,7 +2105,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1242">getWALDir</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1252">getWALDir</a>()</pre>
 </li>
 </ul>
 <a name="getWalArchiveDir--">
@@ -2114,7 +2114,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getWalArchiveDir</h4>
-<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1247">getWalArchiveDir</a>()</pre>
+<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1257">getWalArchiveDir</a>()</pre>
 </li>
 </ul>
 <a name="getFileSystem--">
@@ -2123,7 +2123,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getFileSystem</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1251">getFileSystem</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1261">getFileSystem</a>()</pre>
 </li>
 </ul>
 <a name="getLogFilePath-long-">
@@ -2132,7 +2132,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getLogFilePath</h4>
-<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1255">getLogFilePath</a>(long&nbsp;logId)
+<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1265">getLogFilePath</a>(long&nbsp;logId)
                                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2146,7 +2146,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getLogIdFromName</h4>
-<pre>private static&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1259">getLogIdFromName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>private static&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1269">getLogIdFromName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 </li>
 </ul>
 <a name="getLogFiles--">
@@ -2155,7 +2155,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getLogFiles</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.FileStatus[]&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1283">getLogFiles</a>()
+<pre>private&nbsp;org.apache.hadoop.fs.FileStatus[]&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1293">getLogFiles</a>()
                                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2169,7 +2169,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxLogId</h4>
-<pre>private static&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1299">getMaxLogId</a>(org.apache.hadoop.fs.FileStatus[]&nbsp;logFiles)</pre>
+<pre>private static&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1309">getMaxLogId</a>(org.apache.hadoop.fs.FileStatus[]&nbsp;logFiles)</pre>
 <div class="block">Make sure that the file set are gotten by calling <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#getLogFiles--"><code>getLogFiles()</code></a>, where we will sort
  the file set by log id.</div>
 <dl>
@@ -2184,7 +2184,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>initOldLogs</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1311">initOldLogs</a>(org.apache.hadoop.fs.FileStatus[]&nbsp;logFiles)
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1321">initOldLogs</a>(org.apache.hadoop.fs.FileStatus[]&nbsp;logFiles)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Make sure that the file set are gotten by calling <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#getLogFiles--"><code>getLogFiles()</code></a>, where we will sort
  the file set by log id.</div>
@@ -2202,7 +2202,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>initTrackerFromOldLogs</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1337">initTrackerFromOldLogs</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1347">initTrackerFromOldLogs</a>()</pre>
 <div class="block">If last log's tracker is not null, use it as <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#storeTracker"><code>storeTracker</code></a>. Otherwise, set storeTracker
  as partial, and let <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal"><code>ProcedureWALFormatReader</code></a> rebuild it using entries in the log.</div>
 </li>
@@ -2213,7 +2213,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockList">
 <li class="blockList">
 <h4>initOldLog</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1353">initOldLog</a>(org.apache.hadoop.fs.FileStatus&nbsp;logFile,
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFile</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1363">initOldLog</a>(org.apache.hadoop.fs.FileStatus&nbsp;logFile,
                                     org.apache.hadoop.fs.Path&nbsp;walArchiveDir)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Loads given log file and it's tracker.</div>
@@ -2229,7 +2229,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/P
 <ul class="blockListLast">
 <li class="blockList">
 <h4>main</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1391">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#line.1401">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Parses a directory of WALs building up ProcedureState.
  For testing parse and profiling.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/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 23054ab..288641b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -18,9 +18,9 @@
 <span class="sourceLineNo">010</span>  public static final String version = "3.0.0-SNAPSHOT";<a name="line.10"></a>
 <span class="sourceLineNo">011</span>  public static final String revision = "";<a name="line.11"></a>
 <span class="sourceLineNo">012</span>  public static final String user = "jenkins";<a name="line.12"></a>
-<span class="sourceLineNo">013</span>  public static final String date = "Mon Nov 19 14:44:53 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Tue Nov 20 14:44:19 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 = "354946859721123895ba2f38486ee8a8";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "05b800e0fa4b560f4e9c387e4d35888d";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/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 5fc97ee..2cc0fc9 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
@@ -282,212 +282,213 @@
 <span class="sourceLineNo">274</span>    this.keepDeletes = false;<a name="line.274"></a>
 <span class="sourceLineNo">275</span>    this.partial = false;<a name="line.275"></a>
 <span class="sourceLineNo">276</span>    this.map.clear();<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    resetModified();<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  public boolean isModified(long procId) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    final Map.Entry&lt;Long, BitSetNode&gt; entry = map.floorEntry(procId);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    return entry != null &amp;&amp; entry.getValue().contains(procId) &amp;&amp;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      entry.getValue().isModified(procId);<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>   * If {@link #partial} is false, returns state from the bitmap. If no state is found for<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * {@code procId}, returns YES.<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * If partial is true, tracker doesn't have complete view of system state, so it returns MAYBE<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * if there is no update for the procedure or if it doesn't have a state in bitmap. Otherwise,<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   * returns state from the bitmap.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   */<a name="line.292"></a>
-<span class="sourceLineNo">293</span>  public DeleteState isDeleted(long procId) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    Map.Entry&lt;Long, BitSetNode&gt; entry = map.floorEntry(procId);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    if (entry != null &amp;&amp; entry.getValue().contains(procId)) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      BitSetNode node = entry.getValue();<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      DeleteState state = node.isDeleted(procId);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      return partial &amp;&amp; !node.isModified(procId) ? DeleteState.MAYBE : state;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    return partial ? DeleteState.MAYBE : DeleteState.YES;<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>  public long getActiveMinProcId() {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    Map.Entry&lt;Long, BitSetNode&gt; entry = map.firstEntry();<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    return entry == null ? Procedure.NO_PROC_ID : entry.getValue().getActiveMinProcId();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>  public void setKeepDeletes(boolean keepDeletes) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    this.keepDeletes = keepDeletes;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    // If not to keep deletes, remove the BitSetNodes which are empty (i.e. contains ids of deleted<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    // procedures).<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    if (!keepDeletes) {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      Iterator&lt;Map.Entry&lt;Long, BitSetNode&gt;&gt; it = map.entrySet().iterator();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      while (it.hasNext()) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        Map.Entry&lt;Long, BitSetNode&gt; entry = it.next();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        if (entry.getValue().isEmpty()) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>          it.remove();<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    }<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span>  public boolean isPartial() {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    return partial;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  }<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span>  public void setPartialFlag(boolean isPartial) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    if (this.partial &amp;&amp; !isPartial) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        entry.getValue().unsetPartialFlag();<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>    this.partial = isPartial;<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>   * @return true, if no procedure is active, else false.<a name="line.337"></a>
-<span class="sourceLineNo">338</span>   */<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  public boolean isEmpty() {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      if (!entry.getValue().isEmpty()) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        return false;<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>    return true;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>  }<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>  /**<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * @return true if all procedure was modified or deleted since last call to<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   *         {@link #resetModified()}.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   */<a name="line.351"></a>
-<span class="sourceLineNo">352</span>  public boolean isAllModified() {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (!entry.getValue().isAllModified()) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        return false;<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>    return true;<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>   * Will be used when there are too many proc wal files. We will rewrite the states of the active<a name="line.362"></a>
-<span class="sourceLineNo">363</span>   * procedures in the oldest proc wal file so that we can delete it.<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * @return all the active procedure ids in this tracker.<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   */<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  public long[] getAllActiveProcIds() {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    return map.values().stream().map(BitSetNode::getActiveProcIds).filter(p -&gt; p.length &gt; 0)<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      .flatMapToLong(LongStream::of).toArray();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  }<a name="line.369"></a>
-<span class="sourceLineNo">370</span><a name="line.370"></a>
-<span class="sourceLineNo">371</span>  /**<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   * Clears the list of updated procedure ids. This doesn't affect global list of active<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * procedure ids.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   */<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  public void resetModified() {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      entry.getValue().resetModified();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    minModifiedProcId = Long.MAX_VALUE;<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    maxModifiedProcId = Long.MIN_VALUE;<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>  private BitSetNode getOrCreateNode(long procId) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    // If procId can fit in left node (directly or by growing it)<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    BitSetNode leftNode = null;<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    boolean leftCanGrow = false;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    Map.Entry&lt;Long, BitSetNode&gt; leftEntry = map.floorEntry(procId);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    if (leftEntry != null) {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      leftNode = leftEntry.getValue();<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      if (leftNode.contains(procId)) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        return leftNode;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      }<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      leftCanGrow = leftNode.canGrow(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>    // If procId can fit in right node (directly or by growing it)<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    BitSetNode rightNode = null;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    boolean rightCanGrow = false;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    Map.Entry&lt;Long, BitSetNode&gt; rightEntry = map.ceilingEntry(procId);<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    if (rightEntry != null) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      rightNode = rightEntry.getValue();<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      rightCanGrow = rightNode.canGrow(procId);<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      if (leftNode != null) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        if (leftNode.canMerge(rightNode)) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>          // merge left and right node<a name="line.405"></a>
-<span class="sourceLineNo">406</span>          return mergeNodes(leftNode, rightNode);<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>        // If left and right nodes can not merge, decide which one to grow.<a name="line.409"></a>
-<span class="sourceLineNo">410</span>        if (leftCanGrow &amp;&amp; rightCanGrow) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>          if ((procId - leftNode.getEnd()) &lt;= (rightNode.getStart() - procId)) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>            return growNode(leftNode, procId);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>          }<a name="line.413"></a>
-<span class="sourceLineNo">414</span>          return growNode(rightNode, procId);<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>    }<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>    // grow the left node<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    if (leftCanGrow) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      return growNode(leftNode, procId);<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>    // grow the right node<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    if (rightCanGrow) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      return growNode(rightNode, procId);<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    }<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // add new node if there are no left/right nodes which can be used.<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    BitSetNode node = new BitSetNode(procId, partial);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    map.put(node.getStart(), node);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    return node;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  }<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span>  /**<a name="line.435"></a>
-<span class="sourceLineNo">436</span>   * Grows {@code node} to contain {@code procId} and updates the map.<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   * @return {@link BitSetNode} instance which contains {@code procId}.<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   */<a name="line.438"></a>
-<span class="sourceLineNo">439</span>  private BitSetNode growNode(BitSetNode node, long procId) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    map.remove(node.getStart());<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    node.grow(procId);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    map.put(node.getStart(), node);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    return node;<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>  /**<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * Merges {@code leftNode} &amp; {@code rightNode} and updates the map.<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   */<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private BitSetNode mergeNodes(BitSetNode leftNode, BitSetNode rightNode) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    assert leftNode.getStart() &lt; rightNode.getStart();<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    leftNode.merge(rightNode);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    map.remove(rightNode.getStart());<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    return leftNode;<a name="line.453"></a>
-<span class="sourceLineNo">454</span>  }<a name="line.454"></a>
-<span class="sourceLineNo">455</span><a name="line.455"></a>
-<span class="sourceLineNo">456</span>  public void dump() {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    System.out.println("map " + map.size());<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    System.out.println("isAllModified " + isAllModified());<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    System.out.println("isEmpty " + isEmpty());<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      entry.getValue().dump();<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>  }<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>  //  Convert to/from Protocol Buffer.<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  // ========================================================================<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>  /**<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * Builds<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   * org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureStoreTracker<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * protocol buffer from current state.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   */<a name="line.473"></a>
-<span class="sourceLineNo">474</span>  public ProcedureProtos.ProcedureStoreTracker toProto() throws IOException {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    ProcedureProtos.ProcedureStoreTracker.Builder builder =<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        ProcedureProtos.ProcedureStoreTracker.newBuilder();<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      builder.addNode(entry.getValue().convert());<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    }<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    return builder.build();<a name="line.480"></a>
-<span class="sourceLineNo">481</span>  }<a name="line.481"></a>
-<span class="sourceLineNo">482</span>}<a name="line.482"></a>
+<span class="sourceLineNo">277</span>    minModifiedProcId = Long.MAX_VALUE;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    maxModifiedProcId = Long.MIN_VALUE;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>  }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>  public boolean isModified(long procId) {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    final Map.Entry&lt;Long, BitSetNode&gt; entry = map.floorEntry(procId);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    return entry != null &amp;&amp; entry.getValue().contains(procId) &amp;&amp;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      entry.getValue().isModified(procId);<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>  /**<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * If {@link #partial} is false, returns state from the bitmap. If no state is found for<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   * {@code procId}, returns YES.<a name="line.289"></a>
+<span class="sourceLineNo">290</span>   * If partial is true, tracker doesn't have complete view of system state, so it returns MAYBE<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   * if there is no update for the procedure or if it doesn't have a state in bitmap. Otherwise,<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * returns state from the bitmap.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   */<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  public DeleteState isDeleted(long procId) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    Map.Entry&lt;Long, BitSetNode&gt; entry = map.floorEntry(procId);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    if (entry != null &amp;&amp; entry.getValue().contains(procId)) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      BitSetNode node = entry.getValue();<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      DeleteState state = node.isDeleted(procId);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      return partial &amp;&amp; !node.isModified(procId) ? DeleteState.MAYBE : state;<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    return partial ? DeleteState.MAYBE : DeleteState.YES;<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>  public long getActiveMinProcId() {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    Map.Entry&lt;Long, BitSetNode&gt; entry = map.firstEntry();<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    return entry == null ? Procedure.NO_PROC_ID : entry.getValue().getActiveMinProcId();<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  }<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span>  public void setKeepDeletes(boolean keepDeletes) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    this.keepDeletes = keepDeletes;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    // If not to keep deletes, remove the BitSetNodes which are empty (i.e. contains ids of deleted<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    // procedures).<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    if (!keepDeletes) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      Iterator&lt;Map.Entry&lt;Long, BitSetNode&gt;&gt; it = map.entrySet().iterator();<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      while (it.hasNext()) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        Map.Entry&lt;Long, BitSetNode&gt; entry = it.next();<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        if (entry.getValue().isEmpty()) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>          it.remove();<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      }<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>  }<a name="line.322"></a>
+<span class="sourceLineNo">323</span><a name="line.323"></a>
+<span class="sourceLineNo">324</span>  public boolean isPartial() {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    return partial;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  }<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>  public void setPartialFlag(boolean isPartial) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    if (this.partial &amp;&amp; !isPartial) {<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>        entry.getValue().unsetPartialFlag();<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>    this.partial = isPartial;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>  /**<a name="line.337"></a>
+<span class="sourceLineNo">338</span>   * @return true, if no procedure is active, else false.<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   */<a name="line.339"></a>
+<span class="sourceLineNo">340</span>  public boolean isEmpty() {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      if (!entry.getValue().isEmpty()) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        return false;<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>    return true;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span>  /**<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * @return true if all procedure was modified or deleted since last call to<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   *         {@link #resetModified()}.<a name="line.351"></a>
+<span class="sourceLineNo">352</span>   */<a name="line.352"></a>
+<span class="sourceLineNo">353</span>  public boolean isAllModified() {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      if (!entry.getValue().isAllModified()) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        return false;<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>    return true;<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>  /**<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   * Will be used when there are too many proc wal files. We will rewrite the states of the active<a name="line.363"></a>
+<span class="sourceLineNo">364</span>   * procedures in the oldest proc wal file so that we can delete it.<a name="line.364"></a>
+<span class="sourceLineNo">365</span>   * @return all the active procedure ids in this tracker.<a name="line.365"></a>
+<span class="sourceLineNo">366</span>   */<a name="line.366"></a>
+<span class="sourceLineNo">367</span>  public long[] getAllActiveProcIds() {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    return map.values().stream().map(BitSetNode::getActiveProcIds).filter(p -&gt; p.length &gt; 0)<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      .flatMapToLong(LongStream::of).toArray();<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>  /**<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   * Clears the list of updated procedure ids. This doesn't affect global list of active<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * procedure ids.<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   */<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  public void resetModified() {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      entry.getValue().resetModified();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    minModifiedProcId = Long.MAX_VALUE;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    maxModifiedProcId = Long.MIN_VALUE;<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>  private BitSetNode getOrCreateNode(long procId) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    // If procId can fit in left node (directly or by growing it)<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    BitSetNode leftNode = null;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    boolean leftCanGrow = false;<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    Map.Entry&lt;Long, BitSetNode&gt; leftEntry = map.floorEntry(procId);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    if (leftEntry != null) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      leftNode = leftEntry.getValue();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      if (leftNode.contains(procId)) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>        return leftNode;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      }<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      leftCanGrow = leftNode.canGrow(procId);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    }<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span>    // If procId can fit in right node (directly or by growing it)<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    BitSetNode rightNode = null;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    boolean rightCanGrow = false;<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    Map.Entry&lt;Long, BitSetNode&gt; rightEntry = map.ceilingEntry(procId);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    if (rightEntry != null) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      rightNode = rightEntry.getValue();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      rightCanGrow = rightNode.canGrow(procId);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      if (leftNode != null) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        if (leftNode.canMerge(rightNode)) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          // merge left and right node<a name="line.406"></a>
+<span class="sourceLineNo">407</span>          return mergeNodes(leftNode, rightNode);<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>        // If left and right nodes can not merge, decide which one to grow.<a name="line.410"></a>
+<span class="sourceLineNo">411</span>        if (leftCanGrow &amp;&amp; rightCanGrow) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>          if ((procId - leftNode.getEnd()) &lt;= (rightNode.getStart() - procId)) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>            return growNode(leftNode, procId);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>          }<a name="line.414"></a>
+<span class="sourceLineNo">415</span>          return growNode(rightNode, procId);<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>    // grow the left node<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    if (leftCanGrow) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      return growNode(leftNode, procId);<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>    // grow the right node<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    if (rightCanGrow) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      return growNode(rightNode, procId);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>    // add new node if there are no left/right nodes which can be used.<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    BitSetNode node = new BitSetNode(procId, partial);<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    map.put(node.getStart(), node);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    return node;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>  }<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>  /**<a name="line.436"></a>
+<span class="sourceLineNo">437</span>   * Grows {@code node} to contain {@code procId} and updates the map.<a name="line.437"></a>
+<span class="sourceLineNo">438</span>   * @return {@link BitSetNode} instance which contains {@code procId}.<a name="line.438"></a>
+<span class="sourceLineNo">439</span>   */<a name="line.439"></a>
+<span class="sourceLineNo">440</span>  private BitSetNode growNode(BitSetNode node, long procId) {<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    map.remove(node.getStart());<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    node.grow(procId);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    map.put(node.getStart(), node);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    return node;<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>  /**<a name="line.447"></a>
+<span class="sourceLineNo">448</span>   * Merges {@code leftNode} &amp; {@code rightNode} and updates the map.<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   */<a name="line.449"></a>
+<span class="sourceLineNo">450</span>  private BitSetNode mergeNodes(BitSetNode leftNode, BitSetNode rightNode) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    assert leftNode.getStart() &lt; rightNode.getStart();<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    leftNode.merge(rightNode);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    map.remove(rightNode.getStart());<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    return leftNode;<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 dump() {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    System.out.println("map " + map.size());<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    System.out.println("isAllModified " + isAllModified());<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    System.out.println("isEmpty " + isEmpty());<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      entry.getValue().dump();<a name="line.462"></a>
+<span class="sourceLineNo">463</span>    }<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>  //  Convert to/from Protocol Buffer.<a name="line.467"></a>
+<span class="sourceLineNo">468</span>  // ========================================================================<a name="line.468"></a>
+<span class="sourceLineNo">469</span><a name="line.469"></a>
+<span class="sourceLineNo">470</span>  /**<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * Builds<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   * org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureStoreTracker<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   * protocol buffer from current state.<a name="line.473"></a>
+<span class="sourceLineNo">474</span>   */<a name="line.474"></a>
+<span class="sourceLineNo">475</span>  public ProcedureProtos.ProcedureStoreTracker toProto() throws IOException {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    ProcedureProtos.ProcedureStoreTracker.Builder builder =<a name="line.476"></a>
+<span class="sourceLineNo">477</span>        ProcedureProtos.ProcedureStoreTracker.newBuilder();<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.478"></a>
+<span class="sourceLineNo">479</span>      builder.addNode(entry.getValue().convert());<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    }<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    return builder.build();<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>
 
 
 


[03/11] hbase-site git commit: Published site at 405bf5e6383a09f435baadbac6c389e9f6c43ac6.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/testdevapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-frame.html b/testdevapidocs/allclasses-frame.html
index ecc8a40..31516e6 100644
--- a/testdevapidocs/allclasses-frame.html
+++ b/testdevapidocs/allclasses-frame.html
@@ -1385,6 +1385,8 @@
 <li><a href="org/apache/hadoop/hbase/io/encoding/TestLoadAndSwitchEncodeOnDisk.html" title="class in org.apache.hadoop.hbase.io.encoding" target="classFrame">TestLoadAndSwitchEncodeOnDisk</a></li>
 <li><a href="org/apache/hadoop/hbase/tool/TestLoadIncrementalHFiles.html" title="class in org.apache.hadoop.hbase.tool" target="classFrame">TestLoadIncrementalHFiles</a></li>
 <li><a href="org/apache/hadoop/hbase/tool/TestLoadIncrementalHFilesSplitRecovery.html" title="class in org.apache.hadoop.hbase.tool" target="classFrame">TestLoadIncrementalHFilesSplitRecovery</a></li>
+<li><a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">TestLoadProcedureError</a></li>
+<li><a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html" title="class in org.apache.hadoop.hbase.master" target="classFrame">TestLoadProcedureError.TestProcedure</a></li>
 <li><a href="org/apache/hadoop/hbase/util/TestLoadTestKVGenerator.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestLoadTestKVGenerator</a></li>
 <li><a href="org/apache/hadoop/hbase/io/asyncfs/TestLocalAsyncOutput.html" title="class in org.apache.hadoop.hbase.io.asyncfs" target="classFrame">TestLocalAsyncOutput</a></li>
 <li><a href="org/apache/hadoop/hbase/TestLocalHBaseCluster.html" title="class in org.apache.hadoop.hbase" target="classFrame">TestLocalHBaseCluster</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/testdevapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-noframe.html b/testdevapidocs/allclasses-noframe.html
index fd679e1..349145b 100644
--- a/testdevapidocs/allclasses-noframe.html
+++ b/testdevapidocs/allclasses-noframe.html
@@ -1385,6 +1385,8 @@
 <li><a href="org/apache/hadoop/hbase/io/encoding/TestLoadAndSwitchEncodeOnDisk.html" title="class in org.apache.hadoop.hbase.io.encoding">TestLoadAndSwitchEncodeOnDisk</a></li>
 <li><a href="org/apache/hadoop/hbase/tool/TestLoadIncrementalHFiles.html" title="class in org.apache.hadoop.hbase.tool">TestLoadIncrementalHFiles</a></li>
 <li><a href="org/apache/hadoop/hbase/tool/TestLoadIncrementalHFilesSplitRecovery.html" title="class in org.apache.hadoop.hbase.tool">TestLoadIncrementalHFilesSplitRecovery</a></li>
+<li><a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError</a></li>
+<li><a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError.TestProcedure</a></li>
 <li><a href="org/apache/hadoop/hbase/util/TestLoadTestKVGenerator.html" title="class in org.apache.hadoop.hbase.util">TestLoadTestKVGenerator</a></li>
 <li><a href="org/apache/hadoop/hbase/io/asyncfs/TestLocalAsyncOutput.html" title="class in org.apache.hadoop.hbase.io.asyncfs">TestLocalAsyncOutput</a></li>
 <li><a href="org/apache/hadoop/hbase/TestLocalHBaseCluster.html" title="class in org.apache.hadoop.hbase">TestLocalHBaseCluster</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index 98b59e9..5f3d0f7 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -1241,6 +1241,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroupsKillRS.html#afterMethod--">afterMethod()</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroupsKillRS.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroupsKillRS</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html#afterReplay-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">afterReplay(MasterProcedureEnv)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError.TestProcedure</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/TestProcedureEvents.TestTimeoutEventProcedure.html#afterReplay-org.apache.hadoop.hbase.procedure2.TestProcedureEvents.TestProcEnv-">afterReplay(TestProcedureEvents.TestProcEnv)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/TestProcedureEvents.TestTimeoutEventProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureEvents.TestTimeoutEventProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.html#afterTestMethod--">afterTestMethod()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.html" title="class in org.apache.hadoop.hbase.regionserver">TestRegionServerMetrics</a></dt>
@@ -1450,6 +1452,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestCloseAnOpeningRegion.html#ARRIVE">ARRIVE</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestCloseAnOpeningRegion.html" title="class in org.apache.hadoop.hbase.master">TestCloseAnOpeningRegion</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html#ARRIVE">ARRIVE</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestShutdownBackupMaster.html#ARRIVE">ARRIVE</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestShutdownBackupMaster.html" title="class in org.apache.hadoop.hbase.master">TestShutdownBackupMaster</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestFlushLifeCycleTracker.html#ARRIVE">ARRIVE</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestFlushLifeCycleTracker.html" title="class in org.apache.hadoop.hbase.regionserver">TestFlushLifeCycleTracker</a></dt>
@@ -5391,6 +5395,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestHMasterRPCException.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestHMasterRPCException.html" title="class in org.apache.hadoop.hbase.master">TestHMasterRPCException</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMaster.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMaster.html" title="class in org.apache.hadoop.hbase.master">TestMaster</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterAbortAndRSGotKilled.html#CLASS_RULE">CLASS_RULE</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterAbortAndRSGotKilled.html" title="class in org.apache.hadoop.hbase.master">TestMasterAbortAndRSGotKilled</a></dt>
@@ -13680,6 +13686,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/TestSchedulerQueueDeadLock.TableSharedProcedure.html#execute-org.apache.hadoop.hbase.master.procedure.TestSchedulerQueueDeadLock.TestEnv-">execute(TestSchedulerQueueDeadLock.TestEnv)</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestSchedulerQueueDeadLock.TableSharedProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestSchedulerQueueDeadLock.TableSharedProcedure</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html#execute-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">execute(MasterProcedureEnv)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError.TestProcedure</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure/SimpleRSProcedureManager.SimpleSubprocedure.html#execute--">execute()</a></span> - Method in class org.apache.hadoop.hbase.procedure.<a href="org/apache/hadoop/hbase/procedure/SimpleRSProcedureManager.SimpleSubprocedure.html" title="class in org.apache.hadoop.hbase.procedure">SimpleRSProcedureManager.SimpleSubprocedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure/TestProcedureDescriber.TestProcedure.html#execute-java.lang.Object-">execute(Object)</a></span> - Method in class org.apache.hadoop.hbase.procedure.<a href="org/apache/hadoop/hbase/procedure/TestProcedureDescriber.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure">TestProcedureDescriber.TestProcedure</a></dt>
@@ -14079,6 +14087,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestStoreFileRefresherChore.FailingHRegionFileSystem.html#fail">fail</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestStoreFileRefresherChore.FailingHRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">TestStoreFileRefresherChore.FailingHRegionFileSystem</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html#FAIL_LOAD">FAIL_LOAD</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestMultiVersionConcurrencyControl.Writer.html#failed">failed</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestMultiVersionConcurrencyControl.Writer.html" title="class in org.apache.hadoop.hbase.regionserver">TestMultiVersionConcurrencyControl.Writer</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestOpenSeqNumUnexpectedIncrease.html#FAILED_OPEN">FAILED_OPEN</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestOpenSeqNumUnexpectedIncrease.html" title="class in org.apache.hadoop.hbase.regionserver">TestOpenSeqNumUnexpectedIncrease</a></dt>
@@ -15133,6 +15143,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestHBaseFsckEncryption.html#findStorefilePaths-org.apache.hadoop.hbase.TableName-">findStorefilePaths(TableName)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestHBaseFsckEncryption.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckEncryption</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html#FINISH_PROC">FINISH_PROC</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html#FINISH_RS_REPORT">FINISH_RS_REPORT</a></span> - Static variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TestReportOnlineRegionsRace.html" title="class in org.apache.hadoop.hbase.master.assignment">TestReportOnlineRegionsRace</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestCompaction.StoreMockMaker.html#finishCompaction-java.util.List-">finishCompaction(List&lt;HStoreFile&gt;)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestCompaction.StoreMockMaker.html" title="class in org.apache.hadoop.hbase.regionserver">TestCompaction.StoreMockMaker</a></dt>
@@ -19453,6 +19465,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/TestSchedulerQueueDeadLock.TableSharedProcedure.html#getTableName--">getTableName()</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestSchedulerQueueDeadLock.TableSharedProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestSchedulerQueueDeadLock.TableSharedProcedure</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html#getTableName--">getTableName()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError.TestProcedure</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html#getTableName--">getTableName()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperStub.html#getTableName--">getTableName()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperStub.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionWrapperStub</a></dt>
@@ -19501,6 +19515,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/TestSchedulerQueueDeadLock.TableSharedProcedure.html#getTableOperationType--">getTableOperationType()</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestSchedulerQueueDeadLock.TableSharedProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestSchedulerQueueDeadLock.TableSharedProcedure</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html#getTableOperationType--">getTableOperationType()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError.TestProcedure</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/access/TestAccessController.TestTableDDLProcedure.html#getTableOperationType--">getTableOperationType()</a></span> - Method in class org.apache.hadoop.hbase.security.access.<a href="org/apache/hadoop/hbase/security/access/TestAccessController.TestTableDDLProcedure.html" title="class in org.apache.hadoop.hbase.security.access">TestAccessController.TestTableDDLProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html#getTableRegionMap--">getTableRegionMap()</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/TestRSGroupsBase.html" title="class in org.apache.hadoop.hbase.rsgroup">TestRSGroupsBase</a></dt>
@@ -27487,6 +27503,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestCatalogJanitorInMemoryStates.html#name">name</a></span> - Variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestCatalogJanitorInMemoryStates.html" title="class in org.apache.hadoop.hbase.master">TestCatalogJanitorInMemoryStates</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html#NAME">NAME</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMaster.html#name">name</a></span> - Variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMaster.html" title="class in org.apache.hadoop.hbase.master">TestMaster</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterFailover.html#name">name</a></span> - Variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterFailover.html" title="class in org.apache.hadoop.hbase.master">TestMasterFailover</a></dt>
@@ -37504,6 +37522,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TimeOffsetEnvironmentEdge.html#setTimeOffset-long-">setTimeOffset(long)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TimeOffsetEnvironmentEdge.html" title="class in org.apache.hadoop.hbase.util">TimeOffsetEnvironmentEdge</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html#setTimeoutFailure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">setTimeoutFailure(MasterProcedureEnv)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError.TestProcedure</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/TestProcedureBypass.WaitingTimeoutProcedure.html#setTimeoutFailure-org.apache.hadoop.hbase.procedure2.TestProcedureBypass.TestProcEnv-">setTimeoutFailure(TestProcedureBypass.TestProcEnv)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/TestProcedureBypass.WaitingTimeoutProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureBypass.WaitingTimeoutProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/TestProcedureEvents.TestTimeoutEventProcedure.html#setTimeoutFailure-org.apache.hadoop.hbase.procedure2.TestProcedureEvents.TestProcEnv-">setTimeoutFailure(TestProcedureEvents.TestProcEnv)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/TestProcedureEvents.TestTimeoutEventProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">TestProcedureEvents.TestTimeoutEventProcedure</a></dt>
@@ -37981,6 +38001,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestHMasterRPCException.html#setUp--">setUp()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestHMasterRPCException.html" title="class in org.apache.hadoop.hbase.master">TestHMasterRPCException</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html#setUp--">setUp()</a></span> - Static method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterAbortAndRSGotKilled.html#setUp--">setUp()</a></span> - Static method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterAbortAndRSGotKilled.html" title="class in org.apache.hadoop.hbase.master">TestMasterAbortAndRSGotKilled</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterCoprocessorServices.html#setup--">setup()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterCoprocessorServices.html" title="class in org.apache.hadoop.hbase.master">TestMasterCoprocessorServices</a></dt>
@@ -43485,6 +43507,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestHMasterRPCException.html#tearDown--">tearDown()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestHMasterRPCException.html" title="class in org.apache.hadoop.hbase.master">TestHMasterRPCException</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html#tearDown--">tearDown()</a></span> - Static method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterAbortAndRSGotKilled.html#tearDown--">tearDown()</a></span> - Static method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterAbortAndRSGotKilled.html" title="class in org.apache.hadoop.hbase.master">TestMasterAbortAndRSGotKilled</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterMetricsWrapper.html#teardown--">teardown()</a></span> - Static method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterMetricsWrapper.html" title="class in org.apache.hadoop.hbase.master">TestMasterMetricsWrapper</a></dt>
@@ -55161,6 +55185,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestDynamicClassLoader.html#testLoadClassFromLocalPathWithDynamicDirOff--">testLoadClassFromLocalPathWithDynamicDirOff()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestDynamicClassLoader.html" title="class in org.apache.hadoop.hbase.util">TestDynamicClassLoader</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html#testLoadError--">testLoadError()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestStripeStoreFileManager.html#testLoadFilesAfterSplit--">testLoadFilesAfterSplit()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestStripeStoreFileManager.html" title="class in org.apache.hadoop.hbase.regionserver">TestStripeStoreFileManager</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestStripeStoreFileManager.html#testLoadFilesWithBadStripe--">testLoadFilesWithBadStripe()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestStripeStoreFileManager.html" title="class in org.apache.hadoop.hbase.regionserver">TestStripeStoreFileManager</a></dt>
@@ -55188,6 +55214,14 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/metrics/TestMetricRegistriesLoader.html#testLoadMultipleInstances--">testLoadMultipleInstances()</a></span> - Method in class org.apache.hadoop.hbase.metrics.<a href="org/apache/hadoop/hbase/metrics/TestMetricRegistriesLoader.html" title="class in org.apache.hadoop.hbase.metrics">TestMetricRegistriesLoader</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestLoadProcedureError</span></a> - Class in <a href="org/apache/hadoop/hbase/master/package-summary.html">org.apache.hadoop.hbase.master</a></dt>
+<dd>
+<div class="block">Testcase for HBASE-21490.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html#TestLoadProcedureError--">TestLoadProcedureError()</a></span> - Constructor for class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">TestLoadProcedureError.TestProcedure</span></a> - Class in <a href="org/apache/hadoop/hbase/master/package-summary.html">org.apache.hadoop.hbase.master</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/metrics/TestMetricRegistriesLoader.html#testLoadSinleInstance--">testLoadSinleInstance()</a></span> - Method in class org.apache.hadoop.hbase.metrics.<a href="org/apache/hadoop/hbase/metrics/TestMetricRegistriesLoader.html" title="class in org.apache.hadoop.hbase.metrics">TestMetricRegistriesLoader</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/util/TestLoadTestKVGenerator.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">TestLoadTestKVGenerator</span></a> - Class in <a href="org/apache/hadoop/hbase/util/package-summary.html">org.apache.hadoop.hbase.util</a></dt>
@@ -58710,6 +58744,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestClassLoading.html#testPrivateClassLoader--">testPrivateClassLoader()</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestClassLoading.html" title="class in org.apache.hadoop.hbase.coprocessor">TestClassLoading</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html#TestProcedure--">TestProcedure()</a></span> - Constructor for class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.TestProcedure.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError.TestProcedure</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/procedure/TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedure</span></a> - Class in <a href="org/apache/hadoop/hbase/procedure/package-summary.html">org.apache.hadoop.hbase.procedure</a></dt>
 <dd>
 <div class="block">Demonstrate how Procedure handles single members, multiple members, and errors semantics</div>
@@ -68875,6 +68911,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestCloseAnOpeningRegion.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestCloseAnOpeningRegion.html" title="class in org.apache.hadoop.hbase.master">TestCloseAnOpeningRegion</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterAbortAndRSGotKilled.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterAbortAndRSGotKilled.html" title="class in org.apache.hadoop.hbase.master">TestMasterAbortAndRSGotKilled</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestMasterFileSystem.html#UTIL">UTIL</a></span> - Static variable in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestMasterFileSystem.html" title="class in org.apache.hadoop.hbase.master">TestMasterFileSystem</a></dt>
@@ -70949,6 +70987,8 @@ the order they are declared.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/quotas/TestQuotaThrottle.html#waitMinuteQuota--">waitMinuteQuota()</a></span> - Method in class org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/TestQuotaThrottle.html" title="class in org.apache.hadoop.hbase.quotas">TestQuotaThrottle</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html#waitNoMaster--">waitNoMaster()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestLoadProcedureError.html" title="class in org.apache.hadoop.hbase.master">TestLoadProcedureError</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.html#waitNoProcedureRunning-org.apache.hadoop.hbase.procedure2.ProcedureExecutor-">waitNoProcedureRunning(ProcedureExecutor&lt;TEnv&gt;)</a></span> - Static method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureTestingUtility</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestRegionRebalancing.html#waitOnCrashProcessing--">waitOnCrashProcessing()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestRegionRebalancing.html" title="class in org.apache.hadoop.hbase">TestRegionRebalancing</a></dt>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
index ffa988b..b8100d8 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseClassTestRule.html
@@ -3453,30 +3453,34 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestMasterOperationsForRegionReplicas.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestLoadProcedureError.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestGetReplicationLoad.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestGetReplicationLoad.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMasterOperationsForRegionReplicas.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestMasterBalanceThrottling.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterBalanceThrottling.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestGetReplicationLoad.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestGetReplicationLoad.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestMasterFileSystemWithWALDir.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterFileSystemWithWALDir.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMasterBalanceThrottling.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterBalanceThrottling.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestMetaAssignmentWithStopMaster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMasterFileSystemWithWALDir.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterFileSystemWithWALDir.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestMirroringTableStateManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMirroringTableStateManager.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestMetaAssignmentWithStopMaster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TestMirroringTableStateManager.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMirroringTableStateManager.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMasterMetricsWrapper.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterMetricsWrapper.html#CLASS_RULE">CLASS_RULE</a></span></code>&nbsp;</td>
 </tr>
 </tbody>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
index 5ceb409..33bb1b1 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/class-use/HBaseTestingUtility.html
@@ -2185,10 +2185,14 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
-<td class="colLast"><span class="typeNameLabel">TestMasterFileSystemWithWALDir.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterFileSystemWithWALDir.html#UTIL">UTIL</a></span></code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">TestLoadProcedureError.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TestMasterFileSystemWithWALDir.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMasterFileSystemWithWALDir.html#UTIL">UTIL</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></code></td>
 <td class="colLast"><span class="typeNameLabel">TestMetaAssignmentWithStopMaster.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/TestMetaAssignmentWithStopMaster.html#UTIL">UTIL</a></span></code>&nbsp;</td>
 </tr>
 </tbody>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/testdevapidocs/org/apache/hadoop/hbase/master/TestHMasterRPCException.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/TestHMasterRPCException.html b/testdevapidocs/org/apache/hadoop/hbase/master/TestHMasterRPCException.html
index 1bf2525..0874623 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/TestHMasterRPCException.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/TestHMasterRPCException.html
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/master/TestHMasterCommandLine.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/master/TestMaster.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/master/TestHMasterRPCException.html" target="_top">Frames</a></li>
@@ -360,7 +360,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/master/TestHMasterCommandLine.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/master/TestMaster.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/master/TestLoadProcedureError.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/master/TestHMasterRPCException.html" target="_top">Frames</a></li>


[09/11] hbase-site git commit: Published site at 405bf5e6383a09f435baadbac6c389e9f6c43ac6.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/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 5fc97ee..2cc0fc9 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
@@ -282,212 +282,213 @@
 <span class="sourceLineNo">274</span>    this.keepDeletes = false;<a name="line.274"></a>
 <span class="sourceLineNo">275</span>    this.partial = false;<a name="line.275"></a>
 <span class="sourceLineNo">276</span>    this.map.clear();<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    resetModified();<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  public boolean isModified(long procId) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    final Map.Entry&lt;Long, BitSetNode&gt; entry = map.floorEntry(procId);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    return entry != null &amp;&amp; entry.getValue().contains(procId) &amp;&amp;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      entry.getValue().isModified(procId);<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>   * If {@link #partial} is false, returns state from the bitmap. If no state is found for<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * {@code procId}, returns YES.<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * If partial is true, tracker doesn't have complete view of system state, so it returns MAYBE<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   * if there is no update for the procedure or if it doesn't have a state in bitmap. Otherwise,<a name="line.290"></a>
-<span class="sourceLineNo">291</span>   * returns state from the bitmap.<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   */<a name="line.292"></a>
-<span class="sourceLineNo">293</span>  public DeleteState isDeleted(long procId) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    Map.Entry&lt;Long, BitSetNode&gt; entry = map.floorEntry(procId);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    if (entry != null &amp;&amp; entry.getValue().contains(procId)) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      BitSetNode node = entry.getValue();<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      DeleteState state = node.isDeleted(procId);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      return partial &amp;&amp; !node.isModified(procId) ? DeleteState.MAYBE : state;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    return partial ? DeleteState.MAYBE : DeleteState.YES;<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>  public long getActiveMinProcId() {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    Map.Entry&lt;Long, BitSetNode&gt; entry = map.firstEntry();<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    return entry == null ? Procedure.NO_PROC_ID : entry.getValue().getActiveMinProcId();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>  public void setKeepDeletes(boolean keepDeletes) {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    this.keepDeletes = keepDeletes;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    // If not to keep deletes, remove the BitSetNodes which are empty (i.e. contains ids of deleted<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    // procedures).<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    if (!keepDeletes) {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      Iterator&lt;Map.Entry&lt;Long, BitSetNode&gt;&gt; it = map.entrySet().iterator();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      while (it.hasNext()) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        Map.Entry&lt;Long, BitSetNode&gt; entry = it.next();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>        if (entry.getValue().isEmpty()) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>          it.remove();<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    }<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  }<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span>  public boolean isPartial() {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    return partial;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  }<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span>  public void setPartialFlag(boolean isPartial) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    if (this.partial &amp;&amp; !isPartial) {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        entry.getValue().unsetPartialFlag();<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>    this.partial = isPartial;<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>   * @return true, if no procedure is active, else false.<a name="line.337"></a>
-<span class="sourceLineNo">338</span>   */<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  public boolean isEmpty() {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      if (!entry.getValue().isEmpty()) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        return false;<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>    return true;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>  }<a name="line.346"></a>
-<span class="sourceLineNo">347</span><a name="line.347"></a>
-<span class="sourceLineNo">348</span>  /**<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * @return true if all procedure was modified or deleted since last call to<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   *         {@link #resetModified()}.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   */<a name="line.351"></a>
-<span class="sourceLineNo">352</span>  public boolean isAllModified() {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (!entry.getValue().isAllModified()) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        return false;<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>    return true;<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>   * Will be used when there are too many proc wal files. We will rewrite the states of the active<a name="line.362"></a>
-<span class="sourceLineNo">363</span>   * procedures in the oldest proc wal file so that we can delete it.<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * @return all the active procedure ids in this tracker.<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   */<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  public long[] getAllActiveProcIds() {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    return map.values().stream().map(BitSetNode::getActiveProcIds).filter(p -&gt; p.length &gt; 0)<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      .flatMapToLong(LongStream::of).toArray();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  }<a name="line.369"></a>
-<span class="sourceLineNo">370</span><a name="line.370"></a>
-<span class="sourceLineNo">371</span>  /**<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   * Clears the list of updated procedure ids. This doesn't affect global list of active<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * procedure ids.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   */<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  public void resetModified() {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      entry.getValue().resetModified();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    }<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    minModifiedProcId = Long.MAX_VALUE;<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    maxModifiedProcId = Long.MIN_VALUE;<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>  private BitSetNode getOrCreateNode(long procId) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    // If procId can fit in left node (directly or by growing it)<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    BitSetNode leftNode = null;<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    boolean leftCanGrow = false;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    Map.Entry&lt;Long, BitSetNode&gt; leftEntry = map.floorEntry(procId);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    if (leftEntry != null) {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      leftNode = leftEntry.getValue();<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      if (leftNode.contains(procId)) {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        return leftNode;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      }<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      leftCanGrow = leftNode.canGrow(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>    // If procId can fit in right node (directly or by growing it)<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    BitSetNode rightNode = null;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    boolean rightCanGrow = false;<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    Map.Entry&lt;Long, BitSetNode&gt; rightEntry = map.ceilingEntry(procId);<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    if (rightEntry != null) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      rightNode = rightEntry.getValue();<a name="line.401"></a>
-<span class="sourceLineNo">402</span>      rightCanGrow = rightNode.canGrow(procId);<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      if (leftNode != null) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        if (leftNode.canMerge(rightNode)) {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>          // merge left and right node<a name="line.405"></a>
-<span class="sourceLineNo">406</span>          return mergeNodes(leftNode, rightNode);<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>        // If left and right nodes can not merge, decide which one to grow.<a name="line.409"></a>
-<span class="sourceLineNo">410</span>        if (leftCanGrow &amp;&amp; rightCanGrow) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>          if ((procId - leftNode.getEnd()) &lt;= (rightNode.getStart() - procId)) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>            return growNode(leftNode, procId);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>          }<a name="line.413"></a>
-<span class="sourceLineNo">414</span>          return growNode(rightNode, procId);<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>    }<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>    // grow the left node<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    if (leftCanGrow) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      return growNode(leftNode, procId);<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>    // grow the right node<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    if (rightCanGrow) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      return growNode(rightNode, procId);<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    }<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // add new node if there are no left/right nodes which can be used.<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    BitSetNode node = new BitSetNode(procId, partial);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    map.put(node.getStart(), node);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    return node;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  }<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span>  /**<a name="line.435"></a>
-<span class="sourceLineNo">436</span>   * Grows {@code node} to contain {@code procId} and updates the map.<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   * @return {@link BitSetNode} instance which contains {@code procId}.<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   */<a name="line.438"></a>
-<span class="sourceLineNo">439</span>  private BitSetNode growNode(BitSetNode node, long procId) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    map.remove(node.getStart());<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    node.grow(procId);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    map.put(node.getStart(), node);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    return node;<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>  /**<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * Merges {@code leftNode} &amp; {@code rightNode} and updates the map.<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   */<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private BitSetNode mergeNodes(BitSetNode leftNode, BitSetNode rightNode) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    assert leftNode.getStart() &lt; rightNode.getStart();<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    leftNode.merge(rightNode);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    map.remove(rightNode.getStart());<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    return leftNode;<a name="line.453"></a>
-<span class="sourceLineNo">454</span>  }<a name="line.454"></a>
-<span class="sourceLineNo">455</span><a name="line.455"></a>
-<span class="sourceLineNo">456</span>  public void dump() {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    System.out.println("map " + map.size());<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    System.out.println("isAllModified " + isAllModified());<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    System.out.println("isEmpty " + isEmpty());<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      entry.getValue().dump();<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>  }<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>  //  Convert to/from Protocol Buffer.<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  // ========================================================================<a name="line.467"></a>
-<span class="sourceLineNo">468</span><a name="line.468"></a>
-<span class="sourceLineNo">469</span>  /**<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * Builds<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   * org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureStoreTracker<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * protocol buffer from current state.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   */<a name="line.473"></a>
-<span class="sourceLineNo">474</span>  public ProcedureProtos.ProcedureStoreTracker toProto() throws IOException {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    ProcedureProtos.ProcedureStoreTracker.Builder builder =<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        ProcedureProtos.ProcedureStoreTracker.newBuilder();<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      builder.addNode(entry.getValue().convert());<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    }<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    return builder.build();<a name="line.480"></a>
-<span class="sourceLineNo">481</span>  }<a name="line.481"></a>
-<span class="sourceLineNo">482</span>}<a name="line.482"></a>
+<span class="sourceLineNo">277</span>    minModifiedProcId = Long.MAX_VALUE;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    maxModifiedProcId = Long.MIN_VALUE;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>  }<a name="line.279"></a>
+<span class="sourceLineNo">280</span><a name="line.280"></a>
+<span class="sourceLineNo">281</span>  public boolean isModified(long procId) {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    final Map.Entry&lt;Long, BitSetNode&gt; entry = map.floorEntry(procId);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    return entry != null &amp;&amp; entry.getValue().contains(procId) &amp;&amp;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      entry.getValue().isModified(procId);<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>  /**<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * If {@link #partial} is false, returns state from the bitmap. If no state is found for<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   * {@code procId}, returns YES.<a name="line.289"></a>
+<span class="sourceLineNo">290</span>   * If partial is true, tracker doesn't have complete view of system state, so it returns MAYBE<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   * if there is no update for the procedure or if it doesn't have a state in bitmap. Otherwise,<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * returns state from the bitmap.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   */<a name="line.293"></a>
+<span class="sourceLineNo">294</span>  public DeleteState isDeleted(long procId) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    Map.Entry&lt;Long, BitSetNode&gt; entry = map.floorEntry(procId);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    if (entry != null &amp;&amp; entry.getValue().contains(procId)) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      BitSetNode node = entry.getValue();<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      DeleteState state = node.isDeleted(procId);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      return partial &amp;&amp; !node.isModified(procId) ? DeleteState.MAYBE : state;<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    return partial ? DeleteState.MAYBE : DeleteState.YES;<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>  public long getActiveMinProcId() {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    Map.Entry&lt;Long, BitSetNode&gt; entry = map.firstEntry();<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    return entry == null ? Procedure.NO_PROC_ID : entry.getValue().getActiveMinProcId();<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  }<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span>  public void setKeepDeletes(boolean keepDeletes) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    this.keepDeletes = keepDeletes;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    // If not to keep deletes, remove the BitSetNodes which are empty (i.e. contains ids of deleted<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    // procedures).<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    if (!keepDeletes) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      Iterator&lt;Map.Entry&lt;Long, BitSetNode&gt;&gt; it = map.entrySet().iterator();<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      while (it.hasNext()) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        Map.Entry&lt;Long, BitSetNode&gt; entry = it.next();<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        if (entry.getValue().isEmpty()) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>          it.remove();<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      }<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>  }<a name="line.322"></a>
+<span class="sourceLineNo">323</span><a name="line.323"></a>
+<span class="sourceLineNo">324</span>  public boolean isPartial() {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    return partial;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  }<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>  public void setPartialFlag(boolean isPartial) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    if (this.partial &amp;&amp; !isPartial) {<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>        entry.getValue().unsetPartialFlag();<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>    this.partial = isPartial;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>  /**<a name="line.337"></a>
+<span class="sourceLineNo">338</span>   * @return true, if no procedure is active, else false.<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   */<a name="line.339"></a>
+<span class="sourceLineNo">340</span>  public boolean isEmpty() {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      if (!entry.getValue().isEmpty()) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        return false;<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>    return true;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span>  /**<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * @return true if all procedure was modified or deleted since last call to<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   *         {@link #resetModified()}.<a name="line.351"></a>
+<span class="sourceLineNo">352</span>   */<a name="line.352"></a>
+<span class="sourceLineNo">353</span>  public boolean isAllModified() {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      if (!entry.getValue().isAllModified()) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        return false;<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>    return true;<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>  /**<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   * Will be used when there are too many proc wal files. We will rewrite the states of the active<a name="line.363"></a>
+<span class="sourceLineNo">364</span>   * procedures in the oldest proc wal file so that we can delete it.<a name="line.364"></a>
+<span class="sourceLineNo">365</span>   * @return all the active procedure ids in this tracker.<a name="line.365"></a>
+<span class="sourceLineNo">366</span>   */<a name="line.366"></a>
+<span class="sourceLineNo">367</span>  public long[] getAllActiveProcIds() {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    return map.values().stream().map(BitSetNode::getActiveProcIds).filter(p -&gt; p.length &gt; 0)<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      .flatMapToLong(LongStream::of).toArray();<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>  /**<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   * Clears the list of updated procedure ids. This doesn't affect global list of active<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * procedure ids.<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   */<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  public void resetModified() {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      entry.getValue().resetModified();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    minModifiedProcId = Long.MAX_VALUE;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    maxModifiedProcId = Long.MIN_VALUE;<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>  private BitSetNode getOrCreateNode(long procId) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    // If procId can fit in left node (directly or by growing it)<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    BitSetNode leftNode = null;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    boolean leftCanGrow = false;<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    Map.Entry&lt;Long, BitSetNode&gt; leftEntry = map.floorEntry(procId);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    if (leftEntry != null) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      leftNode = leftEntry.getValue();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      if (leftNode.contains(procId)) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>        return leftNode;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      }<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      leftCanGrow = leftNode.canGrow(procId);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    }<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span>    // If procId can fit in right node (directly or by growing it)<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    BitSetNode rightNode = null;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    boolean rightCanGrow = false;<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    Map.Entry&lt;Long, BitSetNode&gt; rightEntry = map.ceilingEntry(procId);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    if (rightEntry != null) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      rightNode = rightEntry.getValue();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      rightCanGrow = rightNode.canGrow(procId);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      if (leftNode != null) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        if (leftNode.canMerge(rightNode)) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          // merge left and right node<a name="line.406"></a>
+<span class="sourceLineNo">407</span>          return mergeNodes(leftNode, rightNode);<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>        // If left and right nodes can not merge, decide which one to grow.<a name="line.410"></a>
+<span class="sourceLineNo">411</span>        if (leftCanGrow &amp;&amp; rightCanGrow) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>          if ((procId - leftNode.getEnd()) &lt;= (rightNode.getStart() - procId)) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>            return growNode(leftNode, procId);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>          }<a name="line.414"></a>
+<span class="sourceLineNo">415</span>          return growNode(rightNode, procId);<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>    // grow the left node<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    if (leftCanGrow) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      return growNode(leftNode, procId);<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>    // grow the right node<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    if (rightCanGrow) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      return growNode(rightNode, procId);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>    // add new node if there are no left/right nodes which can be used.<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    BitSetNode node = new BitSetNode(procId, partial);<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    map.put(node.getStart(), node);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    return node;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>  }<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>  /**<a name="line.436"></a>
+<span class="sourceLineNo">437</span>   * Grows {@code node} to contain {@code procId} and updates the map.<a name="line.437"></a>
+<span class="sourceLineNo">438</span>   * @return {@link BitSetNode} instance which contains {@code procId}.<a name="line.438"></a>
+<span class="sourceLineNo">439</span>   */<a name="line.439"></a>
+<span class="sourceLineNo">440</span>  private BitSetNode growNode(BitSetNode node, long procId) {<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    map.remove(node.getStart());<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    node.grow(procId);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    map.put(node.getStart(), node);<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    return node;<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>  /**<a name="line.447"></a>
+<span class="sourceLineNo">448</span>   * Merges {@code leftNode} &amp; {@code rightNode} and updates the map.<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   */<a name="line.449"></a>
+<span class="sourceLineNo">450</span>  private BitSetNode mergeNodes(BitSetNode leftNode, BitSetNode rightNode) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    assert leftNode.getStart() &lt; rightNode.getStart();<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    leftNode.merge(rightNode);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    map.remove(rightNode.getStart());<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    return leftNode;<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 dump() {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    System.out.println("map " + map.size());<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    System.out.println("isAllModified " + isAllModified());<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    System.out.println("isEmpty " + isEmpty());<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      entry.getValue().dump();<a name="line.462"></a>
+<span class="sourceLineNo">463</span>    }<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>  //  Convert to/from Protocol Buffer.<a name="line.467"></a>
+<span class="sourceLineNo">468</span>  // ========================================================================<a name="line.468"></a>
+<span class="sourceLineNo">469</span><a name="line.469"></a>
+<span class="sourceLineNo">470</span>  /**<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * Builds<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   * org.apache.hadoop.hbase.protobuf.generated.ProcedureProtos.ProcedureStoreTracker<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   * protocol buffer from current state.<a name="line.473"></a>
+<span class="sourceLineNo">474</span>   */<a name="line.474"></a>
+<span class="sourceLineNo">475</span>  public ProcedureProtos.ProcedureStoreTracker toProto() throws IOException {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    ProcedureProtos.ProcedureStoreTracker.Builder builder =<a name="line.476"></a>
+<span class="sourceLineNo">477</span>        ProcedureProtos.ProcedureStoreTracker.newBuilder();<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    for (Map.Entry&lt;Long, BitSetNode&gt; entry : map.entrySet()) {<a name="line.478"></a>
+<span class="sourceLineNo">479</span>      builder.addNode(entry.getValue().convert());<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    }<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    return builder.build();<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/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 257263c..7a81ab8 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
@@ -96,183 +96,180 @@
 <span class="sourceLineNo">088</span>      Loader loader) throws IOException {<a name="line.88"></a>
 <span class="sourceLineNo">089</span>    ProcedureWALFormatReader reader = new ProcedureWALFormatReader(tracker, loader);<a name="line.89"></a>
 <span class="sourceLineNo">090</span>    tracker.setKeepDeletes(true);<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    try {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      // Ignore the last log which is current active log.<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      while (logs.hasNext()) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>        ProcedureWALFile log = logs.next();<a name="line.94"></a>
-<span class="sourceLineNo">095</span>        log.open();<a name="line.95"></a>
-<span class="sourceLineNo">096</span>        try {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>          reader.read(log);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        } finally {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>          log.close();<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>      reader.finish();<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>      // The tracker is now updated with all the procedures read from the logs<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      if (tracker.isPartial()) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>        tracker.setPartialFlag(false);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      }<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      tracker.resetModified();<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    } finally {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      tracker.setKeepDeletes(false);<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>  public static void writeHeader(OutputStream stream, ProcedureWALHeader header)<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      throws IOException {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    header.writeDelimitedTo(stream);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  /*<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   * +-----------------+<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * | END OF WAL DATA | &lt;---+<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>   * |     Tracker     |     |<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>   * |     version     |     |<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   * +-----------------+     |<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   * |  TRAILER_MAGIC  |     |<a name="line.129"></a>
-<span class="sourceLineNo">130</span>   * +-----------------+     |<a name="line.130"></a>
-<span class="sourceLineNo">131</span>   * |      offset     |-----+<a name="line.131"></a>
-<span class="sourceLineNo">132</span>   * +-----------------+<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   */<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  public static long writeTrailer(FSDataOutputStream stream, ProcedureStoreTracker tracker)<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      throws IOException {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    long offset = stream.getPos();<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>    // Write EOF Entry<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    ProcedureWALEntry.newBuilder()<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      .setType(ProcedureWALEntry.Type.PROCEDURE_WAL_EOF)<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      .build().writeDelimitedTo(stream);<a name="line.141"></a>
+<span class="sourceLineNo">091</span>    // Ignore the last log which is current active log.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    while (logs.hasNext()) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      ProcedureWALFile log = logs.next();<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      log.open();<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      try {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>        reader.read(log);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      } finally {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>        log.close();<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>    reader.finish();<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>    // The tracker is now updated with all the procedures read from the logs<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    if (tracker.isPartial()) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      tracker.setPartialFlag(false);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    tracker.resetModified();<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    tracker.setKeepDeletes(false);<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>  public static void writeHeader(OutputStream stream, ProcedureWALHeader header)<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      throws IOException {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    header.writeDelimitedTo(stream);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  }<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  /*<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * +-----------------+<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * | END OF WAL DATA | &lt;---+<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * +-----------------+     |<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * |                 |     |<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * |     Tracker     |     |<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>   * |     version     |     |<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * +-----------------+     |<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   * |  TRAILER_MAGIC  |     |<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   * +-----------------+     |<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * |      offset     |-----+<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 static long writeTrailer(FSDataOutputStream stream, ProcedureStoreTracker tracker)<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      throws IOException {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    long offset = stream.getPos();<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span>    // Write EOF Entry<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    ProcedureWALEntry.newBuilder()<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      .setType(ProcedureWALEntry.Type.PROCEDURE_WAL_EOF)<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      .build().writeDelimitedTo(stream);<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span>    // Write Tracker<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    tracker.toProto().writeDelimitedTo(stream);<a name="line.141"></a>
 <span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>    // Write Tracker<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    tracker.toProto().writeDelimitedTo(stream);<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>    stream.write(TRAILER_VERSION);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    StreamUtils.writeLong(stream, TRAILER_MAGIC);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    StreamUtils.writeLong(stream, offset);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    return stream.getPos() - offset;<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 static ProcedureWALHeader readHeader(InputStream stream)<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      throws IOException {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    ProcedureWALHeader header;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    try {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      header = ProcedureWALHeader.parseDelimitedFrom(stream);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    } catch (InvalidProtocolBufferException e) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      throw new InvalidWALDataException(e);<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>    if (header == null) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      throw new InvalidWALDataException("No data available to read the Header");<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>    if (header.getVersion() &lt; 0 || header.getVersion() != HEADER_VERSION) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      throw new InvalidWALDataException("Invalid Header version. got " + header.getVersion() +<a name="line.166"></a>
-<span class="sourceLineNo">167</span>          " expected " + HEADER_VERSION);<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 (header.getType() &lt; 0 || header.getType() &gt; LOG_TYPE_MAX_VALID) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      throw new InvalidWALDataException("Invalid header type. got " + header.getType());<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    }<a name="line.172"></a>
+<span class="sourceLineNo">143</span>    stream.write(TRAILER_VERSION);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    StreamUtils.writeLong(stream, TRAILER_MAGIC);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    StreamUtils.writeLong(stream, offset);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    return stream.getPos() - offset;<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>  public static ProcedureWALHeader readHeader(InputStream stream)<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      throws IOException {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    ProcedureWALHeader header;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    try {<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      header = ProcedureWALHeader.parseDelimitedFrom(stream);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    } catch (InvalidProtocolBufferException e) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      throw new InvalidWALDataException(e);<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>    if (header == null) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      throw new InvalidWALDataException("No data available to read the Header");<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>    if (header.getVersion() &lt; 0 || header.getVersion() != HEADER_VERSION) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      throw new InvalidWALDataException("Invalid Header version. got " + header.getVersion() +<a name="line.163"></a>
+<span class="sourceLineNo">164</span>          " expected " + HEADER_VERSION);<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 (header.getType() &lt; 0 || header.getType() &gt; LOG_TYPE_MAX_VALID) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      throw new InvalidWALDataException("Invalid header type. got " + header.getType());<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>    return header;<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>    return header;<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 static ProcedureWALTrailer readTrailer(FSDataInputStream stream, long startPos, long size)<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      throws IOException {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // Beginning of the Trailer Jump. 17 = 1 byte version + 8 byte magic + 8 byte offset<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    long trailerPos = size - 17;<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>    if (trailerPos &lt; startPos) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      throw new InvalidWALDataException("Missing trailer: size=" + size + " startPos=" + startPos);<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>    stream.seek(trailerPos);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    int version = stream.read();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    if (version != TRAILER_VERSION) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      throw new InvalidWALDataException("Invalid Trailer version. got " + version +<a name="line.189"></a>
-<span class="sourceLineNo">190</span>          " expected " + TRAILER_VERSION);<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>    long magic = StreamUtils.readLong(stream);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    if (magic != TRAILER_MAGIC) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      throw new InvalidWALDataException("Invalid Trailer magic. got " + magic +<a name="line.195"></a>
-<span class="sourceLineNo">196</span>          " expected " + TRAILER_MAGIC);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
+<span class="sourceLineNo">174</span>  public static ProcedureWALTrailer readTrailer(FSDataInputStream stream, long startPos, long size)<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      throws IOException {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    // Beginning of the Trailer Jump. 17 = 1 byte version + 8 byte magic + 8 byte offset<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    long trailerPos = size - 17;<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>    if (trailerPos &lt; startPos) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      throw new InvalidWALDataException("Missing trailer: size=" + size + " startPos=" + startPos);<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>    stream.seek(trailerPos);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    int version = stream.read();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    if (version != TRAILER_VERSION) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      throw new InvalidWALDataException("Invalid Trailer version. got " + version +<a name="line.186"></a>
+<span class="sourceLineNo">187</span>          " expected " + TRAILER_VERSION);<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>    long magic = StreamUtils.readLong(stream);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    if (magic != TRAILER_MAGIC) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      throw new InvalidWALDataException("Invalid Trailer magic. got " + magic +<a name="line.192"></a>
+<span class="sourceLineNo">193</span>          " expected " + TRAILER_MAGIC);<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>    long trailerOffset = StreamUtils.readLong(stream);<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    stream.seek(trailerOffset);<a name="line.197"></a>
 <span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>    long trailerOffset = StreamUtils.readLong(stream);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    stream.seek(trailerOffset);<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    ProcedureWALEntry entry = readEntry(stream);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    if (entry.getType() != ProcedureWALEntry.Type.PROCEDURE_WAL_EOF) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      throw new InvalidWALDataException("Invalid Trailer begin");<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>    ProcedureWALTrailer trailer = ProcedureWALTrailer.newBuilder()<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      .setVersion(version)<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      .setTrackerPos(stream.getPos())<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      .build();<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    return trailer;<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 static ProcedureWALEntry readEntry(InputStream stream) throws IOException {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    return ProcedureWALEntry.parseDelimitedFrom(stream);<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 static void writeEntry(ByteSlot slot, ProcedureWALEntry.Type type,<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs) throws IOException {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    final ProcedureWALEntry.Builder builder = ProcedureWALEntry.newBuilder();<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    builder.setType(type);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    builder.addProcedure(ProcedureUtil.convertToProtoProcedure(proc));<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    if (subprocs != null) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        builder.addProcedure(ProcedureUtil.convertToProtoProcedure(subprocs[i]));<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>    builder.build().writeDelimitedTo(slot);<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 static void writeInsert(ByteSlot slot, Procedure&lt;?&gt; proc)<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      throws IOException {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_INIT, proc, 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>  public static void writeInsert(ByteSlot slot, Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs)<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      throws IOException {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_INSERT, proc, subprocs);<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 static void writeUpdate(ByteSlot slot, Procedure&lt;?&gt; proc)<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      throws IOException {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_UPDATE, proc, null);<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>  public static void writeDelete(ByteSlot slot, long procId)<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      throws IOException {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    final ProcedureWALEntry.Builder builder = ProcedureWALEntry.newBuilder();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    builder.setType(ProcedureWALEntry.Type.PROCEDURE_WAL_DELETE);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    builder.setProcId(procId);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    builder.build().writeDelimitedTo(slot);<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>  public static void writeDelete(ByteSlot slot, Procedure&lt;?&gt; proc, long[] subprocs)<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      throws IOException {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    final ProcedureWALEntry.Builder builder = ProcedureWALEntry.newBuilder();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    builder.setType(ProcedureWALEntry.Type.PROCEDURE_WAL_DELETE);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    builder.setProcId(proc.getProcId());<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    if (subprocs != null) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      builder.addProcedure(ProcedureUtil.convertToProtoProcedure(proc));<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        builder.addChildId(subprocs[i]);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      }<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    builder.build().writeDelimitedTo(slot);<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">199</span>    ProcedureWALEntry entry = readEntry(stream);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    if (entry.getType() != ProcedureWALEntry.Type.PROCEDURE_WAL_EOF) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      throw new InvalidWALDataException("Invalid Trailer begin");<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>    ProcedureWALTrailer trailer = ProcedureWALTrailer.newBuilder()<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      .setVersion(version)<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      .setTrackerPos(stream.getPos())<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      .build();<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    return trailer;<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 static ProcedureWALEntry readEntry(InputStream stream) throws IOException {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    return ProcedureWALEntry.parseDelimitedFrom(stream);<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>  public static void writeEntry(ByteSlot slot, ProcedureWALEntry.Type type,<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs) throws IOException {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    final ProcedureWALEntry.Builder builder = ProcedureWALEntry.newBuilder();<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    builder.setType(type);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    builder.addProcedure(ProcedureUtil.convertToProtoProcedure(proc));<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    if (subprocs != null) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        builder.addProcedure(ProcedureUtil.convertToProtoProcedure(subprocs[i]));<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>    builder.build().writeDelimitedTo(slot);<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 static void writeInsert(ByteSlot slot, Procedure&lt;?&gt; proc)<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      throws IOException {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_INIT, proc, null);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  }<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>  public static void writeInsert(ByteSlot slot, Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs)<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      throws IOException {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_INSERT, proc, subprocs);<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>  public static void writeUpdate(ByteSlot slot, Procedure&lt;?&gt; proc)<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      throws IOException {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    writeEntry(slot, ProcedureWALEntry.Type.PROCEDURE_WAL_UPDATE, proc, null);<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, long procId)<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>
+<span class="sourceLineNo">247</span>    builder.setProcId(procId);<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    builder.build().writeDelimitedTo(slot);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  }<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span>  public static void writeDelete(ByteSlot slot, Procedure&lt;?&gt; proc, long[] subprocs)<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      throws IOException {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    final ProcedureWALEntry.Builder builder = ProcedureWALEntry.newBuilder();<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    builder.setType(ProcedureWALEntry.Type.PROCEDURE_WAL_DELETE);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    builder.setProcId(proc.getProcId());<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    if (subprocs != null) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      builder.addProcedure(ProcedureUtil.convertToProtoProcedure(proc));<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        builder.addChildId(subprocs[i]);<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>    builder.build().writeDelimitedTo(slot);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>}<a name="line.264"></a>
 
 
 


[04/11] hbase-site git commit: Published site at 405bf5e6383a09f435baadbac6c389e9f6c43ac6.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/c8b83ace/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 ab175b6..72a3459 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
@@ -456,969 +456,979 @@
 <span class="sourceLineNo">448</span>    lock.lock();<a name="line.448"></a>
 <span class="sourceLineNo">449</span>    try {<a name="line.449"></a>
 <span class="sourceLineNo">450</span>      if (logs.isEmpty()) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        throw new RuntimeException("recoverLease() must be called before loading data");<a name="line.451"></a>
+<span class="sourceLineNo">451</span>        throw new IllegalStateException("recoverLease() must be called before loading data");<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>      // Nothing to do, If we have only the current log.<a name="line.454"></a>
 <span class="sourceLineNo">455</span>      if (logs.size() == 1) {<a name="line.455"></a>
 <span class="sourceLineNo">456</span>        LOG.debug("No state logs to replay.");<a name="line.456"></a>
 <span class="sourceLineNo">457</span>        loader.setMaxProcId(0);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        return;<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>      // Load the old logs<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      Iterator&lt;ProcedureWALFile&gt; it = logs.descendingIterator();<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      it.next(); // Skip the current log<a name="line.463"></a>
-<span class="sourceLineNo">464</span><a name="line.464"></a>
-<span class="sourceLineNo">465</span>      ProcedureWALFormat.load(it, storeTracker, new ProcedureWALFormat.Loader() {<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>        @Override<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        public void setMaxProcId(long maxProcId) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>          loader.setMaxProcId(maxProcId);<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>        @Override<a name="line.472"></a>
-<span class="sourceLineNo">473</span>        public void load(ProcedureIterator procIter) throws IOException {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>          loader.load(procIter);<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>        @Override<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>          loader.handleCorrupted(procIter);<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>        @Override<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        public void markCorruptedWAL(ProcedureWALFile log, IOException e) {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>          if (corruptedLogs == null) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>            corruptedLogs = new HashSet&lt;&gt;();<a name="line.485"></a>
-<span class="sourceLineNo">486</span>          }<a name="line.486"></a>
-<span class="sourceLineNo">487</span>          corruptedLogs.add(log);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>          // TODO: sideline corrupted log<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>    } finally {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      try {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        // try to cleanup inactive wals and complete the operation<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        buildHoldingCleanupTracker();<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        tryCleanupLogsOnLoad();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        loading.set(false);<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      } finally {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>        lock.unlock();<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><a name="line.502"></a>
-<span class="sourceLineNo">503</span>  private void tryCleanupLogsOnLoad() {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    // nothing to cleanup.<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    if (logs.size() &lt;= 1) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      return;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    }<a name="line.507"></a>
+<span class="sourceLineNo">458</span>        loading.set(false);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        return;<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>      // Load the old logs<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      Iterator&lt;ProcedureWALFile&gt; it = logs.descendingIterator();<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      it.next(); // Skip the current log<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>      ProcedureWALFormat.load(it, storeTracker, new ProcedureWALFormat.Loader() {<a name="line.466"></a>
+<span class="sourceLineNo">467</span><a name="line.467"></a>
+<span class="sourceLineNo">468</span>        @Override<a name="line.468"></a>
+<span class="sourceLineNo">469</span>        public void setMaxProcId(long maxProcId) {<a name="line.469"></a>
+<span class="sourceLineNo">470</span>          loader.setMaxProcId(maxProcId);<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>        @Override<a name="line.473"></a>
+<span class="sourceLineNo">474</span>        public void load(ProcedureIterator procIter) throws IOException {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>          loader.load(procIter);<a name="line.475"></a>
+<span class="sourceLineNo">476</span>        }<a name="line.476"></a>
+<span class="sourceLineNo">477</span><a name="line.477"></a>
+<span class="sourceLineNo">478</span>        @Override<a name="line.478"></a>
+<span class="sourceLineNo">479</span>        public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>          loader.handleCorrupted(procIter);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>        }<a name="line.481"></a>
+<span class="sourceLineNo">482</span><a name="line.482"></a>
+<span class="sourceLineNo">483</span>        @Override<a name="line.483"></a>
+<span class="sourceLineNo">484</span>        public void markCorruptedWAL(ProcedureWALFile log, IOException e) {<a name="line.484"></a>
+<span class="sourceLineNo">485</span>          if (corruptedLogs == null) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>            corruptedLogs = new HashSet&lt;&gt;();<a name="line.486"></a>
+<span class="sourceLineNo">487</span>          }<a name="line.487"></a>
+<span class="sourceLineNo">488</span>          corruptedLogs.add(log);<a name="line.488"></a>
+<span class="sourceLineNo">489</span>          // TODO: sideline corrupted log<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>      // if we fail when loading, we should prevent persisting the storeTracker later in the stop<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      // method. As it may happen that, we have finished constructing the modified and deleted bits,<a name="line.493"></a>
+<span class="sourceLineNo">494</span>      // but before we call resetModified, we fail, then if we persist the storeTracker then when<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      // restarting, we will consider that all procedures have been included in this file and delete<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      // all the previous files. Obviously this not correct. So here we will only set loading to<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      // false when we successfully loaded all the procedures, and when closing we will skip<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      // persisting the store tracker. And also, this will prevent the sync thread to do<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      // periodicRoll, where we may also clean old logs.<a name="line.499"></a>
+<span class="sourceLineNo">500</span>      loading.set(false);<a name="line.500"></a>
+<span class="sourceLineNo">501</span>      // try to cleanup inactive wals and complete the operation<a name="line.501"></a>
+<span class="sourceLineNo">502</span>      buildHoldingCleanupTracker();<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      tryCleanupLogsOnLoad();<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    } finally {<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      lock.unlock();<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>    // the config says to not cleanup wals on load.<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    if (!conf.getBoolean(EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY,<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY)) {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      LOG.debug("WALs cleanup on load is not enabled: " + getActiveLogs());<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      return;<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    }<a name="line.514"></a>
-<span class="sourceLineNo">515</span><a name="line.515"></a>
-<span class="sourceLineNo">516</span>    try {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>      periodicRoll();<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    } catch (IOException e) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      LOG.warn("Unable to cleanup logs on load: " + e.getMessage(), e);<a name="line.519"></a>
+<span class="sourceLineNo">509</span>  private void tryCleanupLogsOnLoad() {<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    // nothing to cleanup.<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    if (logs.size() &lt;= 1) {<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      return;<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    }<a name="line.513"></a>
+<span class="sourceLineNo">514</span><a name="line.514"></a>
+<span class="sourceLineNo">515</span>    // the config says to not cleanup wals on load.<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    if (!conf.getBoolean(EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY,<a name="line.516"></a>
+<span class="sourceLineNo">517</span>      DEFAULT_EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY)) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      LOG.debug("WALs cleanup on load is not enabled: " + getActiveLogs());<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      return;<a name="line.519"></a>
 <span class="sourceLineNo">520</span>    }<a name="line.520"></a>
-<span class="sourceLineNo">521</span>  }<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>  @Override<a name="line.523"></a>
-<span class="sourceLineNo">524</span>  public void insert(Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    if (LOG.isTraceEnabled()) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      LOG.trace("Insert " + proc + ", subproc=" + Arrays.toString(subprocs));<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    }<a name="line.527"></a>
+<span class="sourceLineNo">521</span><a name="line.521"></a>
+<span class="sourceLineNo">522</span>    try {<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      periodicRoll();<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    } catch (IOException e) {<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      LOG.warn("Unable to cleanup logs on load: " + e.getMessage(), e);<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
+<span class="sourceLineNo">527</span>  }<a name="line.527"></a>
 <span class="sourceLineNo">528</span><a name="line.528"></a>
-<span class="sourceLineNo">529</span>    ByteSlot slot = acquireSlot();<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    try {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      // Serialize the insert<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      long[] subProcIds = null;<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      if (subprocs != null) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        ProcedureWALFormat.writeInsert(slot, proc, subprocs);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        subProcIds = new long[subprocs.length];<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>          subProcIds[i] = subprocs[i].getProcId();<a name="line.537"></a>
-<span class="sourceLineNo">538</span>        }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>      } else {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>        assert !proc.hasParent();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        ProcedureWALFormat.writeInsert(slot, proc);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>      // Push the transaction data and wait until it is persisted<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      pushData(PushType.INSERT, slot, proc.getProcId(), subProcIds);<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    } catch (IOException e) {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      // We are not able to serialize the procedure.<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      // this is a code error, and we are not able to go on.<a name="line.548"></a>
-<span class="sourceLineNo">549</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: proc=" +<a name="line.549"></a>
-<span class="sourceLineNo">550</span>          proc + ", subprocs=" + Arrays.toString(subprocs), e);<a name="line.550"></a>
-<span class="sourceLineNo">551</span>      throw new RuntimeException(e);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    } finally {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      releaseSlot(slot);<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>  @Override<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  public void insert(Procedure&lt;?&gt;[] procs) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    if (LOG.isTraceEnabled()) {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      LOG.trace("Insert " + Arrays.toString(procs));<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">529</span>  @Override<a name="line.529"></a>
+<span class="sourceLineNo">530</span>  public void insert(Procedure&lt;?&gt; proc, Procedure&lt;?&gt;[] subprocs) {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    if (LOG.isTraceEnabled()) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>      LOG.trace("Insert " + proc + ", subproc=" + Arrays.toString(subprocs));<a name="line.532"></a>
+<span class="sourceLineNo">533</span>    }<a name="line.533"></a>
+<span class="sourceLineNo">534</span><a name="line.534"></a>
+<span class="sourceLineNo">535</span>    ByteSlot slot = acquireSlot();<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    try {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      // Serialize the insert<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      long[] subProcIds = null;<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      if (subprocs != null) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        ProcedureWALFormat.writeInsert(slot, proc, subprocs);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>        subProcIds = new long[subprocs.length];<a name="line.541"></a>
+<span class="sourceLineNo">542</span>        for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>          subProcIds[i] = subprocs[i].getProcId();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>        }<a name="line.544"></a>
+<span class="sourceLineNo">545</span>      } else {<a name="line.545"></a>
+<span class="sourceLineNo">546</span>        assert !proc.hasParent();<a name="line.546"></a>
+<span class="sourceLineNo">547</span>        ProcedureWALFormat.writeInsert(slot, proc);<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>      // Push the transaction data and wait until it is persisted<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      pushData(PushType.INSERT, slot, proc.getProcId(), subProcIds);<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    } catch (IOException e) {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      // We are not able to serialize the procedure.<a name="line.553"></a>
+<span class="sourceLineNo">554</span>      // this is a code error, and we are not able to go on.<a name="line.554"></a>
+<span class="sourceLineNo">555</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: proc=" +<a name="line.555"></a>
+<span class="sourceLineNo">556</span>          proc + ", subprocs=" + Arrays.toString(subprocs), e);<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      throw new RuntimeException(e);<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    } finally {<a name="line.558"></a>
+<span class="sourceLineNo">559</span>      releaseSlot(slot);<a name="line.559"></a>
+<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  }<a name="line.561"></a>
 <span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    ByteSlot slot = acquireSlot();<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    try {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      // Serialize the insert<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      long[] procIds = new long[procs.length];<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.567"></a>
-<span class="sourceLineNo">568</span>        assert !procs[i].hasParent();<a name="line.568"></a>
-<span class="sourceLineNo">569</span>        procIds[i] = procs[i].getProcId();<a name="line.569"></a>
-<span class="sourceLineNo">570</span>        ProcedureWALFormat.writeInsert(slot, procs[i]);<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>      // Push the transaction data and wait until it is persisted<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      pushData(PushType.INSERT, slot, Procedure.NO_PROC_ID, procIds);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    } catch (IOException e) {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      // We are not able to serialize the procedure.<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      // this is a code error, and we are not able to go on.<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: " +<a name="line.578"></a>
-<span class="sourceLineNo">579</span>          Arrays.toString(procs), e);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>      throw new RuntimeException(e);<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    } finally {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      releaseSlot(slot);<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>  @Override<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  public void update(Procedure&lt;?&gt; proc) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    if (LOG.isTraceEnabled()) {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      LOG.trace("Update " + proc);<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    }<a name="line.590"></a>
+<span class="sourceLineNo">563</span>  @Override<a name="line.563"></a>
+<span class="sourceLineNo">564</span>  public void insert(Procedure&lt;?&gt;[] procs) {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>    if (LOG.isTraceEnabled()) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      LOG.trace("Insert " + Arrays.toString(procs));<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>    ByteSlot slot = acquireSlot();<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    try {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      // Serialize the insert<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      long[] procIds = new long[procs.length];<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      for (int i = 0; i &lt; procs.length; ++i) {<a name="line.573"></a>
+<span class="sourceLineNo">574</span>        assert !procs[i].hasParent();<a name="line.574"></a>
+<span class="sourceLineNo">575</span>        procIds[i] = procs[i].getProcId();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>        ProcedureWALFormat.writeInsert(slot, procs[i]);<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>      // Push the transaction data and wait until it is persisted<a name="line.579"></a>
+<span class="sourceLineNo">580</span>      pushData(PushType.INSERT, slot, Procedure.NO_PROC_ID, procIds);<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    } catch (IOException e) {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      // We are not able to serialize the procedure.<a name="line.582"></a>
+<span class="sourceLineNo">583</span>      // this is a code error, and we are not able to go on.<a name="line.583"></a>
+<span class="sourceLineNo">584</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize one of the procedure: " +<a name="line.584"></a>
+<span class="sourceLineNo">585</span>          Arrays.toString(procs), e);<a name="line.585"></a>
+<span class="sourceLineNo">586</span>      throw new RuntimeException(e);<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    } finally {<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      releaseSlot(slot);<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    }<a name="line.589"></a>
+<span class="sourceLineNo">590</span>  }<a name="line.590"></a>
 <span class="sourceLineNo">591</span><a name="line.591"></a>
-<span class="sourceLineNo">592</span>    ByteSlot slot = acquireSlot();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    try {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>      // Serialize the update<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      ProcedureWALFormat.writeUpdate(slot, proc);<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span>      // Push the transaction data and wait until it is persisted<a name="line.597"></a>
-<span class="sourceLineNo">598</span>      pushData(PushType.UPDATE, slot, proc.getProcId(), null);<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    } catch (IOException e) {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      // We are not able to serialize the procedure.<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      // this is a code error, and we are not able to go on.<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      throw new RuntimeException(e);<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    } finally {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>      releaseSlot(slot);<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    }<a name="line.606"></a>
-<span class="sourceLineNo">607</span>  }<a name="line.607"></a>
-<span class="sourceLineNo">608</span><a name="line.608"></a>
-<span class="sourceLineNo">609</span>  @Override<a name="line.609"></a>
-<span class="sourceLineNo">610</span>  public void delete(long procId) {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    LOG.trace("Delete {}", procId);<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    ByteSlot slot = acquireSlot();<a name="line.612"></a>
-<span class="sourceLineNo">613</span>    try {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      // Serialize the delete<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      ProcedureWALFormat.writeDelete(slot, procId);<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>      // Push the transaction data and wait until it is persisted<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      pushData(PushType.DELETE, slot, procId, null);<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    } catch (IOException e) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      // We are not able to serialize the procedure.<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      // this is a code error, and we are not able to go on.<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + procId, e);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      throw new RuntimeException(e);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    } finally {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      releaseSlot(slot);<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    }<a name="line.626"></a>
-<span class="sourceLineNo">627</span>  }<a name="line.627"></a>
-<span class="sourceLineNo">628</span><a name="line.628"></a>
-<span class="sourceLineNo">629</span>  @Override<a name="line.629"></a>
-<span class="sourceLineNo">630</span>  public void delete(Procedure&lt;?&gt; proc, long[] subProcIds) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    assert proc != null : "expected a non-null procedure";<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    assert subProcIds != null &amp;&amp; subProcIds.length &gt; 0 : "expected subProcIds";<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    if (LOG.isTraceEnabled()) {<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      LOG.trace("Update " + proc + " and Delete " + Arrays.toString(subProcIds));<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>    ByteSlot slot = acquireSlot();<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    try {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>      // Serialize the delete<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      ProcedureWALFormat.writeDelete(slot, proc, subProcIds);<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>      // Push the transaction data and wait until it is persisted<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      pushData(PushType.DELETE, slot, proc.getProcId(), subProcIds);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    } catch (IOException e) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      // We are not able to serialize the procedure.<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      // this is a code error, and we are not able to go on.<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      throw new RuntimeException(e);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    } finally {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      releaseSlot(slot);<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    }<a name="line.651"></a>
-<span class="sourceLineNo">652</span>  }<a name="line.652"></a>
-<span class="sourceLineNo">653</span><a name="line.653"></a>
-<span class="sourceLineNo">654</span>  @Override<a name="line.654"></a>
-<span class="sourceLineNo">655</span>  public void delete(final long[] procIds, final int offset, final int count) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    if (count == 0) return;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    if (offset == 0 &amp;&amp; count == procIds.length) {<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      delete(procIds);<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    } else if (count == 1) {<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      delete(procIds[offset]);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>    } else {<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      delete(Arrays.copyOfRange(procIds, offset, offset + count));<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><a name="line.665"></a>
-<span class="sourceLineNo">666</span>  private void delete(long[] procIds) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    if (LOG.isTraceEnabled()) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      LOG.trace("Delete " + Arrays.toString(procIds));<a name="line.668"></a>
+<span class="sourceLineNo">592</span>  @Override<a name="line.592"></a>
+<span class="sourceLineNo">593</span>  public void update(Procedure&lt;?&gt; proc) {<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    if (LOG.isTraceEnabled()) {<a name="line.594"></a>
+<span class="sourceLineNo">595</span>      LOG.trace("Update " + proc);<a name="line.595"></a>
+<span class="sourceLineNo">596</span>    }<a name="line.596"></a>
+<span class="sourceLineNo">597</span><a name="line.597"></a>
+<span class="sourceLineNo">598</span>    ByteSlot slot = acquireSlot();<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    try {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>      // Serialize the update<a name="line.600"></a>
+<span class="sourceLineNo">601</span>      ProcedureWALFormat.writeUpdate(slot, proc);<a name="line.601"></a>
+<span class="sourceLineNo">602</span><a name="line.602"></a>
+<span class="sourceLineNo">603</span>      // Push the transaction data and wait until it is persisted<a name="line.603"></a>
+<span class="sourceLineNo">604</span>      pushData(PushType.UPDATE, slot, proc.getProcId(), null);<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    } catch (IOException e) {<a name="line.605"></a>
+<span class="sourceLineNo">606</span>      // We are not able to serialize the procedure.<a name="line.606"></a>
+<span class="sourceLineNo">607</span>      // this is a code error, and we are not able to go on.<a name="line.607"></a>
+<span class="sourceLineNo">608</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      throw new RuntimeException(e);<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    } finally {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>      releaseSlot(slot);<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    }<a name="line.612"></a>
+<span class="sourceLineNo">613</span>  }<a name="line.613"></a>
+<span class="sourceLineNo">614</span><a name="line.614"></a>
+<span class="sourceLineNo">615</span>  @Override<a name="line.615"></a>
+<span class="sourceLineNo">616</span>  public void delete(long procId) {<a name="line.616"></a>
+<span class="sourceLineNo">617</span>    LOG.trace("Delete {}", procId);<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    ByteSlot slot = acquireSlot();<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    try {<a name="line.619"></a>
+<span class="sourceLineNo">620</span>      // Serialize the delete<a name="line.620"></a>
+<span class="sourceLineNo">621</span>      ProcedureWALFormat.writeDelete(slot, procId);<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>      // Push the transaction data and wait until it is persisted<a name="line.623"></a>
+<span class="sourceLineNo">624</span>      pushData(PushType.DELETE, slot, procId, null);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    } catch (IOException e) {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>      // We are not able to serialize the procedure.<a name="line.626"></a>
+<span class="sourceLineNo">627</span>      // this is a code error, and we are not able to go on.<a name="line.627"></a>
+<span class="sourceLineNo">628</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + procId, e);<a name="line.628"></a>
+<span class="sourceLineNo">629</span>      throw new RuntimeException(e);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>    } finally {<a name="line.630"></a>
+<span class="sourceLineNo">631</span>      releaseSlot(slot);<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    }<a name="line.632"></a>
+<span class="sourceLineNo">633</span>  }<a name="line.633"></a>
+<span class="sourceLineNo">634</span><a name="line.634"></a>
+<span class="sourceLineNo">635</span>  @Override<a name="line.635"></a>
+<span class="sourceLineNo">636</span>  public void delete(Procedure&lt;?&gt; proc, long[] subProcIds) {<a name="line.636"></a>
+<span class="sourceLineNo">637</span>    assert proc != null : "expected a non-null procedure";<a name="line.637"></a>
+<span class="sourceLineNo">638</span>    assert subProcIds != null &amp;&amp; subProcIds.length &gt; 0 : "expected subProcIds";<a name="line.638"></a>
+<span class="sourceLineNo">639</span>    if (LOG.isTraceEnabled()) {<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      LOG.trace("Update " + proc + " and Delete " + Arrays.toString(subProcIds));<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>    ByteSlot slot = acquireSlot();<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    try {<a name="line.644"></a>
+<span class="sourceLineNo">645</span>      // Serialize the delete<a name="line.645"></a>
+<span class="sourceLineNo">646</span>      ProcedureWALFormat.writeDelete(slot, proc, subProcIds);<a name="line.646"></a>
+<span class="sourceLineNo">647</span><a name="line.647"></a>
+<span class="sourceLineNo">648</span>      // Push the transaction data and wait until it is persisted<a name="line.648"></a>
+<span class="sourceLineNo">649</span>      pushData(PushType.DELETE, slot, proc.getProcId(), subProcIds);<a name="line.649"></a>
+<span class="sourceLineNo">650</span>    } catch (IOException e) {<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      // We are not able to serialize the procedure.<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      // this is a code error, and we are not able to go on.<a name="line.652"></a>
+<span class="sourceLineNo">653</span>      LOG.error(HBaseMarkers.FATAL, "Unable to serialize the procedure: " + proc, e);<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      throw new RuntimeException(e);<a name="line.654"></a>
+<span class="sourceLineNo">655</span>    } finally {<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      releaseSlot(slot);<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><a name="line.659"></a>
+<span class="sourceLineNo">660</span>  @Override<a name="line.660"></a>
+<span class="sourceLineNo">661</span>  public void delete(final long[] procIds, final int offset, final int count) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>    if (count == 0) return;<a name="line.662"></a>
+<span class="sourceLineNo">663</span>    if (offset == 0 &amp;&amp; count == procIds.length) {<a name="line.663"></a>
+<span class="sourceLineNo">664</span>      delete(procIds);<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    } else if (count == 1) {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>      delete(procIds[offset]);<a name="line.666"></a>
+<span class="sourceLineNo">667</span>    } else {<a name="line.667"></a>
+<span class="sourceLineNo">668</span>      delete(Arrays.copyOfRange(procIds, offset, offset + count));<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>    final ByteSlot slot = acquireSlot();<a name="line.671"></a>
-<span class="sourceLineNo">672</span>    try {<a name="line.672"></a>
-<span class="sourceLineNo">673</span>      // Serialize the delete<a name="line.673"></a>
-<span class="sourceLineNo">674</span>      for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>        ProcedureWALFormat.writeDelete(slot, procIds[i]);<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      }<a name="line.676"></a>
-<span class="sourceLineNo">677</span><a name="line.677"></a>
-<span class="sourceLineNo">678</span>      // Push the transaction data and wait until it is persisted<a name="line.678"></a>
-<span class="sourceLineNo">679</span>      pushData(PushType.DELETE, slot, Procedure.NO_PROC_ID, procIds);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    } catch (IOException e) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      // We are not able to serialize the procedure.<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      // this is a code error, and we are not able to go on.<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      LOG.error("Unable to serialize the procedures: " + Arrays.toString(procIds), e);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>      throw new RuntimeException(e);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    } finally {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      releaseSlot(slot);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>    }<a name="line.687"></a>
-<span class="sourceLineNo">688</span>  }<a name="line.688"></a>
-<span class="sourceLineNo">689</span><a name="line.689"></a>
-<span class="sourceLineNo">690</span>  private ByteSlot acquireSlot() {<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    ByteSlot slot = slotsCache.poll();<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    return slot != null ? slot : new ByteSlot();<a name="line.692"></a>
-<span class="sourceLineNo">693</span>  }<a name="line.693"></a>
-<span class="sourceLineNo">694</span><a name="line.694"></a>
-<span class="sourceLineNo">695</span>  private void releaseSlot(final ByteSlot slot) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    slot.reset();<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    slotsCache.offer(slot);<a name="line.697"></a>
-<span class="sourceLineNo">698</span>  }<a name="line.698"></a>
-<span class="sourceLineNo">699</span><a name="line.699"></a>
-<span class="sourceLineNo">700</span>  private enum PushType { INSERT, UPDATE, DELETE }<a name="line.700"></a>
-<span class="sourceLineNo">701</span><a name="line.701"></a>
-<span class="sourceLineNo">702</span>  private long pushData(final PushType type, final ByteSlot slot,<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      final long procId, final long[] subProcIds) {<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    if (!isRunning()) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      throw new RuntimeException("the store must be running before inserting data");<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    }<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    if (logs.isEmpty()) {<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      throw new RuntimeException("recoverLease() must be called before inserting data");<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    }<a name="line.709"></a>
-<span class="sourceLineNo">710</span><a name="line.710"></a>
-<span class="sourceLineNo">711</span>    long logId = -1;<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    lock.lock();<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    try {<a name="line.713"></a>
-<span class="sourceLineNo">714</span>      // Wait for the sync to be completed<a name="line.714"></a>
-<span class="sourceLineNo">715</span>      while (true) {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        if (!isRunning()) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>          throw new RuntimeException("store no longer running");<a name="line.717"></a>
-<span class="sourceLineNo">718</span>        } else if (isSyncAborted()) {<a name="line.718"></a>
-<span class="sourceLineNo">719</span>          throw new RuntimeException("sync aborted", syncException.get());<a name="line.719"></a>
-<span class="sourceLineNo">720</span>        } else if (inSync.get()) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>          syncCond.await();<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        } else if (slotIndex &gt;= syncMaxSlot) {<a name="line.722"></a>
-<span class="sourceLineNo">723</span>          slotCond.signal();<a name="line.723"></a>
-<span class="sourceLineNo">724</span>          syncCond.await();<a name="line.724"></a>
-<span class="sourceLineNo">725</span>        } else {<a name="line.725"></a>
-<span class="sourceLineNo">726</span>          break;<a name="line.726"></a>
-<span class="sourceLineNo">727</span>        }<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      }<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span>      final long pushSyncId = syncId.get();<a name="line.730"></a>
-<span class="sourceLineNo">731</span>      updateStoreTracker(type, procId, subProcIds);<a name="line.731"></a>
-<span class="sourceLineNo">732</span>      slots[slotIndex++] = slot;<a name="line.732"></a>
-<span class="sourceLineNo">733</span>      logId = flushLogId;<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span>      // Notify that there is new data<a name="line.735"></a>
-<span class="sourceLineNo">736</span>      if (slotIndex == 1) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>        waitCond.signal();<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>      // Notify that the slots are full<a name="line.740"></a>
-<span class="sourceLineNo">741</span>      if (slotIndex == syncMaxSlot) {<a name="line.741"></a>
-<span class="sourceLineNo">742</span>        waitCond.signal();<a name="line.742"></a>
-<span class="sourceLineNo">743</span>        slotCond.signal();<a name="line.743"></a>
+<span class="sourceLineNo">670</span>  }<a name="line.670"></a>
+<span class="sourceLineNo">671</span><a name="line.671"></a>
+<span class="sourceLineNo">672</span>  private void delete(long[] procIds) {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>    if (LOG.isTraceEnabled()) {<a name="line.673"></a>
+<span class="sourceLineNo">674</span>      LOG.trace("Delete " + Arrays.toString(procIds));<a name="line.674"></a>
+<span class="sourceLineNo">675</span>    }<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span>    final ByteSlot slot = acquireSlot();<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    try {<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      // Serialize the delete<a name="line.679"></a>
+<span class="sourceLineNo">680</span>      for (int i = 0; i &lt; procIds.length; ++i) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span>        ProcedureWALFormat.writeDelete(slot, procIds[i]);<a name="line.681"></a>
+<span class="sourceLineNo">682</span>      }<a name="line.682"></a>
+<span class="sourceLineNo">683</span><a name="line.683"></a>
+<span class="sourceLineNo">684</span>      // Push the transaction data and wait until it is persisted<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      pushData(PushType.DELETE, slot, Procedure.NO_PROC_ID, procIds);<a name="line.685"></a>
+<span class="sourceLineNo">686</span>    } catch (IOException e) {<a name="line.686"></a>
+<span class="sourceLineNo">687</span>      // We are not able to serialize the procedure.<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      // this is a code error, and we are not able to go on.<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      LOG.error("Unable to serialize the procedures: " + Arrays.toString(procIds), e);<a name="line.689"></a>
+<span class="sourceLineNo">690</span>      throw new RuntimeException(e);<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    } finally {<a name="line.691"></a>
+<span class="sourceLineNo">692</span>      releaseSlot(slot);<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    }<a name="line.693"></a>
+<span class="sourceLineNo">694</span>  }<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span>  private ByteSlot acquireSlot() {<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    ByteSlot slot = slotsCache.poll();<a name="line.697"></a>
+<span class="sourceLineNo">698</span>    return slot != null ? slot : new ByteSlot();<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>  private void releaseSlot(final ByteSlot slot) {<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    slot.reset();<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    slotsCache.offer(slot);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>  }<a name="line.704"></a>
+<span class="sourceLineNo">705</span><a name="line.705"></a>
+<span class="sourceLineNo">706</span>  private enum PushType { INSERT, UPDATE, DELETE }<a name="line.706"></a>
+<span class="sourceLineNo">707</span><a name="line.707"></a>
+<span class="sourceLineNo">708</span>  private long pushData(final PushType type, final ByteSlot slot,<a name="line.708"></a>
+<span class="sourceLineNo">709</span>      final long procId, final long[] subProcIds) {<a name="line.709"></a>
+<span class="sourceLineNo">710</span>    if (!isRunning()) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span>      throw new RuntimeException("the store must be running before inserting data");<a name="line.711"></a>
+<span class="sourceLineNo">712</span>    }<a name="line.712"></a>
+<span class="sourceLineNo">713</span>    if (logs.isEmpty()) {<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      throw new RuntimeException("recoverLease() must be called before inserting data");<a name="line.714"></a>
+<span class="sourceLineNo">715</span>    }<a name="line.715"></a>
+<span class="sourceLineNo">716</span><a name="line.716"></a>
+<span class="sourceLineNo">717</span>    long logId = -1;<a name="line.717"></a>
+<span class="sourceLineNo">718</span>    lock.lock();<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    try {<a name="line.719"></a>
+<span class="sourceLineNo">720</span>      // Wait for the sync to be completed<a name="line.720"></a>
+<span class="sourceLineNo">721</span>      while (true) {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>        if (!isRunning()) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>          throw new RuntimeException("store no longer running");<a name="line.723"></a>
+<span class="sourceLineNo">724</span>        } else if (isSyncAborted()) {<a name="line.724"></a>
+<span class="sourceLineNo">725</span>          throw new RuntimeException("sync aborted", syncException.get());<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        } else if (inSync.get()) {<a name="line.726"></a>
+<span class="sourceLineNo">727</span>          syncCond.await();<a name="line.727"></a>
+<span class="sourceLineNo">728</span>        } else if (slotIndex &gt;= syncMaxSlot) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span>          slotCond.signal();<a name="line.729"></a>
+<span class="sourceLineNo">730</span>          syncCond.await();<a name="line.730"></a>
+<span class="sourceLineNo">731</span>        } else {<a name="line.731"></a>
+<span class="sourceLineNo">732</span>          break;<a name="line.732"></a>
+<span class="sourceLineNo">733</span>        }<a name="line.733"></a>
+<span class="sourceLineNo">734</span>      }<a name="line.734"></a>
+<span class="sourceLineNo">735</span><a name="line.735"></a>
+<span class="sourceLineNo">736</span>      final long pushSyncId = syncId.get();<a name="line.736"></a>
+<span class="sourceLineNo">737</span>      updateStoreTracker(type, procId, subProcIds);<a name="line.737"></a>
+<span class="sourceLineNo">738</span>      slots[slotIndex++] = slot;<a name="line.738"></a>
+<span class="sourceLineNo">739</span>      logId = flushLogId;<a name="line.739"></a>
+<span class="sourceLineNo">740</span><a name="line.740"></a>
+<span class="sourceLineNo">741</span>      // Notify that there is new data<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      if (slotIndex == 1) {<a name="line.742"></a>
+<span class="sourceLineNo">743</span>        waitCond.signal();<a name="line.743"></a>
 <span class="sourceLineNo">744</span>      }<a name="line.744"></a>
 <span class="sourceLineNo">745</span><a name="line.745"></a>
-<span class="sourceLineNo">746</span>      while (pushSyncId == syncId.get() &amp;&amp; isRunning()) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        syncCond.await();<a name="line.747"></a>
-<span class="sourceLineNo">748</span>      }<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    } catch (InterruptedException e) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      Thread.currentThread().interrupt();<a name="line.750"></a>
-<span class="sourceLineNo">751</span>      sendAbortProcessSignal();<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      throw new RuntimeException(e);<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    } finally {<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      lock.unlock();<a name="line.754"></a>
-<span class="sourceLineNo">755</span>      if (isSyncAborted()) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span>        throw new RuntimeException("sync aborted", syncException.get());<a name="line.756"></a>
-<span class="sourceLineNo">757</span>      }<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    }<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    return logId;<a name="line.759"></a>
-<span class="sourceLineNo">760</span>  }<a name="line.760"></a>
-<span class="sourceLineNo">761</span><a name="line.761"></a>
-<span class="sourceLineNo">762</span>  private void updateStoreTracker(final PushType type,<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      final long procId, final long[] subProcIds) {<a name="line.763"></a>
-<span class="sourceLineNo">764</span>    switch (type) {<a name="line.764"></a>
-<span class="sourceLineNo">765</span>      case INSERT:<a name="line.765"></a>
-<span class="sourceLineNo">766</span>        if (subProcIds == null) {<a name="line.766"></a>
-<span class="sourceLineNo">767</span>          storeTracker.insert(procId);<a name="line.767"></a>
-<span class="sourceLineNo">768</span>        } else if (procId == Procedure.NO_PROC_ID) {<a name="line.768"></a>
-<span class="sourceLineNo">769</span>          storeTracker.insert(subProcIds);<a name="line.769"></a>
-<span class="sourceLineNo">770</span>        } else {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>          storeTracker.insert(procId, subProcIds);<a name="line.771"></a>
-<span class="sourceLineNo">772</span>          holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.772"></a>
-<span class="sourceLineNo">773</span>        }<a name="line.773"></a>
-<span class="sourceLineNo">774</span>        break;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>      case UPDATE:<a name="line.775"></a>
-<span class="sourceLineNo">776</span>        storeTracker.update(procId);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>        holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.777"></a>
-<span class="sourceLineNo">778</span>        break;<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      case DELETE:<a name="line.779"></a>
-<span class="sourceLineNo">780</span>        if (subProcIds != null &amp;&amp; subProcIds.length &gt; 0) {<a name="line.780"></a>
-<span class="sourceLineNo">781</span>          storeTracker.delete(subProcIds);<a name="line.781"></a>
-<span class="sourceLineNo">782</span>          holdingCleanupTracker.setDeletedIfModified(subProcIds);<a name="line.782"></a>
-<span class="sourceLineNo">783</span>        } else {<a name="line.783"></a>
-<span class="sourceLineNo">784</span>          storeTracker.delete(procId);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>          holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.785"></a>
-<span class="sourceLineNo">786</span>        }<a name="line.786"></a>
-<span class="sourceLineNo">787</span>        break;<a name="line.787"></a>
-<span class="sourceLineNo">788</span>      default:<a name="line.788"></a>
-<span class="sourceLineNo">789</span>        throw new RuntimeException("invalid push type " + type);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    }<a name="line.790"></a>
-<span class="sourceLineNo">791</span>  }<a name="line.791"></a>
-<span class="sourceLineNo">792</span><a name="line.792"></a>
-<span class="sourceLineNo">793</span>  private boolean isSyncAborted() {<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    return syncException.get() != null;<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 void syncLoop() throws Throwable {<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    long totalSyncedToStore = 0;<a name="line.798"></a>
-<span class="sourceLineNo">799</span>    inSync.set(false);<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    lock.lock();<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    try {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>      while (isRunning()) {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>        try {<a name="line.803"></a>
-<span class="sourceLineNo">804</span>          // Wait until new data is available<a name="line.804"></a>
-<span class="sourceLineNo">805</span>          if (slotIndex == 0) {<a name="line.805"></a>
-<span class="sourceLineNo">806</span>            if (!loading.get()) {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>              periodicRoll();<a name="line.807"></a>
-<span class="sourceLineNo">808</span>            }<a name="line.808"></a>
-<span class="sourceLineNo">809</span><a name="line.809"></a>
-<span class="sourceLineNo">810</span>            if (LOG.isTraceEnabled()) {<a name="line.810"></a>
-<span class="sourceLineNo">811</span>              float rollTsSec = getMillisFromLastRoll() / 1000.0f;<a name="line.811"></a>
-<span class="sourceLineNo">812</span>              LOG.trace(String.format("Waiting for data. flushed=%s (%s/sec)",<a name="line.812"></a>
-<span class="sourceLineNo">813</span>                        StringUtils.humanSize(totalSynced.get()),<a name="line.813"></a>
-<span class="sourceLineNo">814</span>                        StringUtils.humanSize(totalSynced.get() / rollTsSec)));<a name="line.814"></a>
-<span class="sourceLineNo">815</span>            }<a name="line.815"></a>
-<span class="sourceLineNo">816</span><a name="line.816"></a>
-<span class="sourceLineNo">817</span>            waitCond.await(getMillisToNextPeriodicRoll(), TimeUnit.MILLISECONDS);<a name="line.817"></a>
-<span class="sourceLineNo">818</span>            if (slotIndex == 0) {<a name="line.818"></a>
-<span class="sourceLineNo">819</span>              // no data.. probably a stop() or a periodic roll<a name="line.819"></a>
-<span class="sourceLineNo">820</span>              continue;<a name="line.820"></a>
+<span class="sourceLineNo">746</span>      // Notify that the slots are full<a name="line.746"></a>
+<span class="sourceLineNo">747</span>      if (slotIndex == syncMaxSlot) {<a name="line.747"></a>
+<span class="sourceLineNo">748</span>        waitCond.signal();<a name="line.748"></a>
+<span class="sourceLineNo">749</span>        slotCond.signal();<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>      while (pushSyncId == syncId.get() &amp;&amp; isRunning()) {<a name="line.752"></a>
+<span class="sourceLineNo">753</span>        syncCond.await();<a name="line.753"></a>
+<span class="sourceLineNo">754</span>      }<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    } catch (InterruptedException e) {<a name="line.755"></a>
+<span class="sourceLineNo">756</span>      Thread.currentThread().interrupt();<a name="line.756"></a>
+<span class="sourceLineNo">757</span>      sendAbortProcessSignal();<a name="line.757"></a>
+<span class="sourceLineNo">758</span>      throw new RuntimeException(e);<a name="line.758"></a>
+<span class="sourceLineNo">759</span>    } finally {<a name="line.759"></a>
+<span class="sourceLineNo">760</span>      lock.unlock();<a name="line.760"></a>
+<span class="sourceLineNo">761</span>      if (isSyncAborted()) {<a name="line.761"></a>
+<span class="sourceLineNo">762</span>        throw new RuntimeException("sync aborted", syncException.get());<a name="line.762"></a>
+<span class="sourceLineNo">763</span>      }<a name="line.763"></a>
+<span class="sourceLineNo">764</span>    }<a name="line.764"></a>
+<span class="sourceLineNo">765</span>    return logId;<a name="line.765"></a>
+<span class="sourceLineNo">766</span>  }<a name="line.766"></a>
+<span class="sourceLineNo">767</span><a name="line.767"></a>
+<span class="sourceLineNo">768</span>  private void updateStoreTracker(final PushType type,<a name="line.768"></a>
+<span class="sourceLineNo">769</span>      final long procId, final long[] subProcIds) {<a name="line.769"></a>
+<span class="sourceLineNo">770</span>    switch (type) {<a name="line.770"></a>
+<span class="sourceLineNo">771</span>      case INSERT:<a name="line.771"></a>
+<span class="sourceLineNo">772</span>        if (subProcIds == null) {<a name="line.772"></a>
+<span class="sourceLineNo">773</span>          storeTracker.insert(procId);<a name="line.773"></a>
+<span class="sourceLineNo">774</span>        } else if (procId == Procedure.NO_PROC_ID) {<a name="line.774"></a>
+<span class="sourceLineNo">775</span>          storeTracker.insert(subProcIds);<a name="line.775"></a>
+<span class="sourceLineNo">776</span>        } else {<a name="line.776"></a>
+<span class="sourceLineNo">777</span>          storeTracker.insert(procId, subProcIds);<a name="line.777"></a>
+<span class="sourceLineNo">778</span>          holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.778"></a>
+<span class="sourceLineNo">779</span>        }<a name="line.779"></a>
+<span class="sourceLineNo">780</span>        break;<a name="line.780"></a>
+<span class="sourceLineNo">781</span>      case UPDATE:<a name="line.781"></a>
+<span class="sourceLineNo">782</span>        storeTracker.update(procId);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>        holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.783"></a>
+<span class="sourceLineNo">784</span>        break;<a name="line.784"></a>
+<span class="sourceLineNo">785</span>      case DELETE:<a name="line.785"></a>
+<span class="sourceLineNo">786</span>        if (subProcIds != null &amp;&amp; subProcIds.length &gt; 0) {<a name="line.786"></a>
+<span class="sourceLineNo">787</span>          storeTracker.delete(subProcIds);<a name="line.787"></a>
+<span class="sourceLineNo">788</span>          holdingCleanupTracker.setDeletedIfModified(subProcIds);<a name="line.788"></a>
+<span class="sourceLineNo">789</span>        } else {<a name="line.789"></a>
+<span class="sourceLineNo">790</span>          storeTracker.delete(procId);<a name="line.790"></a>
+<span class="sourceLineNo">791</span>          holdingCleanupTracker.setDeletedIfModified(procId);<a name="line.791"></a>
+<span class="sourceLineNo">792</span>        }<a name="line.792"></a>
+<span class="sourceLineNo">793</span>        break;<a name="line.793"></a>
+<span class="sourceLineNo">794</span>      default:<a name="line.794"></a>
+<span class="sourceLineNo">795</span>        throw new RuntimeException("invalid push type " + type);<a name="line.795"></a>
+<span class="sourceLineNo">796</span>    }<a name="line.796"></a>
+<span class="sourceLineNo">797</span>  }<a name="line.797"></a>
+<span class="sourceLineNo">798</span><a name="line.798"></a>
+<span class="sourceLineNo">799</span>  private boolean isSyncAborted() {<a name="line.799"></a>
+<span class="sourceLineNo">800</span>    return syncException.get() != null;<a name="line.800"></a>
+<span class="sourceLineNo">801</span>  }<a name="line.801"></a>
+<span class="sourceLineNo">802</span><a name="line.802"></a>
+<span class="sourceLineNo">803</span>  private void syncLoop() throws Throwable {<a name="line.803"></a>
+<span class="sourceLineNo">804</span>    long totalSyncedToStore = 0;<a name="line.804"></a>
+<span class="sourceLineNo">805</span>    inSync.set(false);<a name="line.805"></a>
+<span class="sourceLineNo">806</span>    lock.lock();<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    try {<a name="line.807"></a>
+<span class="sourceLineNo">808</span>      while (isRunning()) {<a name="line.808"></a>
+<span class="sourceLineNo">809</span>        try {<a name="line.809"></a>
+<span class="sourceLineNo">810</span>          // Wait until new data is available<a name="line.810"></a>
+<span class="sourceLineNo">811</span>          if (slotIndex == 0) {<a name="line.811"></a>
+<span class="sourceLineNo">812</span>            if (!loading.get()) {<a name="line.812"></a>
+<span class="sourceLineNo">813</span>              periodicRoll();<a name="line.813"></a>
+<span class="sourceLineNo">814</span>            }<a name="line.814"></a>
+<span class="sourceLineNo">815</span><a name="line.815"></a>
+<span class="sourceLineNo">816</span>            if (LOG.isTraceEnabled()) {<a name="line.816"></a>
+<span class="sourceLineNo">817</span>              float rollTsSec = getMillisFromLastRoll() / 1000.0f;<a name="line.817"></a>
+<span class="sourceLineNo">818</span>              LOG.trace(String.format("Waiting for data. flushed=%s (%s/sec)",<a name="line.818"></a>
+<span class="sourceLineNo">819</span>                        StringUtils.humanSize(totalSynced.get()),<a name="line.819"></a>
+<span class="sourceLineNo">820</span>                        StringUtils.humanSize(totalSynced.get() / rollTsSec)));<a name="line.820"></a>
 <span class="sourceLineNo">821</span>            }<a name="line.821"></a>
-<span class="sourceLineNo">822</span>          }<a name="line.822"></a>
-<span class="sourceLineNo">823</span>          // Wait SYNC_WAIT_MSEC or the signal of "slots full" before flushing<a name="line.823"></a>
-<span class="sourceLineNo">824</span>          syncMaxSlot = runningProcCount;<a name="line.824"></a>
-<span class="sourceLineNo">825</span>          assert syncMaxSlot &gt; 0 : "unexpected syncMaxSlot=" + syncMaxSlot;<a name="line.825"></a>
-<span class="sourceLineNo">826</span>          final long syncWaitSt = System.currentTimeMillis();<a name="line.826"></a>
-<span class="sourceLineNo">827</span>          if (slotIndex != syncMaxSlot) {<a name="line.827"></a>
-<span class="sourceLineNo">828</span>            slotCond.await(syncWaitMsec, TimeUnit.MILLISECONDS);<a name="line.828"></a>
-<span class="sourceLineNo">829</span>          }<a name="line.829"></a>
-<span class="sourceLineNo">830</span><a name="line.830"></a>
-<span class="sourceLineNo">831</span>          final long currentTs = System.currentTimeMillis();<a name="line.831"></a>
-<span class="sourceLineNo">832</span>          final long syncWaitMs = currentTs - syncWaitSt;<a name="line.832"></a>
-<span class="sourceLineNo">833</span>          final float rollSec = getMillisFromLastRoll() / 1000.0f;<a name="line.833"></a>
-<span class="sourceLineNo">834</span>          final float syncedPerSec = totalSyncedToStore / rollSec;<a name="line.834"></a>
-<span class="sourceLineNo">835</span>          if (LOG.isTraceEnabled() &amp;&amp; (syncWaitMs &gt; 10 || slotIndex &lt; syncMaxSlot)) {<a name="line.835"></a>
-<span class="sourceLineNo">836</span>            LOG.trace(String.format("Sync wait %s, slotIndex=%s , totalSynced=%s (%s/sec)",<a name="line.836"></a>
-<span class="sourceLineNo">837</span>                      StringUtils.humanTimeDiff(syncWaitMs), slotIndex,<a name="line.837"></a>
-<span class="sourceLineNo">838</span>                      StringUtils.humanSize(totalSyncedToStore),<a name="line.838"></a>
-<span class="sourceLineNo">839</span>                      StringUtils.humanSize(syncedPerSec)));<a name="line.839"></a>
-<span class="sourceLineNo">840</span>          }<a name="line.840"></a>
-<span class="sourceLineNo">841</span><a name="line.841"></a>
-<span class="sourceLineNo">842</span>          // update webui circular buffers (TODO: get rid of allocations)<a name="line.842"></a>
-<span class="sourceLineNo">843</span>          final SyncMetrics syncMetrics = new SyncMetrics();<a name="line.843"></a>
-<span class="sourceLineNo">844</span>          syncMetrics.timestamp = currentTs;<a name="line.844"></a>
-<span class="sourceLineNo">845</span>          syncMetrics.syncWaitMs = syncWaitMs;<a name="line.845"></a>
-<span class="sourceLineNo">846</span>          syncMetrics.syncedEntries = slotIndex;<a name="line.846"></a>
-<span class="sourceLineNo">847</span>          syncMetrics.totalSyncedBytes = totalSyncedToStore;<a name="line.847"></a>
-<span class="sourceLineNo">848</span>          syncMetrics.syncedPerSec = syncedPerSec;<a name="line.848"></a>
-<span class="sourceLineNo">849</span>          syncMetricsQueue.add(syncMetrics);<a name="line.849"></a>
-<span class="sourceLineNo">850</span><a name="line.850"></a>
-<span class="sourceLineNo">851</span>          // sync<a name="line.851"></a>
-<span class="sourceLineNo">852</span>          inSync.set(true);<a name="line.852"></a>
-<span class="sourceLineNo">853</span>          long slotSize = syncSlots();<a name="line.853"></a>
-<span class="sourceLineNo">854</span>          logs.getLast().addToSize(slotSize);<a name="line.854"></a>
-<span class="sourceLineNo">855</span>          totalSyncedToStore = totalSynced.addAndGet(slotSize);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>          slotIndex = 0;<a name="line.856"></a>
-<span class="sourceLineNo">857</span>          inSync.set(false);<a name="line.857"></a>
-<span class="sourceLineNo">858</span>          syncId.incrementAndGet();<a name="line.858"></a>
-<span class="sourceLineNo">859</span>        } catch (InterruptedException e) {<a name="line.859"></a>
-<span class="sourceLineNo">860</span>          Thread.currentThread().interrupt();<a name="line.860"></a>
-<span class="sourceLineNo">861</span>          syncException.compareAndSet(null, e);<a name="line.861"></a>
-<span class="sourceLineNo">862</span>          sendAbortProcessSignal();<a name="line.862"></a>
-<span class="sourceLineNo">863</span>          throw e;<a name="line.863"></a>
-<span class="sourceLineNo">864</span>        } catch (Throwable t) {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>          syncException.compareAndSet(null, t);<a name="line.865"></a>
-<span class="sourceLineNo">866</span>          sendAbortProcessSignal();<a name="line.866"></a>
-<span class="sourceLineNo">867</span>          throw t;<a name="line.867"></a>
-<span class="sourceLineNo">868</span>        } finally {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>          syncCond.signalAll();<a name="line.869"></a>
-<span class="sourceLineNo">870</span>        }<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      }<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    } finally {<a name="line.872"></a>
-<span class="sourceLineNo">873</span>      lock.unlock();<a name="line.873"></a>
-<span class="sourceLineNo">874</span>    }<a name="line.874"></a>
-<span class="sourceLineNo">875</span>  }<a name="line.875"></a>
-<span class="sourceLineNo">876</span><a name="line.876"></a>
-<span class="sourceLineNo">877</span>  public ArrayList&lt;SyncMetrics&gt; getSyncMetrics() {<a name="line.877"></a>
-<span class="sourceLineNo">878</span>    lock.lock();<a name="line.878"></a>
-<span class="sourceLineNo">879</span>    try {<a name="line.879"></a>
-<span class="sourceLineNo">880</span>      return new ArrayList&lt;&gt;(syncMetricsQueue);<a name="line.880"></a>
-<span class="sourceLineNo">881</span>    } finally {<a name="line.881"></a>
-<span class="sourceLineNo">882</span>      lock.unlock();<a name="line.882"></a>
-<span class="sourceLineNo">883</span>    }<a name="line.883"></a>
-<span class="sourceLineNo">884</span>  }<a name="line.884"></a>
-<span class="sourceLineNo">885</span><a name="line.885"></a>
-<span class="sourceLineNo">886</span>  private long syncSlots() throws Throwable {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>    int retry = 0;<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    int logRolled = 0;<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    long totalSynced = 0;<a name="line.889"></a>
-<span class="sourceLineNo">890</span>    do {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>      try {<a name="line.891"></a>
-<span class="sourceLineNo">892</span>        totalSynced = syncSlots(stream, slots, 0, slotIndex);<a name="line.892"></a>
-<span class="sourceLineNo">893</span>        break;<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      } catch (Throwable e) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span>        LOG.warn("unable to sync slots, retry=" + retry);<a name="line.895"></a>
-<span class="sourceLineNo">896</span>        if (++retry &gt;= maxRetriesBeforeRoll) {<a name="line.896"></a>
-<span class="sourceLineNo">897</span>          if (logRolled &gt;= maxSyncFailureRoll &amp;&amp; isRunning()) {<a name="line.897"></a>
-<span class="sourceLineNo">898</span>            LOG.error("Sync slots after log roll failed, abort.", e);<a name="line.898"></a>
-<span class="sourceLineNo">899</span>            throw e;<a name="line.899"></a>
-<span class="sourceLineNo">900</span>          }<a name="line.900"></a>
-<span class="sourceLineNo">901</span><a name="line.901"></a>
-<span class="sourceLineNo">902</span>          if (!rollWriterWithRetries()) {<a name="line.902"></a>
-<span class="sourceLineNo">903</span>            throw e;<a name="line.903"></a>
-<span class="sourceLineNo">904</span>          }<a name="line.904"></a>
-<span class="sourceLineNo">905</span><a name="line.905"></a>
-<span class="sourceLineNo">906</span>          logRolled++;<a name="line.906"></a>
-<span class="sourceLineNo">907</span>          retry = 0;<a name="line.907"></a>
-<span class="sourceLineNo">908</span>        }<a name="line.908"></a>
-<span class="sourceLineNo">909</span>      }<a name="line.909"></a>
-<span class="sourceLineNo">910</span>    } while (isRunning());<a name="line.910"></a>
-<span class="sourceLineNo">911</span>    return totalSynced;<a name="line.911"></a>
-<span class="sourceLineNo">912</span>  }<a name="line.912"></a>
-<span class="sourceLineNo">913</span><a name="line.913"></a>
-<span class="sourceLineNo">914</span>  protected long syncSlots(final FSDataOutputStream stream, final ByteSlot[] slots,<a name="line.914"></a>
-<span class="sourceLineNo">915</span>      final int offset, final int count) throws IOException {<a name="line.915"></a>
-<span class="sourceLineNo">916</span>    long totalSynced = 0;<a name="line.916"></a>
-<span class="sourceLineNo">917</span>    for (int i = 0; i &lt; count; ++i) {<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      final ByteSlot data = slots[offset + i];<a name="line.918"></a>
-<span class="sourceLineNo">919</span>      data.writeTo(stream);<a name="line.919"></a>
-<span class="sourceLineNo">920</span>      totalSynced += data.size();<a name="line.920"></a>
-<span class="sourceLineNo">921</span>    }<a name="line.921"></a>
-<span class="sourceLineNo">922</span><a name="line.922"></a>
-<span class="sourceLineNo">923</span>    syncStream(stream);<a name="line.923"></a>
-<span class="sourceLineNo">924</span>    sendPostSyncSignal();<a name="line.924"></a>
-<span class="sourceLineNo">925</span><a name="line.925"></a>
-<span class="sourceLineNo">926</span>    if (LOG.isTraceEnabled()) {<a name="line.926"></a>
-<span class="sourceLineNo">927</span>      LOG.trace("Sync slots=" + count + '/' + syncMaxSlot +<a name="line.927"></a>
-<span class="sourceLineNo">928</span>                ", flushed=" + StringUtils.humanSize(totalSynced));<a name="line.928"></a>
-<span class="sourceLineNo">929</span>    }<a name="line.929"></a>
-<span class="sourceLineNo">930</span>    return totalSynced;<a name="line.930"></a>
-<span class="sourceLineNo">931</span>  }<a name="line.931"></a>
-<span class="sourceLineNo">932</span><a name="line.932"></a>
-<span class="sourceLineNo">933</span>  protected void syncStream(final FSDataOutputStream stream) throws IOException {<a name="line.933"></a>
-<span class="sourceLineNo">934</span>    if (useHsync) {<a name="line.934"></a>
-<span class="sourceLineNo">935</span>      stream.hsync();<a name="line.935"></a>
-<span class="sourceLineNo">936</span>    } else {<a name="line.936"></a>
-<span class="sourceLineNo">937</span>      stream.hflush();<a name="line.937"></a>
-<span class="sourceLineNo">938</span>    }<a name="line.938"></a>
-<span class="sourceLineNo">939</span>  }<a name="line.939"></a>
-<span class="sourceLineNo">940</span><a name="line.940"></a>
-<span class="sourceLineNo">941</span>  private boolean rollWriterWithRetries() {<a name="line.941"></a>
-<span class="sourceLineNo">942</span>    for (int i = 0; i &lt; rollRetries &amp;&amp; isRunning(); ++i) {<a name="line.942"></a>
-<span class="sourceLineNo">943</span>      if (i &gt; 0) Threads.sleepWithoutInterrupt(waitBeforeRoll * i);<a name="line.943"></a>
-<span class="sourceLineNo">944</span><a name="line.944"></a>
-<span class="sourceLineNo">945</span>      try {<a name="line.945"></a>
-<span class="sourceLineNo">946</span>        if (rollWriter()) {<a name="line.946"></a>
-<span class="sourceLineNo">947</span>          return true;<a name="line.947"></a>
-<span class="sourceLineNo">948</span>        }<a name="line.948"></a>
-<span class="sourceLineNo">949</span>      } catch (IOException e) {<a name="line.949"></a>
-<span class="sourceLineNo">950</span>        LOG.warn("Unable to roll the log, attempt=" + (i + 1), e);<a name="line.950"></a>
-<span class="sourceLineNo">951</span>      }<a name="line.951"></a>
-<span class="sourceLineNo">952</span>    }<a name="line.952"></a>
-<span class="sourceLineNo">953</span>    LOG.error(HBaseMarkers.FATAL, "Unable to roll the log");<a name="line.953"></a>
-<span class="sourceLineNo">954</span>    return false;<a name="line.954"></a>
-<span class="sourceLineNo">955</span>  }<a name="line.955"></a>
-<span class="sourceLineNo">956</span><a name="line.956"></a>
-<span class="sourceLineNo">957</span>  private boolean tryRollWriter() {<a name="line.957"></a>
-<span class="sourceLineNo">958</span>    try {<a name="line.958"></a>
-<span class="sourceLineNo">959</span>      return rollWriter();<a name="line.959"></a>
-<span class="sourceLineNo">960</span>    } catch (IOException e) {<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      LOG.warn("Unable to roll the log", e);<a name="line.961"></a>
-<span class="sourceLineNo">962</span>      return false;<a name="line.962"></a>
-<span class="sourceLineNo">963</span>    }<a name="line.963"></a>
-<span class="sourceLineNo">964</span>  }<a name="line.964"></a>
-<span class="sourceLineNo">965</span><a name="line.965"></a>
-<span class="sourceLineNo">966</span>  public long getMillisToNextPeriodicRoll() {<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    if (lastRollTs.get() &gt; 0 &amp;&amp; periodicRollMsec &gt; 0) {<a name="line.967"></a>
-<span class="sourceLineNo">968</span>      return periodicRollMsec - getMillisFromLastRoll();<a name="line.968"></a>
+<span class="sourceLineNo">822</span><a name="line.822"></a>
+<span class="sourceLineNo">823</span>            waitCond.await(getMillisToNextPeriodicRoll(), TimeUnit.MILLISECONDS);<a name="line.823"></a>
+<span class="sourceLineNo">824</span>            if (slotIndex == 0) {<a name="line.824"></a>
+<span class="sourceLineNo">825</span>              // no data.. probably a stop() or a periodic roll<a name="line.825"></a>
+<span class="sourceLineNo">826</span>              continue;<a name="line.826"></a>
+<span class="sourceLineNo">827</span>            }<a name="line.827"></a>
+<span class="sourceLineNo">828</span>          }<a name="line.828"></a>
+<span class="sourceLineNo">829</span>          // Wait SYNC_WAIT_MSEC or the signal of "slots full" before flushing<a name="line.829"></a>
+<span class="sourceLineNo">830</span>          syncMaxSlot = runningProcCount;<a name="line.830"></a>
+<span class="sourceLineNo">831</span>          assert syncMaxSlot &gt; 0 : "unexpected syncMaxSlot=" + syncMaxSlot;<a name="line.831"></a>
+<span class="sourceLineNo">832</span>          final long syncWaitSt = System.currentTimeMillis();<a name="line.832"></a>
+<span class="sourceLineNo">833</span>          if (slotIndex != syncMaxSlot) {<a name="line.833"></a>
+<span class="sourceLineNo">834</span>            slotCond.await(syncWaitMsec, TimeUnit.MILLISECONDS);<a name="line.834"></a>
+<span class="sourceLineNo">835</span>          }<a name="line.835"></a>
+<span class="sourceLineNo">836</span><a name="line.836"></a>
+<span class="sourceLineNo">837</span>          final long currentTs = System.currentTimeMillis();<a name="line.837"></a>
+<span class="sourceLineNo">838</span>          final long syncWaitMs = currentTs - syncWaitSt;<a name="line.838"></a>
+<span class="sourceLineNo">839</span>          final float rollSec = getMillisFromLastRoll() / 1000.0f;<a name="line.839"></a>
+<span class="sourceLineNo">840</span>          final float syncedPerSec = totalSyncedToStore / rollSec;<a name="line.840"></a>
+<span class="sourceLineNo">841</span>          if (LOG.isTraceEnabled() &amp;&amp; (syncWaitMs &gt; 10 || slotIndex &lt; syncMaxSlot)) {<a name="line.841"></a>
+<span class="sourceLineNo">842</span>            LOG.trace(String.format("Sync wait %s, slotIndex=%s , totalSynced=%s (%s/sec)",<a name="line.842"></a>
+<span class="sourceLineNo">843</span>                      StringUtils.humanTimeDiff(syncWaitMs), slotIndex,<a name="line.843"></a>
+<span class="sourceLineNo">844</span>                      StringUtils.humanSize(totalSyncedToStore),<a name="line.844"></a>
+<span class="sourceLineNo">845</span>                      StringUtils.humanSize(syncedPerSec)));<a name="line.845"></a>
+<span class="sourceLineNo">846</span>          }<a name="line.846"></a>
+<span class="sourceLineNo">847</span><a name="line.847"></a>
+<span class="sourceLineNo">848</span>          // update webui circular buffers (TODO: get rid of allocations)<a name="line.848"></a>
+<span class="sourceLineNo">849</span>          final SyncMetrics syncMetrics = new SyncMetrics();<a name="line.849"></a>
+<span class="sourceLineNo">850</span>          syncMetrics.timestamp = currentTs;<a name="line.850"></a>
+<span class="sourceLineNo">851</span>          syncMetrics.syncWaitMs = syncWaitMs;<a name="line.851"></a>
+<span class="sourceLineNo">852</span>          syncMetrics.syncedEntries = slotIndex;<a name="line.852"></a>
+<span class="sourceLineNo">853</span>          syncMetrics.totalSyncedBytes = totalSyncedToStore;<a name="line.853"></a>
+<span class="sourceLineNo">854</span>          syncMetrics.syncedPerSec = syncedPerSec;<a name="line.854"></a>
+<span class="sourceLineNo">855</span>          syncMetricsQueue.add(syncMetrics);<a name="line.855"></a>
+<span class="sourceLineNo">856</span><a name="line.856"></a>
+<span class="sourceLineNo">857</span>          // sync<a name="line.857"></a>
+<span class="sourceLineNo">858</span>          inSync.set(true);<a name="line.858"></a>
+<span class="sourceLineNo">859</span>          long slotSize = syncSlots();<a name="line.859"></a>
+<span class="sourceLineNo">860</span>          logs.getLast().addToSize(slotSize);<a name="line.860"></a>
+<span class="sourceLineNo">861</span>          totalSyncedToStore = totalSynced.addAndGet(slotSize);<a name="line.861"></a>
+<span class="sourceLineNo">862</span>          slotIndex = 0;<a name="line.862"></a>
+<span class="sourceLineNo">863</span>          inSync.set(false);<a name="line.863"></a>
+<span class="sourceLineNo">864</span>          syncId.incrementAndGet();<a name="line.864"></a>
+<span class="sourceLineNo">865</span>        } catch (InterruptedException e) {<a name="line.865"></a>
+<span class="sourceLineNo">866</span>          Thread.currentThread().interrupt();<a name="line.866"></a>
+<span class="sourceLineNo">867</span>          syncException.compareAndSet(null, e);<a name="line.867"></a>
+<span class="sourceLineNo">868</span>          sendAbortProcessSignal();<a name="line.868"></a>
+<span class="sourceLineNo">869</span>          throw e;<a name="line.869"></a>
+<span class="sourceLineNo">870</span>        } catch (Throwable t) {<a name="line.870"></a>
+<span class="sourceLineNo">871</span>          syncException.compareAndSet(null, t);<a name="line.871"></a>
+<span class="sourceLineNo">872</span>          sendAbortProcessSignal();<a name="line.872"></a>
+<span class="sourceLineNo">873</span>          throw t;<a name="line.873"></a>
+<span class="sourceLineNo">874</span>        } finally {<a name="line.874"></a>
+<span class="sourceLineNo">875</span>          syncCond.signalAll();<a name="line.875"></a>
+<span class="sourceLineNo">876</span>        }<a name="line.876"></a>
+<span class="sourceLineNo">877</span>      }<a name="line.877"></a>
+<span class="sourceLineNo">878</span>    } finally {<a name="line.878"></a>
+<span class="sourceLineNo">879</span>      lock.unlock();<a name="line.879"></a>
+<span class="sourceLineNo">880</span>    }<a name="line.880"></a>
+<span class="sourceLineNo">881</span>  }<a name="line.881"></a>
+<span class="sourceLineNo">882</span><a name="line.882"></a>
+<span class="sourceLineNo">883</span>  public ArrayList&lt;SyncMetrics&gt; getSyncMetrics() {<a name="line.883"></a>
+<span class="sourceLineNo">884</span>    lock.lock();<a name="line.884"></a>
+<span class="sourceLineNo">885</span>    try {<a name="line.885"></a>
+<span class="sourceLineNo">886</span>      return new ArrayList&lt;&gt;(syncMetricsQueue);<a name="line.886"></a>
+<span class="sourceLineNo">887</span>    } finally {<a name="line.887"></a>
+<span class="sourceLineNo">888</span>      lock.unlock();<a name="line.888"></a>
+<span class="sourceLineNo">889</span>    }<a name="line.889"></a>
+<span class="sourceLineNo">890</span>  }<a name="line.890"></a>
+<span class="sourceLineNo">891</span><a name="line.891"></a>
+<span class="sourceLineNo">892</span>  private long syncSlots() throws Throwable {<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    int retry = 0;<a name="line.893"></a>
+<span clas

<TRUNCATED>