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 2017/04/06 20:01:02 UTC

[01/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site 982c62446 -> ddcd3ebf2


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html
index 2e4ac3a..3e678dc 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.50">TestProcedureAdmin</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.49">TestProcedureAdmin</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -245,7 +245,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.51">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.50">LOG</a></pre>
 </li>
 </ul>
 <a name="UTIL">
@@ -254,7 +254,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>UTIL</h4>
-<pre>protected static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.53">UTIL</a></pre>
+<pre>protected static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.52">UTIL</a></pre>
 </li>
 </ul>
 <a name="name">
@@ -263,7 +263,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>name</h4>
-<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.56">name</a></pre>
+<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.55">name</a></pre>
 </li>
 </ul>
 </li>
@@ -280,7 +280,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestProcedureAdmin</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.50">TestProcedureAdmin</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.49">TestProcedureAdmin</a>()</pre>
 </li>
 </ul>
 </li>
@@ -297,7 +297,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setupConf</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.58">setupConf</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.57">setupConf</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
 <a name="setupCluster--">
@@ -306,7 +306,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setupCluster</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.63">setupCluster</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.62">setupCluster</a>()
                          throws <a href="http://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>
@@ -320,7 +320,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupTest</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.69">cleanupTest</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.68">cleanupTest</a>()
                         throws <a href="http://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>
@@ -334,7 +334,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.78">setup</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.77">setup</a>()
            throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -348,7 +348,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.85">tearDown</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.84">tearDown</a>()
               throws <a href="http://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>
@@ -362,7 +362,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testAbortProcedureSuccess</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.95">testAbortProcedureSuccess</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.94">testAbortProcedureSuccess</a>()
                                throws <a href="http://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>
@@ -376,7 +376,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testAbortProcedureFailure</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.120">testAbortProcedureFailure</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.119">testAbortProcedureFailure</a>()
                                throws <a href="http://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>
@@ -390,7 +390,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testAbortProcedureInterruptedNotAllowed</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.152">testAbortProcedureInterruptedNotAllowed</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.151">testAbortProcedureInterruptedNotAllowed</a>()
                                              throws <a href="http://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>
@@ -404,7 +404,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testAbortNonExistProcedure</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.180">testAbortNonExistProcedure</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.179">testAbortNonExistProcedure</a>()
                                 throws <a href="http://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>
@@ -418,7 +418,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testListProcedure</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.194">testListProcedure</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.193">testListProcedure</a>()
                        throws <a href="http://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>
@@ -432,7 +432,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getMasterProcedureExecutor</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.procedure2.ProcedureExecutor&lt;org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.230">getMasterProcedureExecutor</a>()</pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.procedure2.ProcedureExecutor&lt;org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html#line.229">getMasterProcedureExecutor</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html
index 4550131..59b6575 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/master/procedure/TestProcedureAdmin.html
@@ -33,212 +33,211 @@
 <span class="sourceLineNo">025</span>import org.apache.commons.logging.LogFactory;<a name="line.25"></a>
 <span class="sourceLineNo">026</span>import org.apache.hadoop.conf.Configuration;<a name="line.26"></a>
 <span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HConstants;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.ProcedureInfo;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.ProcedureState;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.TableName;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.junit.After;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.junit.AfterClass;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.junit.Before;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.junit.BeforeClass;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.junit.Rule;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.junit.Test;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.junit.experimental.categories.Category;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.junit.rules.TestName;<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span>import static org.junit.Assert.*;<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>@Category({MasterTests.class, MediumTests.class})<a name="line.49"></a>
-<span class="sourceLineNo">050</span>public class TestProcedureAdmin {<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  private static final Log LOG = LogFactory.getLog(TestProcedureAdmin.class);<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  protected 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>  @Rule<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  public TestName name = new TestName();<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  private static void setupConf(Configuration conf) {<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, 1);<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  }<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  @BeforeClass<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  public static void setupCluster() throws Exception {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    setupConf(UTIL.getConfiguration());<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    UTIL.startMiniCluster(1);<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  }<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>  @AfterClass<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  public static void cleanupTest() throws Exception {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    try {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      UTIL.shutdownMiniCluster();<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    } catch (Exception e) {<a name="line.72"></a>
-<span class="sourceLineNo">073</span>      LOG.warn("failure shutting down cluster", e);<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    }<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  }<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  @Before<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  public void setup() throws Exception {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false);<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    assertTrue("expected executor to be running", procExec.isRunning());<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  }<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  @After<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  public void tearDown() throws Exception {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    assertTrue("expected executor to be running", getMasterProcedureExecutor().isRunning());<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(getMasterProcedureExecutor(), false);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    for (HTableDescriptor htd: UTIL.getAdmin().listTables()) {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>      LOG.info("Tear down, remove table=" + htd.getTableName());<a name="line.89"></a>
-<span class="sourceLineNo">090</span>      UTIL.deleteTable(htd.getTableName());<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    }<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  }<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>  @Test(timeout=60000)<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  public void testAbortProcedureSuccess() throws Exception {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.97"></a>
-<span class="sourceLineNo">098</span><a name="line.98"></a>
-<span class="sourceLineNo">099</span>    MasterProcedureTestingUtility.createTable(procExec, tableName, null, "f");<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    // Submit an abortable procedure<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    long procId = procExec.submitProcedure(<a name="line.103"></a>
-<span class="sourceLineNo">104</span>        new DisableTableProcedure(procExec.getEnvironment(), tableName, false));<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    // Wait for one step to complete<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    ProcedureTestingUtility.waitProcedure(procExec, procId);<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>    boolean abortResult = procExec.abort(procId, true);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    assertTrue(abortResult);<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>    MasterProcedureTestingUtility.testRestartWithAbort(procExec, procId);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    // Validate the disable table procedure was aborted successfully<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    MasterProcedureTestingUtility.validateTableIsEnabled(<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      UTIL.getHBaseCluster().getMaster(),<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      tableName);<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>  @Test(timeout=60000)<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  public void testAbortProcedureFailure() throws Exception {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>    HRegionInfo[] regions =<a name="line.124"></a>
-<span class="sourceLineNo">125</span>        MasterProcedureTestingUtility.createTable(procExec, tableName, null, "f");<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    UTIL.getAdmin().disableTable(tableName);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    // Submit an un-abortable procedure<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    long procId = procExec.submitProcedure(<a name="line.130"></a>
-<span class="sourceLineNo">131</span>        new DeleteTableProcedure(procExec.getEnvironment(), tableName));<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    // Wait for a couple of steps to complete (first step "prepare" is abortable)<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    ProcedureTestingUtility.waitProcedure(procExec, procId);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    for (int i = 0; i &lt; 2; ++i) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      ProcedureTestingUtility.assertProcNotYetCompleted(procExec, procId);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      ProcedureTestingUtility.restart(procExec);<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      ProcedureTestingUtility.waitProcedure(procExec, procId);<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>    boolean abortResult = procExec.abort(procId, true);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    assertFalse(abortResult);<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>    MasterProcedureTestingUtility.testRestartWithAbort(procExec, procId);<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    ProcedureTestingUtility.assertProcNotFailed(procExec, procId);<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    // Validate the delete table procedure was not aborted<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    MasterProcedureTestingUtility.validateTableDeletion(<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      UTIL.getHBaseCluster().getMaster(), tableName);<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  }<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>  @Test(timeout=60000)<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  public void testAbortProcedureInterruptedNotAllowed() throws Exception {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span>    HRegionInfo[] regions =<a name="line.156"></a>
-<span class="sourceLineNo">157</span>        MasterProcedureTestingUtility.createTable(procExec, tableName, null, "f");<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    // Submit a procedure<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    long procId = procExec.submitProcedure(<a name="line.161"></a>
-<span class="sourceLineNo">162</span>        new DisableTableProcedure(procExec.getEnvironment(), tableName, true));<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    // Wait for one step to complete<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    ProcedureTestingUtility.waitProcedure(procExec, procId);<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>    // Set the mayInterruptIfRunning flag to false<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    boolean abortResult = procExec.abort(procId, false);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    assertFalse(abortResult);<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    ProcedureTestingUtility.restart(procExec);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    ProcedureTestingUtility.assertProcNotFailed(procExec, procId);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    // Validate the delete table procedure was not aborted<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    MasterProcedureTestingUtility.validateTableIsDisabled(<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      UTIL.getHBaseCluster().getMaster(), tableName);<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span>  @Test(timeout=60000)<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  public void testAbortNonExistProcedure() throws Exception {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    Random randomGenerator = new Random();<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    long procId;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    // Generate a non-existing procedure<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    do {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      procId = randomGenerator.nextLong();<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    } while (procExec.getResult(procId) != null);<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>    boolean abortResult = procExec.abort(procId, true);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    assertFalse(abortResult);<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>  @Test(timeout=60000)<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  public void testListProcedure() throws Exception {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span>    MasterProcedureTestingUtility.createTable(procExec, tableName, null, "f");<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true);<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>    long procId = procExec.submitProcedure(<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      new DisableTableProcedure(procExec.getEnvironment(), tableName, false));<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    // Wait for one step to complete<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    ProcedureTestingUtility.waitProcedure(procExec, procId);<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>    List&lt;ProcedureInfo&gt; listProcedures = procExec.listProcedures();<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    assertTrue(listProcedures.size() &gt;= 1);<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    boolean found = false;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    for (ProcedureInfo procInfo: listProcedures) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      if (procInfo.getProcId() == procId) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        assertTrue(procInfo.getProcState() == ProcedureState.RUNNABLE);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        found = true;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      } else {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        assertTrue(procInfo.getProcState() == ProcedureState.FINISHED);<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>    assertTrue(found);<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    ProcedureTestingUtility.restart(procExec);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    ProcedureTestingUtility.assertProcNotFailed(procExec, procId);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    listProcedures = procExec.listProcedures();<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    for (ProcedureInfo procInfo: listProcedures) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      assertTrue(procInfo.getProcState() == ProcedureState.FINISHED);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    }<a name="line.227"></a>
-<span class="sourceLineNo">228</span>  }<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>  private ProcedureExecutor&lt;MasterProcedureEnv&gt; getMasterProcedureExecutor() {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    return UTIL.getHBaseCluster().getMaster().getMasterProcedureExecutor();<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
-<span class="sourceLineNo">233</span>}<a name="line.233"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HTableDescriptor;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.ProcedureInfo;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.ProcedureState;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.TableName;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.procedure2.ProcedureExecutor;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.junit.After;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.junit.AfterClass;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.junit.Before;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.junit.BeforeClass;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.junit.Rule;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.junit.Test;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.junit.experimental.categories.Category;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.junit.rules.TestName;<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span>import static org.junit.Assert.*;<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>@Category({MasterTests.class, MediumTests.class})<a name="line.48"></a>
+<span class="sourceLineNo">049</span>public class TestProcedureAdmin {<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private static final Log LOG = LogFactory.getLog(TestProcedureAdmin.class);<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  protected static final HBaseTestingUtility UTIL = new HBaseTestingUtility();<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  @Rule<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  public TestName name = new TestName();<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private static void setupConf(Configuration conf) {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    conf.setInt(MasterProcedureConstants.MASTER_PROCEDURE_THREADS, 1);<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  }<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>  @BeforeClass<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public static void setupCluster() throws Exception {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    setupConf(UTIL.getConfiguration());<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    UTIL.startMiniCluster(1);<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  }<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>  @AfterClass<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  public static void cleanupTest() throws Exception {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    try {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>      UTIL.shutdownMiniCluster();<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    } catch (Exception e) {<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      LOG.warn("failure shutting down cluster", e);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    }<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  }<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>  @Before<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  public void setup() throws Exception {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false);<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    assertTrue("expected executor to be running", procExec.isRunning());<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  }<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>  @After<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public void tearDown() throws Exception {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    assertTrue("expected executor to be running", getMasterProcedureExecutor().isRunning());<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(getMasterProcedureExecutor(), false);<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    for (HTableDescriptor htd: UTIL.getAdmin().listTables()) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      LOG.info("Tear down, remove table=" + htd.getTableName());<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      UTIL.deleteTable(htd.getTableName());<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  }<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  @Test(timeout=60000)<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  public void testAbortProcedureSuccess() throws Exception {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>    MasterProcedureTestingUtility.createTable(procExec, tableName, null, "f");<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    // Submit an abortable procedure<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    long procId = procExec.submitProcedure(<a name="line.102"></a>
+<span class="sourceLineNo">103</span>        new DisableTableProcedure(procExec.getEnvironment(), tableName, false));<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    // Wait for one step to complete<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    ProcedureTestingUtility.waitProcedure(procExec, procId);<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>    boolean abortResult = procExec.abort(procId, true);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    assertTrue(abortResult);<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>    MasterProcedureTestingUtility.testRestartWithAbort(procExec, procId);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    // Validate the disable table procedure was aborted successfully<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    MasterProcedureTestingUtility.validateTableIsEnabled(<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      UTIL.getHBaseCluster().getMaster(),<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      tableName);<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>  @Test(timeout=60000)<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  public void testAbortProcedureFailure() throws Exception {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>    HRegionInfo[] regions =<a name="line.123"></a>
+<span class="sourceLineNo">124</span>        MasterProcedureTestingUtility.createTable(procExec, tableName, null, "f");<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    UTIL.getAdmin().disableTable(tableName);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // Submit an un-abortable procedure<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    long procId = procExec.submitProcedure(<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        new DeleteTableProcedure(procExec.getEnvironment(), tableName));<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    // Wait for a couple of steps to complete (first step "prepare" is abortable)<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    ProcedureTestingUtility.waitProcedure(procExec, procId);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    for (int i = 0; i &lt; 2; ++i) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      ProcedureTestingUtility.assertProcNotYetCompleted(procExec, procId);<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      ProcedureTestingUtility.restart(procExec);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      ProcedureTestingUtility.waitProcedure(procExec, procId);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    }<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>    boolean abortResult = procExec.abort(procId, true);<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    assertFalse(abortResult);<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>    MasterProcedureTestingUtility.testRestartWithAbort(procExec, procId);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    ProcedureTestingUtility.assertProcNotFailed(procExec, procId);<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // Validate the delete table procedure was not aborted<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    MasterProcedureTestingUtility.validateTableDeletion(<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      UTIL.getHBaseCluster().getMaster(), tableName);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>  @Test(timeout=60000)<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public void testAbortProcedureInterruptedNotAllowed() throws Exception {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>    HRegionInfo[] regions =<a name="line.155"></a>
+<span class="sourceLineNo">156</span>        MasterProcedureTestingUtility.createTable(procExec, tableName, null, "f");<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    // Submit a procedure<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    long procId = procExec.submitProcedure(<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        new DisableTableProcedure(procExec.getEnvironment(), tableName, true));<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // Wait for one step to complete<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    ProcedureTestingUtility.waitProcedure(procExec, procId);<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>    // Set the mayInterruptIfRunning flag to false<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    boolean abortResult = procExec.abort(procId, false);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    assertFalse(abortResult);<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    ProcedureTestingUtility.restart(procExec);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    ProcedureTestingUtility.assertProcNotFailed(procExec, procId);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    // Validate the delete table procedure was not aborted<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    MasterProcedureTestingUtility.validateTableIsDisabled(<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      UTIL.getHBaseCluster().getMaster(), tableName);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span>  @Test(timeout=60000)<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  public void testAbortNonExistProcedure() throws Exception {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    Random randomGenerator = new Random();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    long procId;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    // Generate a non-existing procedure<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    do {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      procId = randomGenerator.nextLong();<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    } while (procExec.getResult(procId) != null);<a name="line.186"></a>
+<span class="sourceLineNo">187</span><a name="line.187"></a>
+<span class="sourceLineNo">188</span>    boolean abortResult = procExec.abort(procId, true);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    assertFalse(abortResult);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  }<a name="line.190"></a>
+<span class="sourceLineNo">191</span><a name="line.191"></a>
+<span class="sourceLineNo">192</span>  @Test(timeout=60000)<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  public void testListProcedure() throws Exception {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    final ProcedureExecutor&lt;MasterProcedureEnv&gt; procExec = getMasterProcedureExecutor();<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>    MasterProcedureTestingUtility.createTable(procExec, tableName, null, "f");<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, true);<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    long procId = procExec.submitProcedure(<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      new DisableTableProcedure(procExec.getEnvironment(), tableName, false));<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    // Wait for one step to complete<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    ProcedureTestingUtility.waitProcedure(procExec, procId);<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>    List&lt;ProcedureInfo&gt; listProcedures = procExec.listProcedures();<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    assertTrue(listProcedures.size() &gt;= 1);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    boolean found = false;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    for (ProcedureInfo procInfo: listProcedures) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      if (procInfo.getProcId() == procId) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        assertTrue(procInfo.getProcState() == ProcedureState.RUNNABLE);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        found = true;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      } else {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        assertTrue(procInfo.getProcState() == ProcedureState.SUCCESS);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      }<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    assertTrue(found);<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>    ProcedureTestingUtility.setKillAndToggleBeforeStoreUpdate(procExec, false);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    ProcedureTestingUtility.restart(procExec);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    ProcedureTestingUtility.waitNoProcedureRunning(procExec);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    ProcedureTestingUtility.assertProcNotFailed(procExec, procId);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    listProcedures = procExec.listProcedures();<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    for (ProcedureInfo procInfo: listProcedures) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      assertTrue(procInfo.getProcState() == ProcedureState.SUCCESS);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  }<a name="line.227"></a>
+<span class="sourceLineNo">228</span><a name="line.228"></a>
+<span class="sourceLineNo">229</span>  private ProcedureExecutor&lt;MasterProcedureEnv&gt; getMasterProcedureExecutor() {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    return UTIL.getHBaseCluster().getMaster().getMasterProcedureExecutor();<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.LoadCounter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.LoadCounter.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.LoadCounter.html
index be897f7..0da6f6e 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.LoadCounter.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.LoadCounter.html
@@ -417,7 +417,7 @@
 <span class="sourceLineNo">409</span>    }<a name="line.409"></a>
 <span class="sourceLineNo">410</span><a name="line.410"></a>
 <span class="sourceLineNo">411</span>    public void setFinishedState() {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      setState(ProcedureState.FINISHED);<a name="line.412"></a>
+<span class="sourceLineNo">412</span>      setState(ProcedureState.SUCCESS);<a name="line.412"></a>
 <span class="sourceLineNo">413</span>    }<a name="line.413"></a>
 <span class="sourceLineNo">414</span><a name="line.414"></a>
 <span class="sourceLineNo">415</span>    public void setData(final byte[] data) {<a name="line.415"></a>
@@ -531,7 +531,7 @@
 <span class="sourceLineNo">523</span>    public void load(ProcedureIterator procIter) throws IOException {<a name="line.523"></a>
 <span class="sourceLineNo">524</span>      while (procIter.hasNext()) {<a name="line.524"></a>
 <span class="sourceLineNo">525</span>        long procId;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>        if (procIter.isNextCompleted()) {<a name="line.526"></a>
+<span class="sourceLineNo">526</span>        if (procIter.isNextFinished()) {<a name="line.526"></a>
 <span class="sourceLineNo">527</span>          ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.527"></a>
 <span class="sourceLineNo">528</span>          procId = proc.getProcId();<a name="line.528"></a>
 <span class="sourceLineNo">529</span>          LOG.debug("loading completed procId=" + procId + ": " + proc);<a name="line.529"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.NoopProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.NoopProcedure.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.NoopProcedure.html
index be897f7..0da6f6e 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.NoopProcedure.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.NoopProcedure.html
@@ -417,7 +417,7 @@
 <span class="sourceLineNo">409</span>    }<a name="line.409"></a>
 <span class="sourceLineNo">410</span><a name="line.410"></a>
 <span class="sourceLineNo">411</span>    public void setFinishedState() {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      setState(ProcedureState.FINISHED);<a name="line.412"></a>
+<span class="sourceLineNo">412</span>      setState(ProcedureState.SUCCESS);<a name="line.412"></a>
 <span class="sourceLineNo">413</span>    }<a name="line.413"></a>
 <span class="sourceLineNo">414</span><a name="line.414"></a>
 <span class="sourceLineNo">415</span>    public void setData(final byte[] data) {<a name="line.415"></a>
@@ -531,7 +531,7 @@
 <span class="sourceLineNo">523</span>    public void load(ProcedureIterator procIter) throws IOException {<a name="line.523"></a>
 <span class="sourceLineNo">524</span>      while (procIter.hasNext()) {<a name="line.524"></a>
 <span class="sourceLineNo">525</span>        long procId;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>        if (procIter.isNextCompleted()) {<a name="line.526"></a>
+<span class="sourceLineNo">526</span>        if (procIter.isNextFinished()) {<a name="line.526"></a>
 <span class="sourceLineNo">527</span>          ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.527"></a>
 <span class="sourceLineNo">528</span>          procId = proc.getProcId();<a name="line.528"></a>
 <span class="sourceLineNo">529</span>          LOG.debug("loading completed procId=" + procId + ": " + proc);<a name="line.529"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html
index be897f7..0da6f6e 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html
@@ -417,7 +417,7 @@
 <span class="sourceLineNo">409</span>    }<a name="line.409"></a>
 <span class="sourceLineNo">410</span><a name="line.410"></a>
 <span class="sourceLineNo">411</span>    public void setFinishedState() {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      setState(ProcedureState.FINISHED);<a name="line.412"></a>
+<span class="sourceLineNo">412</span>      setState(ProcedureState.SUCCESS);<a name="line.412"></a>
 <span class="sourceLineNo">413</span>    }<a name="line.413"></a>
 <span class="sourceLineNo">414</span><a name="line.414"></a>
 <span class="sourceLineNo">415</span>    public void setData(final byte[] data) {<a name="line.415"></a>
@@ -531,7 +531,7 @@
 <span class="sourceLineNo">523</span>    public void load(ProcedureIterator procIter) throws IOException {<a name="line.523"></a>
 <span class="sourceLineNo">524</span>      while (procIter.hasNext()) {<a name="line.524"></a>
 <span class="sourceLineNo">525</span>        long procId;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>        if (procIter.isNextCompleted()) {<a name="line.526"></a>
+<span class="sourceLineNo">526</span>        if (procIter.isNextFinished()) {<a name="line.526"></a>
 <span class="sourceLineNo">527</span>          ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.527"></a>
 <span class="sourceLineNo">528</span>          procId = proc.getProcId();<a name="line.528"></a>
 <span class="sourceLineNo">529</span>          LOG.debug("loading completed procId=" + procId + ": " + proc);<a name="line.529"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.html
index be897f7..0da6f6e 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.html
@@ -417,7 +417,7 @@
 <span class="sourceLineNo">409</span>    }<a name="line.409"></a>
 <span class="sourceLineNo">410</span><a name="line.410"></a>
 <span class="sourceLineNo">411</span>    public void setFinishedState() {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      setState(ProcedureState.FINISHED);<a name="line.412"></a>
+<span class="sourceLineNo">412</span>      setState(ProcedureState.SUCCESS);<a name="line.412"></a>
 <span class="sourceLineNo">413</span>    }<a name="line.413"></a>
 <span class="sourceLineNo">414</span><a name="line.414"></a>
 <span class="sourceLineNo">415</span>    public void setData(final byte[] data) {<a name="line.415"></a>
@@ -531,7 +531,7 @@
 <span class="sourceLineNo">523</span>    public void load(ProcedureIterator procIter) throws IOException {<a name="line.523"></a>
 <span class="sourceLineNo">524</span>      while (procIter.hasNext()) {<a name="line.524"></a>
 <span class="sourceLineNo">525</span>        long procId;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>        if (procIter.isNextCompleted()) {<a name="line.526"></a>
+<span class="sourceLineNo">526</span>        if (procIter.isNextFinished()) {<a name="line.526"></a>
 <span class="sourceLineNo">527</span>          ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.527"></a>
 <span class="sourceLineNo">528</span>          procId = proc.getProcId();<a name="line.528"></a>
 <span class="sourceLineNo">529</span>          LOG.debug("loading completed procId=" + procId + ": " + proc);<a name="line.529"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALLoaderPerformanceEvaluation.LoadCounter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALLoaderPerformanceEvaluation.LoadCounter.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALLoaderPerformanceEvaluation.LoadCounter.html
index 5205e44..d82d744 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALLoaderPerformanceEvaluation.LoadCounter.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALLoaderPerformanceEvaluation.LoadCounter.html
@@ -90,7 +90,7 @@
 <span class="sourceLineNo">082</span>    @Override<a name="line.82"></a>
 <span class="sourceLineNo">083</span>    public void load(ProcedureIterator procIter) throws IOException {<a name="line.83"></a>
 <span class="sourceLineNo">084</span>      while (procIter.hasNext()) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>        if (procIter.isNextCompleted()) {<a name="line.85"></a>
+<span class="sourceLineNo">085</span>        if (procIter.isNextFinished()) {<a name="line.85"></a>
 <span class="sourceLineNo">086</span>          ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.86"></a>
 <span class="sourceLineNo">087</span>        } else {<a name="line.87"></a>
 <span class="sourceLineNo">088</span>          Procedure proc = procIter.nextAsProcedure();<a name="line.88"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALLoaderPerformanceEvaluation.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALLoaderPerformanceEvaluation.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALLoaderPerformanceEvaluation.html
index 5205e44..d82d744 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALLoaderPerformanceEvaluation.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALLoaderPerformanceEvaluation.html
@@ -90,7 +90,7 @@
 <span class="sourceLineNo">082</span>    @Override<a name="line.82"></a>
 <span class="sourceLineNo">083</span>    public void load(ProcedureIterator procIter) throws IOException {<a name="line.83"></a>
 <span class="sourceLineNo">084</span>      while (procIter.hasNext()) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>        if (procIter.isNextCompleted()) {<a name="line.85"></a>
+<span class="sourceLineNo">085</span>        if (procIter.isNextFinished()) {<a name="line.85"></a>
 <span class="sourceLineNo">086</span>          ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.86"></a>
 <span class="sourceLineNo">087</span>        } else {<a name="line.87"></a>
 <span class="sourceLineNo">088</span>          Procedure proc = procIter.nextAsProcedure();<a name="line.88"></a>


[17/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.DelayedProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.DelayedProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.DelayedProcedure.html
index 35cebd9..b6b4cb6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.DelayedProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.DelayedProcedure.html
@@ -321,7 +321,7 @@
 <span class="sourceLineNo">313</span>      final NonceKey nonceKey;<a name="line.313"></a>
 <span class="sourceLineNo">314</span>      final long procId;<a name="line.314"></a>
 <span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>      if (procIter.isNextCompleted()) {<a name="line.316"></a>
+<span class="sourceLineNo">316</span>      if (procIter.isNextFinished()) {<a name="line.316"></a>
 <span class="sourceLineNo">317</span>        ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.317"></a>
 <span class="sourceLineNo">318</span>        nonceKey = proc.getNonceKey();<a name="line.318"></a>
 <span class="sourceLineNo">319</span>        procId = proc.getProcId();<a name="line.319"></a>
@@ -359,7 +359,7 @@
 <span class="sourceLineNo">351</span>    HashSet&lt;Procedure&gt; waitingSet = null;<a name="line.351"></a>
 <span class="sourceLineNo">352</span>    procIter.reset();<a name="line.352"></a>
 <span class="sourceLineNo">353</span>    while (procIter.hasNext()) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (procIter.isNextCompleted()) {<a name="line.354"></a>
+<span class="sourceLineNo">354</span>      if (procIter.isNextFinished()) {<a name="line.354"></a>
 <span class="sourceLineNo">355</span>        procIter.skipNext();<a name="line.355"></a>
 <span class="sourceLineNo">356</span>        continue;<a name="line.356"></a>
 <span class="sourceLineNo">357</span>      }<a name="line.357"></a>
@@ -405,1450 +405,1448 @@
 <span class="sourceLineNo">397</span>          }<a name="line.397"></a>
 <span class="sourceLineNo">398</span>          waitingSet.add(proc);<a name="line.398"></a>
 <span class="sourceLineNo">399</span>          break;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        case FINISHED:<a name="line.400"></a>
-<span class="sourceLineNo">401</span>          if (proc.hasException()) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>            // add the proc to the scheduler to perform the rollback<a name="line.402"></a>
-<span class="sourceLineNo">403</span>            scheduler.addBack(proc);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          }<a name="line.404"></a>
-<span class="sourceLineNo">405</span>          break;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        case ROLLEDBACK:<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        case INITIALIZING:<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          LOG.error(msg);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          throw new UnsupportedOperationException(msg);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        default:<a name="line.411"></a>
-<span class="sourceLineNo">412</span>          break;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      }<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    // 3. Validate the stacks<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    int corruptedCount = 0;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    while (itStack.hasNext()) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      RootProcedureState procStack = entry.getValue();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      if (procStack.isValid()) continue;<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>      for (Procedure proc: procStack.getSubproceduresStack()) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        LOG.error("Corrupted " + proc);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        procedures.remove(proc.getProcId());<a name="line.426"></a>
-<span class="sourceLineNo">427</span>        runnableList.remove(proc);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        corruptedCount++;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      }<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      itStack.remove();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    // 4. Push the procedures to the timeout executor<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    if (waitingSet != null &amp;&amp; !waitingSet.isEmpty()) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      for (Procedure proc: waitingSet) {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        proc.afterReplay(getEnvironment());<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        timeoutExecutor.add(proc);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      }<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    }<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>    // 5. Push the procedure to the scheduler<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    if (!runnableList.isEmpty()) {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      // some procedure may be started way before this stuff.<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        Procedure proc = runnableList.get(i);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        proc.afterReplay(getEnvironment());<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        if (!proc.hasParent()) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        }<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        if (proc.wasExecuted()) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>          scheduler.addFront(proc);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        } else {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          // if it was not in execution, it can wait.<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          scheduler.addBack(proc);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        }<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    }<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>   * Start the procedure executor.<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   *<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * @param numThreads number of threads available for procedure execution.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   */<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    if (running.getAndSet(true)) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      LOG.warn("Already running");<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      return;<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>    // We have numThreads executor + one timer thread used for timing out<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    // procedures and triggering periodic procedures.<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    this.corePoolSize = numThreads;<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    LOG.info("Starting executor worker threads=" + corePoolSize);<a name="line.485"></a>
-<span class="sourceLineNo">486</span><a name="line.486"></a>
-<span class="sourceLineNo">487</span>    // Create the Thread Group for the executors<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    threadGroup = new ThreadGroup("ProcedureExecutor");<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>    // Create the timeout executor<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    timeoutExecutor = new TimeoutExecutorThread(threadGroup);<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>    // Create the workers<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    workerId.set(0);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    workerThreads = new CopyOnWriteArrayList&lt;&gt;();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    for (int i = 0; i &lt; corePoolSize; ++i) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      workerThreads.add(new WorkerThread(threadGroup));<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
+<span class="sourceLineNo">400</span>        case FAILED:<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          // add the proc to the scheduler to perform the rollback<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          scheduler.addBack(proc);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          break;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        case ROLLEDBACK:<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        case INITIALIZING:<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.406"></a>
+<span class="sourceLineNo">407</span>          LOG.error(msg);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>          throw new UnsupportedOperationException(msg);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        default:<a name="line.409"></a>
+<span class="sourceLineNo">410</span>          break;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    // 3. Validate the stacks<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    int corruptedCount = 0;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    while (itStack.hasNext()) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      RootProcedureState procStack = entry.getValue();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      if (procStack.isValid()) continue;<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span>      for (Procedure proc: procStack.getSubproceduresStack()) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        LOG.error("Corrupted " + proc);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        procedures.remove(proc.getProcId());<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        runnableList.remove(proc);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        corruptedCount++;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>      }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      itStack.remove();<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    }<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<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>    // 4. Push the procedures to the timeout executor<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    if (waitingSet != null &amp;&amp; !waitingSet.isEmpty()) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      for (Procedure proc: waitingSet) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        proc.afterReplay(getEnvironment());<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        timeoutExecutor.add(proc);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      }<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span>    // 5. Push the procedure to the scheduler<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    if (!runnableList.isEmpty()) {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      // some procedure may be started way before this stuff.<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>        Procedure proc = runnableList.get(i);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        proc.afterReplay(getEnvironment());<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        if (!proc.hasParent()) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        }<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        if (proc.wasExecuted()) {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          scheduler.addFront(proc);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>        } else {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          // if it was not in execution, it can wait.<a name="line.457"></a>
+<span class="sourceLineNo">458</span>          scheduler.addBack(proc);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      }<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  }<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>   * Start the procedure executor.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   *<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @param numThreads number of threads available for procedure execution.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   */<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    if (running.getAndSet(true)) {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      LOG.warn("Already running");<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      return;<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span><a name="line.479"></a>
+<span class="sourceLineNo">480</span>    // We have numThreads executor + one timer thread used for timing out<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    // procedures and triggering periodic procedures.<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    this.corePoolSize = numThreads;<a name="line.482"></a>
+<span class="sourceLineNo">483</span>    LOG.info("Starting executor worker threads=" + corePoolSize);<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // Create the Thread Group for the executors<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    threadGroup = new ThreadGroup("ProcedureExecutor");<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>    // Create the timeout executor<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    timeoutExecutor = new TimeoutExecutorThread(threadGroup);<a name="line.489"></a>
+<span class="sourceLineNo">490</span><a name="line.490"></a>
+<span class="sourceLineNo">491</span>    // Create the workers<a name="line.491"></a>
+<span class="sourceLineNo">492</span>    workerId.set(0);<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    workerThreads = new CopyOnWriteArrayList&lt;&gt;();<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    for (int i = 0; i &lt; corePoolSize; ++i) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      workerThreads.add(new WorkerThread(threadGroup));<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    }<a name="line.496"></a>
+<span class="sourceLineNo">497</span><a name="line.497"></a>
+<span class="sourceLineNo">498</span>    long st, et;<a name="line.498"></a>
 <span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>    long st, et;<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>    // Acquire the store lease.<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    store.recoverLease();<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    LOG.info(String.format("Recover store (%s) lease: %s",<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.507"></a>
-<span class="sourceLineNo">508</span><a name="line.508"></a>
-<span class="sourceLineNo">509</span>    // start the procedure scheduler<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    scheduler.start();<a name="line.510"></a>
-<span class="sourceLineNo">511</span><a name="line.511"></a>
-<span class="sourceLineNo">512</span>    // TODO: Split in two steps.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    // The first one will make sure that we have the latest id,<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    // so we can start the threads and accept new procedures.<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    // The second step will do the actual load of old procedures.<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    load(abortOnCorruption);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    LOG.info(String.format("Load store (%s): %s",<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (LOG.isTraceEnabled()) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.trace("Start workers " + workerThreads.size());<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    timeoutExecutor.start();<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    for (WorkerThread worker: workerThreads) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      worker.start();<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    // Internal chores<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    timeoutExecutor.add(new WorkerMonitor());<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>    // Add completed cleaner chore<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    addChore(new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  public void stop() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    if (!running.getAndSet(false)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>      return;<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>    LOG.info("Stopping");<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    scheduler.stop();<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    timeoutExecutor.sendStopSignal();<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  @VisibleForTesting<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  public void join() {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    assert !isRunning() : "expected not running";<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>    // stop the timeout executor<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    timeoutExecutor.awaitTermination();<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    timeoutExecutor = null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>    // stop the worker threads<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    for (WorkerThread worker: workerThreads) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      worker.awaitTermination();<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    workerThreads = null;<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    // Destroy the Thread Group for the executors<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    try {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      threadGroup.destroy();<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    } catch (IllegalThreadStateException e) {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      LOG.error("Thread group " + threadGroup + " contains running threads");<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      threadGroup.list();<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    } finally {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      threadGroup = null;<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>    // reset the in-memory state for testing<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    completed.clear();<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    rollbackStack.clear();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    procedures.clear();<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    nonceKeysToProcIdsMap.clear();<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    scheduler.clear();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    lastProcId.set(-1);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  }<a name="line.580"></a>
-<span class="sourceLineNo">581</span><a name="line.581"></a>
-<span class="sourceLineNo">582</span>  public void refreshConfiguration(final Configuration conf) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    this.conf = conf;<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  }<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
+<span class="sourceLineNo">500</span>    // Acquire the store lease.<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    store.recoverLease();<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    LOG.info(String.format("Recover store (%s) lease: %s",<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.505"></a>
+<span class="sourceLineNo">506</span><a name="line.506"></a>
+<span class="sourceLineNo">507</span>    // start the procedure scheduler<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    scheduler.start();<a name="line.508"></a>
+<span class="sourceLineNo">509</span><a name="line.509"></a>
+<span class="sourceLineNo">510</span>    // TODO: Split in two steps.<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    // The first one will make sure that we have the latest id,<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    // so we can start the threads and accept new procedures.<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    // The second step will do the actual load of old procedures.<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    load(abortOnCorruption);<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.517"></a>
+<span class="sourceLineNo">518</span>    LOG.info(String.format("Load store (%s): %s",<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    if (LOG.isTraceEnabled()) {<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      LOG.trace("Start workers " + workerThreads.size());<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    timeoutExecutor.start();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    for (WorkerThread worker: workerThreads) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      worker.start();<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
+<span class="sourceLineNo">529</span><a name="line.529"></a>
+<span class="sourceLineNo">530</span>    // Internal chores<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    timeoutExecutor.add(new WorkerMonitor());<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    // Add completed cleaner chore<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    addChore(new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.534"></a>
+<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>  public void stop() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    if (!running.getAndSet(false)) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      return;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    }<a name="line.540"></a>
+<span class="sourceLineNo">541</span><a name="line.541"></a>
+<span class="sourceLineNo">542</span>    LOG.info("Stopping");<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    scheduler.stop();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    timeoutExecutor.sendStopSignal();<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>  @VisibleForTesting<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  public void join() {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    assert !isRunning() : "expected not running";<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span>    // stop the timeout executor<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    timeoutExecutor.awaitTermination();<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    timeoutExecutor = null;<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    // stop the worker threads<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    for (WorkerThread worker: workerThreads) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      worker.awaitTermination();<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    workerThreads = null;<a name="line.559"></a>
+<span class="sourceLineNo">560</span><a name="line.560"></a>
+<span class="sourceLineNo">561</span>    // Destroy the Thread Group for the executors<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    try {<a name="line.562"></a>
+<span class="sourceLineNo">563</span>      threadGroup.destroy();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    } catch (IllegalThreadStateException e) {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      LOG.error("Thread group " + threadGroup + " contains running threads");<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      threadGroup.list();<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    } finally {<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      threadGroup = null;<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
+<span class="sourceLineNo">570</span><a name="line.570"></a>
+<span class="sourceLineNo">571</span>    // reset the in-memory state for testing<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    completed.clear();<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    rollbackStack.clear();<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    procedures.clear();<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    nonceKeysToProcIdsMap.clear();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    scheduler.clear();<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    lastProcId.set(-1);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
+<span class="sourceLineNo">579</span><a name="line.579"></a>
+<span class="sourceLineNo">580</span>  public void refreshConfiguration(final Configuration conf) {<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    this.conf = conf;<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.582"></a>
+<span class="sourceLineNo">583</span>        DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<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>  // ==========================================================================<a name="line.586"></a>
+<span class="sourceLineNo">587</span>  //  Accessors<a name="line.587"></a>
 <span class="sourceLineNo">588</span>  // ==========================================================================<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  //  Accessors<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  // ==========================================================================<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  public boolean isRunning() {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return running.get();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return the current number of worker threads.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   */<a name="line.597"></a>
-<span class="sourceLineNo">598</span>  public int getWorkerThreadCount() {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    return workerThreads.size();<a name="line.599"></a>
-<span class="sourceLineNo">600</span>  }<a name="line.600"></a>
-<span class="sourceLineNo">601</span><a name="line.601"></a>
-<span class="sourceLineNo">602</span>  /**<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   * @return the core pool size settings.<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   */<a name="line.604"></a>
-<span class="sourceLineNo">605</span>  public int getCorePoolSize() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    return corePoolSize;<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>  public int getActiveExecutorCount() {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    return activeExecutorCount.get();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  public TEnvironment getEnvironment() {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    return this.environment;<a name="line.614"></a>
-<span class="sourceLineNo">615</span>  }<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>  public ProcedureStore getStore() {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    return this.store;<a name="line.618"></a>
-<span class="sourceLineNo">619</span>  }<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>  protected ProcedureScheduler getScheduler() {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    return scheduler;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>  }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>  public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    this.scheduler.signalAll();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>  }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>  public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<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">589</span>  public boolean isRunning() {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    return running.get();<a name="line.590"></a>
+<span class="sourceLineNo">591</span>  }<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span>  /**<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @return the current number of worker threads.<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
+<span class="sourceLineNo">596</span>  public int getWorkerThreadCount() {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    return workerThreads.size();<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  }<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span>  /**<a name="line.600"></a>
+<span class="sourceLineNo">601</span>   * @return the core pool size settings.<a name="line.601"></a>
+<span class="sourceLineNo">602</span>   */<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  public int getCorePoolSize() {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    return corePoolSize;<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  }<a name="line.605"></a>
+<span class="sourceLineNo">606</span><a name="line.606"></a>
+<span class="sourceLineNo">607</span>  public int getActiveExecutorCount() {<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    return activeExecutorCount.get();<a name="line.608"></a>
+<span class="sourceLineNo">609</span>  }<a name="line.609"></a>
+<span class="sourceLineNo">610</span><a name="line.610"></a>
+<span class="sourceLineNo">611</span>  public TEnvironment getEnvironment() {<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    return this.environment;<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>  public ProcedureStore getStore() {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    return this.store;<a name="line.616"></a>
+<span class="sourceLineNo">617</span>  }<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>  protected ProcedureScheduler getScheduler() {<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    return scheduler;<a name="line.620"></a>
+<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>  public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    this.scheduler.signalAll();<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>  public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
+<span class="sourceLineNo">631</span><a name="line.631"></a>
+<span class="sourceLineNo">632</span>  // ==========================================================================<a name="line.632"></a>
+<span class="sourceLineNo">633</span>  //  Submit/Remove Chores<a name="line.633"></a>
 <span class="sourceLineNo">634</span>  // ==========================================================================<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  //  Submit/Remove Chores<a name="line.635"></a>
-<span class="sourceLineNo">636</span>  // ==========================================================================<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span>  /**<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * Add a chore procedure to the executor<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   * @param chore the chore to add<a name="line.640"></a>
-<span class="sourceLineNo">641</span>   */<a name="line.641"></a>
-<span class="sourceLineNo">642</span>  public void addChore(final ProcedureInMemoryChore chore) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    timeoutExecutor.add(chore);<a name="line.644"></a>
-<span class="sourceLineNo">645</span>  }<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>  /**<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   * Remove a chore procedure from the executor<a name="line.648"></a>
-<span class="sourceLineNo">649</span>   * @param chore the chore to remove<a name="line.649"></a>
-<span class="sourceLineNo">650</span>   * @return whether the chore is removed, or it will be removed later<a name="line.650"></a>
-<span class="sourceLineNo">651</span>   */<a name="line.651"></a>
-<span class="sourceLineNo">652</span>  public boolean removeChore(final ProcedureInMemoryChore chore) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    chore.setState(ProcedureState.FINISHED);<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    return timeoutExecutor.remove(chore);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>  }<a name="line.655"></a>
-<span class="sourceLineNo">656</span><a name="line.656"></a>
+<span class="sourceLineNo">635</span><a name="line.635"></a>
+<span class="sourceLineNo">636</span>  /**<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   * Add a chore procedure to the executor<a name="line.637"></a>
+<span class="sourceLineNo">638</span>   * @param chore the chore to add<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   */<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  public void addChore(final ProcedureInMemoryChore chore) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    timeoutExecutor.add(chore);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>  }<a name="line.643"></a>
+<span class="sourceLineNo">644</span><a name="line.644"></a>
+<span class="sourceLineNo">645</span>  /**<a name="line.645"></a>
+<span class="sourceLineNo">646</span>   * Remove a chore procedure from the executor<a name="line.646"></a>
+<span class="sourceLineNo">647</span>   * @param chore the chore to remove<a name="line.647"></a>
+<span class="sourceLineNo">648</span>   * @return whether the chore is removed, or it will be removed later<a name="line.648"></a>
+<span class="sourceLineNo">649</span>   */<a name="line.649"></a>
+<span class="sourceLineNo">650</span>  public boolean removeChore(final ProcedureInMemoryChore chore) {<a name="line.650"></a>
+<span class="sourceLineNo">651</span>    chore.setState(ProcedureState.SUCCESS);<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    return timeoutExecutor.remove(chore);<a name="line.652"></a>
+<span class="sourceLineNo">653</span>  }<a name="line.653"></a>
+<span class="sourceLineNo">654</span><a name="line.654"></a>
+<span class="sourceLineNo">655</span>  // ==========================================================================<a name="line.655"></a>
+<span class="sourceLineNo">656</span>  //  Nonce Procedure helpers<a name="line.656"></a>
 <span class="sourceLineNo">657</span>  // ==========================================================================<a name="line.657"></a>
-<span class="sourceLineNo">658</span>  //  Nonce Procedure helpers<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  // ==========================================================================<a name="line.659"></a>
-<span class="sourceLineNo">660</span>  /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * @param nonceGroup<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * @param nonce<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * @return the generated NonceKey<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>  }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>  /**<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   * Register a nonce for a procedure that is going to be submitted.<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   * A procId will be reserved and on submitProcedure(),<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   * the procedure with the specified nonce will take the reserved ProcId.<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   * otherwise an invalid procId will be returned. and the caller should procede<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   * and submit the procedure.<a name="line.676"></a>
-<span class="sourceLineNo">677</span>   *<a name="line.677"></a>
-<span class="sourceLineNo">678</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.678"></a>
-<span class="sourceLineNo">679</span>   * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.679"></a>
-<span class="sourceLineNo">680</span>   */<a name="line.680"></a>
-<span class="sourceLineNo">681</span>  public long registerNonce(final NonceKey nonceKey) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    if (nonceKey == null) return -1;<a name="line.682"></a>
-<span class="sourceLineNo">683</span><a name="line.683"></a>
-<span class="sourceLineNo">684</span>    // check if we have already a Reserved ID for the nonce<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    if (oldProcId == null) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      // reserve a new Procedure ID, this will be associated with the nonce<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      // and the procedure submitted with the specified nonce will use this ID.<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      final long newProcId = nextProcId();<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.690"></a>
-<span class="sourceLineNo">691</span>      if (oldProcId == null) return -1;<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>    // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    // since the client expect the procedure to be submitted, spin here until it is.<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    while (isRunning() &amp;&amp;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>           !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &amp;&amp;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>           nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      if (traceEnabled) {<a name="line.700"></a>
-<span class="sourceLineNo">701</span>        LOG.trace("Waiting for procId=" + oldProcId.longValue() + " to be submitted");<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      }<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      Threads.sleep(100);<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    }<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    return oldProcId.longValue();<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  }<a name="line.706"></a>
-<span class="sourceLineNo">707</span><a name="line.707"></a>
-<span class="sourceLineNo">708</span>  /**<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    if (nonceKey == null) return;<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    if (procId == null) return;<a name="line.716"></a>
-<span class="sourceLineNo">717</span><a name="line.717"></a>
-<span class="sourceLineNo">718</span>    // if the procedure was not submitted, remove the nonce<a name="line.718"></a>
-<span class="sourceLineNo">719</span>    if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    }<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  }<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>  /**<a name="line.724"></a>
-<span class="sourceLineNo">725</span>   * If the failure failed before submitting it, we may want to give back the<a name="line.725"></a>
-<span class="sourceLineNo">726</span>   * same error to the requests with the same nonceKey.<a name="line.726"></a>
-<span class="sourceLineNo">727</span>   *<a name="line.727"></a>
-<span class="sourceLineNo">728</span>   * @param nonceKey A unique identifier for this operation from the client or process<a name="line.728"></a>
-<span class="sourceLineNo">729</span>   * @param procName name of the procedure, used to inform the user<a name="line.729"></a>
-<span class="sourceLineNo">730</span>   * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * @param exception the failure to report to the user<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   */<a name="line.732"></a>
-<span class="sourceLineNo">733</span>  public void setFailureResultForNonce(final NonceKey nonceKey, final String procName,<a name="line.733"></a>
-<span class="sourceLineNo">734</span>      final User procOwner, final IOException exception) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    if (nonceKey == null) return;<a name="line.735"></a>
-<span class="sourceLineNo">736</span><a name="line.736"></a>
-<span class="sourceLineNo">737</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    if (procId == null || completed.containsKey(procId)) return;<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>    final long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    final ProcedureInfo result = new ProcedureInfo(procId.longValue(),<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      procName, procOwner != null ? procOwner.getShortName() : null,<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      ProcedureUtil.convertToProcedureState(ProcedureState.ROLLEDBACK),<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      -1, nonceKey, exception, currentTime, currentTime, null);<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    completed.putIfAbsent(procId, result);<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
-<span class="sourceLineNo">747</span><a name="line.747"></a>
+<span class="sourceLineNo">658</span>  /**<a name="line.658"></a>
+<span class="sourceLineNo">659</span>   * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.659"></a>
+<span class="sourceLineNo">660</span>   * @param nonceGroup<a name="line.660"></a>
+<span class="sourceLineNo">661</span>   * @param nonce<a name="line.661"></a>
+<span class="sourceLineNo">662</span>   * @return the generated NonceKey<a name="line.662"></a>
+<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
+<span class="sourceLineNo">664</span>  public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.665"></a>
+<span class="sourceLineNo">666</span>  }<a name="line.666"></a>
+<span class="sourceLineNo">667</span><a name="line.667"></a>
+<span class="sourceLineNo">668</span>  /**<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * Register a nonce for a procedure that is going to be submitted.<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * A procId will be reserved and on submitProcedure(),<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   * the procedure with the specified nonce will take the reserved ProcId.<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   * otherwise an invalid procId will be returned. and the caller should procede<a name="line.673"></a>
+<span class="sourceLineNo">674</span>   * and submit the procedure.<a name="line.674"></a>
+<span class="sourceLineNo">675</span>   *<a name="line.675"></a>
+<span class="sourceLineNo">676</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.676"></a>
+<span class="sourceLineNo">677</span>   * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.677"></a>
+<span class="sourceLineNo">678</span>   */<a name="line.678"></a>
+<span class="sourceLineNo">679</span>  public long registerNonce(final NonceKey nonceKey) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span>    if (nonceKey == null) return -1;<a name="line.680"></a>
+<span class="sourceLineNo">681</span><a name="line.681"></a>
+<span class="sourceLineNo">682</span>    // check if we have already a Reserved ID for the nonce<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>    if (oldProcId == null) {<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      // reserve a new Procedure ID, this will be associated with the nonce<a name="line.685"></a>
+<span class="sourceLineNo">686</span>      // and the procedure submitted with the specified nonce will use this ID.<a name="line.686"></a>
+<span class="sourceLineNo">687</span>      final long newProcId = nextProcId();<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      if (oldProcId == null) return -1;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>    }<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span>    // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    // since the client expect the procedure to be submitted, spin here until it is.<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    while (isRunning() &amp;&amp;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>           !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &amp;&amp;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>           nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.697"></a>
+<span class="sourceLineNo">698</span>      if (traceEnabled) {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>        LOG.trace("Waiting for procId=" + oldProcId.longValue() + " to be submitted");<a name="line.699"></a>
+<span class="sourceLineNo">700</span>      }<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      Threads.sleep(100);<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    }<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    return oldProcId.longValue();<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>  /**<a name="line.706"></a>
+<span class="sourceLineNo">707</span>   * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.707"></a>
+<span class="sourceLineNo">708</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.708"></a>
+<span class="sourceLineNo">709</span>   */<a name="line.709"></a>
+<span class="sourceLineNo">710</span>  public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    if (nonceKey == null) return;<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.713"></a>
+<span class="sourceLineNo">714</span>    if (procId == null) return;<a name="line.714"></a>
+<span class="sourceLineNo">715</span><a name="line.715"></a>
+<span class="sourceLineNo">716</span>    // if the procedure was not submitted, remove the nonce<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    }<a name="line.719"></a>
+<span class="sourceLineNo">720</span>  }<a name="line.720"></a>
+<span class="sourceLineNo">721</span><a name="line.721"></a>
+<span class="sourceLineNo">722</span>  /**<a name="line.722"></a>
+<span class="sourceLineNo">723</span>   * If the failure failed before submitting it, we may want to give back the<a name="line.723"></a>
+<span class="sourceLineNo">724</span>   * same error to the requests with the same nonceKey.<a name="line.724"></a>
+<span class="sourceLineNo">725</span>   *<a name="line.725"></a>
+<span class="sourceLineNo">726</span>   * @param nonceKey A unique identifier for this operation from the client or process<a name="line.726"></a>
+<span class="sourceLineNo">727</span>   * @param procName name of the procedure, used to inform the user<a name="line.727"></a>
+<span class="sourceLineNo">728</span>   * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.728"></a>
+<span class="sourceLineNo">729</span>   * @param exception the failure to report to the user<a name="line.729"></a>
+<span class="sourceLineNo">730</span>   */<a name="line.730"></a>
+<span class="sourceLineNo">731</span>  public void setFailureResultForNonce(final NonceKey nonceKey, final String procName,<a name="line.731"></a>
+<span class="sourceLineNo">732</span>      final User procOwner, final IOException exception) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    if (nonceKey == null) return;<a name="line.733"></a>
+<span class="sourceLineNo">734</span><a name="line.734"></a>
+<span class="sourceLineNo">735</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    if (procId == null || completed.containsKey(procId)) return;<a name="line.736"></a>
+<span class="sourceLineNo">737</span><a name="line.737"></a>
+<span class="sourceLineNo">738</span>    final long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.738"></a>
+<span class="sourceLineNo">739</span>    final ProcedureInfo result = new ProcedureInfo(procId.longValue(),<a name="line.739"></a>
+<span class="sourceLineNo">740</span>      procName, procOwner != null ? procOwner.getShortName() : null,<a name="line.740"></a>
+<span class="sourceLineNo">741</span>      ProcedureUtil.convertToProcedureState(ProcedureState.ROLLEDBACK),<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      -1, nonceKey, exception, currentTime, currentTime, null);<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    completed.putIfAbsent(procId, result);<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>  // ==========================================================================<a name="line.746"></a>
+<span class="sourceLineNo">747</span>  //  Submit/Abort Procedure<a name="line.747"></a>
 <span class="sourceLineNo">748</span>  // ==========================================================================<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  //  Submit/Abort Procedure<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>   * Add a new root-procedure to the executor.<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   * @param proc the new procedure to execute.<a name="line.753"></a>
-<span class="sourceLineNo">754</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.754"></a>
-<span class="sourceLineNo">755</span>   */<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  public long submitProcedure(final Procedure proc) {<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    return submitProcedure(proc, null);<a name="line.757"></a>
-<span class="sourceLineNo">758</span>  }<a name="line.758"></a>
-<span class="sourceLineNo">759</span><a name="line.759"></a>
-<span class="sourceLineNo">760</span>  /**<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   * Add a new root-procedure to the executor.<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * @param proc the new procedure to execute.<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   * @param nonceKey the registered unique identifier for this operation from the client or process.<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   */<a name="line.765"></a>
-<span class="sourceLineNo">766</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NP_NULL_ON_SOME_PATH",<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      justification = "FindBugs is blind to the check-for-null")<a name="line.767"></a>
-<span class="sourceLineNo">768</span>  public long submitProcedure(final Procedure proc, final NonceKey nonceKey) {<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.770"></a>
+<span class="sourceLineNo">749</span>  /**<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * Add a new root-procedure to the executor.<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   * @param proc the new procedure to execute.<a name="line.751"></a>
+<span class="sourceLineNo">752</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.752"></a>
+<span class="sourceLineNo">753</span>   */<a name="line.753"></a>
+<span class="sourceLineNo">754</span>  public long submitProcedure(final Procedure proc) {<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    return submitProcedure(proc, null);<a name="line.755"></a>
+<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
+<span class="sourceLineNo">757</span><a name="line.757"></a>
+<span class="sourceLineNo">758</span>  /**<a name="line.758"></a>
+<span class="sourceLineNo">759</span>   * Add a new root-procedure to the executor.<a name="line.759"></a>
+<span class="sourceLineNo">760</span>   * @param proc the new procedure to execute.<a name="line.760"></a>
+<span class="sourceLineNo">761</span>   * @param nonceKey the registered unique identifier for this operation from the client or process.<a name="line.761"></a>
+<span class="sourceLineNo">762</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.762"></a>
+<span class="sourceLineNo">763</span>   */<a name="line.763"></a>
+<span class="sourceLineNo">764</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NP_NULL_ON_SOME_PATH",<a name="line.764"></a>
+<span class="sourceLineNo">765</span>      justification = "FindBugs is blind to the check-for-null")<a name="line.765"></a>
+<span class="sourceLineNo">766</span>  public long submitProcedure(final Procedure proc, final NonceKey nonceKey) {<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.767"></a>
+<span class="sourceLineNo">768</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.768"></a>
+<span class="sourceLineNo">769</span><a name="line.769"></a>
+<span class="sourceLineNo">770</span>    prepareProcedure(proc);<a name="line.770"></a>
 <span class="sourceLineNo">771</span><a name="line.771"></a>
-<span class="sourceLineNo">772</span>    prepareProcedure(proc);<a name="line.772"></a>
-<span class="sourceLineNo">773</span><a name="line.773"></a>
-<span class="sourceLineNo">774</span>    final Long currentProcId;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    if (nonceKey != null) {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>      currentProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      Preconditions.checkArgument(currentProcId != null,<a name="line.777"></a>
-<span class="sourceLineNo">778</span>        "Expected nonceKey=" + nonceKey + " to be reserved, use registerNonce(); proc=" + proc);<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    } else {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      currentProcId = nextProcId();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>    // Initialize the procedure<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    proc.setNonceKey(nonceKey);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    proc.setProcId(currentProcId.longValue());<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span>    // Commit the transaction<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    store.insert(proc, null);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    if (LOG.isDebugEnabled()) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      LOG.debug("Stored " + proc);<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>    // Add the procedure to the executor<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    return pushProcedure(proc);<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>  /**<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * Add a set of new root-procedure to the executor.<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * @param procs the new procedures to execute.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   */<a name="line.800"></a>
-<span class="sourceLineNo">801</span>  // TODO: Do we need to take nonces here?<a name="line.801"></a>
-<span class="sourceLineNo">802</span>  public void submitProcedures(final Procedure[] procs) {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.804"></a>
-<span class="sourceLineNo">805</span><a name="line.805"></a>
-<span class="sourceLineNo">806</span>    // Prepare procedure<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.807"></a>
-<span class="sourceLineNo">808</span>      prepareProcedure(procs[i]).setProcId(nextProcId());<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    }<a name="line.809"></a>
-<span class="sourceLineNo">810</span><a name="line.810"></a>
-<span class="sourceLineNo">811</span>    // Commit the transaction<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    store.insert(procs);<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    if (LOG.isDebugEnabled()) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>      LOG.debug("Stored " + Arrays.toString(procs));<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>    // Add the procedure to the executor<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.818"></a>
-<span class="sourceLineNo">819</span>      pushProcedure(procs[i]);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    }<a name="line.820"></a>
-<span class="sourceLineNo">821</span>  }<a name="line.821"></a>
-<span class="sourceLineNo">822</span><a name="line.822"></a>
-<span class="sourceLineNo">823</span>  private Procedure prepareProcedure(final Procedure proc) {<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    Preconditions.checkArgument(!proc.hasParent(), "unexpected parent", proc);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    if (this.checkOwnerSet) {<a name="line.827"></a>
-<span class="sourceLineNo">828</span>      Preconditions.checkArgument(proc.hasOwner(), "missing owner");<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    }<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    return proc;<a name="line.830"></a>
-<span class="sourceLineNo">831</span>  }<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span>  private long pushProcedure(final Procedure proc) {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    final long currentProcId = proc.getProcId();<a name="line.834"></a>
-<span class="sourceLineNo">835</span><a name="line.835"></a>
-<span class="sourceLineNo">836</span>    // Create the rollback stack for the procedure<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    RootProcedureState stack = new RootProcedureState();<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    rollbackStack.put(currentProcId, stack);<a name="line.838"></a>
-<span class="sourceLineNo">839</span><a name="line.839"></a>
-<span class="sourceLineNo">840</span>    // Submit the new subprocedures<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    assert !procedures.containsKey(currentProcId);<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    procedures.put(currentProcId, proc);<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    sendProcedureAddedNotification(currentProcId);<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    scheduler.addBack(proc);<a name="line.844"></a>
-<span class="sourceLineNo">845</span>    return proc.getProcId();<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>  /**<a name="line.848"></a>
-<span class="sourceLineNo">849</span>   * Send an abort notification the specified procedure.<a name="line.849"></a>
-<span class="sourceLineNo">850</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.850"></a>
-<span class="sourceLineNo">851</span>   * @param procId the procedure to abort<a name="line.851"></a>
-<span class="sourceLineNo">852</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.852"></a>
-<span class="sourceLineNo">853</span>   */<a name="line.853"></a>
-<span class="sourceLineNo">854</span>  public boolean abort(final long procId) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    return abort(procId, true);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>  }<a name="line.856"></a>
-<span class="sourceLineNo">857</span><a name="line.857"></a>
-<span class="sourceLineNo">858</span>  /**<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * Send an abort notification the specified procedure.<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   * @param procId the procedure to abort<a name="line.861"></a>
-<span class="sourceLineNo">862</span>   * @param mayInterruptIfRunning if the proc completed at least one step, should it be aborted?<a name="line.862"></a>
-<span class="sourceLineNo">863</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.863"></a>
-<span class="sourceLineNo">864</span>   */<a name="line.864"></a>
-<span class="sourceLineNo">865</span>  public boolean abort(final long procId, final boolean mayInterruptIfRunning) {<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    final Procedure proc = procedures.get(procId);<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    if (proc != null) {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>      if (!mayInterruptIfRunning &amp;&amp; proc.wasExecuted()) {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        return false;<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      }<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      return proc.abort(getEnvironment());<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    }<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    return false;<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">772</span>    final Long currentProcId;<a name="line.772"></a>
+<span class="sourceLineNo">773</span>    if (nonceKey != null) {<a name="line.773"></a>
+<span class="sourceLineNo">774</span>      currentProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.774"></a>
+<span class="sourceLineNo">775</span>      Preconditions.checkArgument(currentProcId != null,<a name="line.775"></a>
+<span class="sourceLineNo">776</span>        "Expected nonceKey=" + nonceKey + " to be reserved, use registerNonce(); proc=" + proc);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    } else {<a name="line.777"></a>
+<span class="sourceLineNo">778</span>      currentProcId = nextProcId();<a name="line.778"></a>
+<span class="sourceLineNo">779</span>    }<a name="line.779"></a>
+<span class="sourceLineNo">780</span><a name="line.780"></a>
+<span class="sourceLineNo">781</span>    // Initialize the procedure<a name="line.781"></a>
+<span class="sourceLineNo">782</span>    proc.setNonceKey(nonceKey);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>    proc.setProcId(currentProcId.longValue());<a name="line.783"></a>
+<span class="sourceLineNo">784</span><a name="line.784"></a>
+<span class="sourceLineNo">785</span>    // Commit the transaction<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    store.insert(proc, null);<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    if (LOG.isDebugEnabled()) {<a name="line.787"></a>
+<span class="sourceLineNo">788</span>      LOG.debug("Stored " + proc);<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
+<span class="sourceLineNo">790</span><a name="line.790"></a>
+<span class="sourceLineNo">791</span>    // Add the procedure to the executor<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    return pushProcedure(proc);<a name="line.792"></a>
+<span class="sourceLineNo">793</span>  }<a name="line.793"></a>
+<span class="sourceLineNo">794</span><a name="line.794"></a>
+<span class="sourceLineNo">795</span>  /**<a name="line.795"></a>
+<span class="sourceLineNo">796</span>   * Add a set of new root-procedure to the executor.<a name="line.796"></a>
+<span class="sourceLineNo">797</span>   * @param procs the new procedures to execute.<a name="line.797"></a>
+<span class="sourceLineNo">798</span>   */<a name="line.798"></a>
+<span class="sourceLineNo">799</span>  // TODO: Do we need to take nonces here?<a name="line.799"></a>
+<span class="sourceLineNo">800</span>  public void submitProcedures(final Procedure[] procs) {<a name="line.800"></a>
+<span class="sourceLineNo">801</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.801"></a>
+<span class="sourceLineNo">802</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.802"></a>
+<span class="sourceLineNo">803</span><a name="line.803"></a>
+<span class="sourceLineNo">804</span>    // Prepare procedure<a name="line.804"></a>
+<span class="sourceLineNo">805</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.805"></a>
+<span class="sourceLineNo">806</span>      prepareProcedure(procs[i]).setProcId(nextProcId());<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    }<a name="line.807"></a>
+<span class="sourceLineNo">808</span><a name="line.808"></a>
+<span class="sourceLineNo">809</span>    // Commit the transaction<a name="line.809"></a>
+<span class="sourceLineNo">810</span>    store.insert(procs);<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    if (LOG.isDebugEnabled()) {<a name="line.811"></a>
+<span class="sourceLineNo">812</span>      LOG.debug("Stored " + Arrays.toString(procs));<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    }<a name="line.813"></a>
+<span class="sourceLineNo">814</span><a name="line.814"></a>
+<span class="sourceLineNo">815</span>    // Add the procedure to the executor<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.816"></a>
+<span class="sourceLineNo">817</span>      pushProcedure(procs[i]);<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
+<span class="sourceLineNo">819</span>  }<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span>  private Procedure prepareProcedure(final Procedure proc) {<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.822"></a>
+<span class="sourceLineNo">823</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.823"></a>
+<span class="sourceLineNo">824</span>    Preconditions.checkArgument(!proc.hasParent(), "unexpected parent", proc);<a name="line.824"></a>
+<span class="sourceLineNo">825</span>    if (this.checkOwnerSet) {<a name="line.825"></a>
+<span class="sourceLineNo">826</span>      Preconditions.checkArgument(proc.hasOwner(), "missing owner");<a name="line.826"></a>
+<span class="sourceLineNo">827</span>    }<a name="line.827"></a>
+<span class="sourceLineNo">828</span>    return proc;<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>  private long pushProcedure(final Procedure proc) {<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    final long currentProcId = proc.getProcId();<a name="line.832"></a>
+<span class="sourceLineNo">833</span><a name="line.833"></a>
+<span class="sourceLineNo">834</span>    // Create the rollback stack for the procedure<a name="line.834"></a>
+<span class="sourceLineNo">835</span>    RootProcedureState stack = new RootProcedureState();<a name="line.835"></a>
+<span class="sourceLineNo">836</span>    rollbackStack.put(currentProcId, stack);<a name="line.836"></a>
+<span class="sourceLineNo">837</span><a name="line.837"></a>
+<span class="sourceLineNo">838</span>    // Submit the new subprocedures<a name="line.838"></a>
+<span class="sourceLineNo">839</span>    assert !procedures.containsKey(currentProcId);<a name="line.839"></a>
+<span class="sourceLineNo">840</span>    procedures.put

<TRUNCATED>

[12/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html
index 35cebd9..b6b4cb6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html
@@ -321,7 +321,7 @@
 <span class="sourceLineNo">313</span>      final NonceKey nonceKey;<a name="line.313"></a>
 <span class="sourceLineNo">314</span>      final long procId;<a name="line.314"></a>
 <span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>      if (procIter.isNextCompleted()) {<a name="line.316"></a>
+<span class="sourceLineNo">316</span>      if (procIter.isNextFinished()) {<a name="line.316"></a>
 <span class="sourceLineNo">317</span>        ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.317"></a>
 <span class="sourceLineNo">318</span>        nonceKey = proc.getNonceKey();<a name="line.318"></a>
 <span class="sourceLineNo">319</span>        procId = proc.getProcId();<a name="line.319"></a>
@@ -359,7 +359,7 @@
 <span class="sourceLineNo">351</span>    HashSet&lt;Procedure&gt; waitingSet = null;<a name="line.351"></a>
 <span class="sourceLineNo">352</span>    procIter.reset();<a name="line.352"></a>
 <span class="sourceLineNo">353</span>    while (procIter.hasNext()) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (procIter.isNextCompleted()) {<a name="line.354"></a>
+<span class="sourceLineNo">354</span>      if (procIter.isNextFinished()) {<a name="line.354"></a>
 <span class="sourceLineNo">355</span>        procIter.skipNext();<a name="line.355"></a>
 <span class="sourceLineNo">356</span>        continue;<a name="line.356"></a>
 <span class="sourceLineNo">357</span>      }<a name="line.357"></a>
@@ -405,1450 +405,1448 @@
 <span class="sourceLineNo">397</span>          }<a name="line.397"></a>
 <span class="sourceLineNo">398</span>          waitingSet.add(proc);<a name="line.398"></a>
 <span class="sourceLineNo">399</span>          break;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        case FINISHED:<a name="line.400"></a>
-<span class="sourceLineNo">401</span>          if (proc.hasException()) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>            // add the proc to the scheduler to perform the rollback<a name="line.402"></a>
-<span class="sourceLineNo">403</span>            scheduler.addBack(proc);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          }<a name="line.404"></a>
-<span class="sourceLineNo">405</span>          break;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        case ROLLEDBACK:<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        case INITIALIZING:<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          LOG.error(msg);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          throw new UnsupportedOperationException(msg);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        default:<a name="line.411"></a>
-<span class="sourceLineNo">412</span>          break;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      }<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    // 3. Validate the stacks<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    int corruptedCount = 0;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    while (itStack.hasNext()) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      RootProcedureState procStack = entry.getValue();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      if (procStack.isValid()) continue;<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>      for (Procedure proc: procStack.getSubproceduresStack()) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        LOG.error("Corrupted " + proc);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        procedures.remove(proc.getProcId());<a name="line.426"></a>
-<span class="sourceLineNo">427</span>        runnableList.remove(proc);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        corruptedCount++;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      }<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      itStack.remove();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    // 4. Push the procedures to the timeout executor<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    if (waitingSet != null &amp;&amp; !waitingSet.isEmpty()) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      for (Procedure proc: waitingSet) {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        proc.afterReplay(getEnvironment());<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        timeoutExecutor.add(proc);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      }<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    }<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>    // 5. Push the procedure to the scheduler<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    if (!runnableList.isEmpty()) {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      // some procedure may be started way before this stuff.<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        Procedure proc = runnableList.get(i);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        proc.afterReplay(getEnvironment());<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        if (!proc.hasParent()) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        }<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        if (proc.wasExecuted()) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>          scheduler.addFront(proc);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        } else {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          // if it was not in execution, it can wait.<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          scheduler.addBack(proc);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        }<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    }<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>   * Start the procedure executor.<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   *<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * @param numThreads number of threads available for procedure execution.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   */<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    if (running.getAndSet(true)) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      LOG.warn("Already running");<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      return;<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>    // We have numThreads executor + one timer thread used for timing out<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    // procedures and triggering periodic procedures.<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    this.corePoolSize = numThreads;<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    LOG.info("Starting executor worker threads=" + corePoolSize);<a name="line.485"></a>
-<span class="sourceLineNo">486</span><a name="line.486"></a>
-<span class="sourceLineNo">487</span>    // Create the Thread Group for the executors<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    threadGroup = new ThreadGroup("ProcedureExecutor");<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>    // Create the timeout executor<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    timeoutExecutor = new TimeoutExecutorThread(threadGroup);<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>    // Create the workers<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    workerId.set(0);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    workerThreads = new CopyOnWriteArrayList&lt;&gt;();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    for (int i = 0; i &lt; corePoolSize; ++i) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      workerThreads.add(new WorkerThread(threadGroup));<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
+<span class="sourceLineNo">400</span>        case FAILED:<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          // add the proc to the scheduler to perform the rollback<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          scheduler.addBack(proc);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          break;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        case ROLLEDBACK:<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        case INITIALIZING:<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.406"></a>
+<span class="sourceLineNo">407</span>          LOG.error(msg);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>          throw new UnsupportedOperationException(msg);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        default:<a name="line.409"></a>
+<span class="sourceLineNo">410</span>          break;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    // 3. Validate the stacks<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    int corruptedCount = 0;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    while (itStack.hasNext()) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      RootProcedureState procStack = entry.getValue();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      if (procStack.isValid()) continue;<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span>      for (Procedure proc: procStack.getSubproceduresStack()) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        LOG.error("Corrupted " + proc);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        procedures.remove(proc.getProcId());<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        runnableList.remove(proc);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        corruptedCount++;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>      }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      itStack.remove();<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    }<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<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>    // 4. Push the procedures to the timeout executor<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    if (waitingSet != null &amp;&amp; !waitingSet.isEmpty()) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      for (Procedure proc: waitingSet) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        proc.afterReplay(getEnvironment());<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        timeoutExecutor.add(proc);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      }<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span>    // 5. Push the procedure to the scheduler<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    if (!runnableList.isEmpty()) {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      // some procedure may be started way before this stuff.<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>        Procedure proc = runnableList.get(i);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        proc.afterReplay(getEnvironment());<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        if (!proc.hasParent()) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        }<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        if (proc.wasExecuted()) {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          scheduler.addFront(proc);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>        } else {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          // if it was not in execution, it can wait.<a name="line.457"></a>
+<span class="sourceLineNo">458</span>          scheduler.addBack(proc);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      }<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  }<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>   * Start the procedure executor.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   *<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @param numThreads number of threads available for procedure execution.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   */<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    if (running.getAndSet(true)) {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      LOG.warn("Already running");<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      return;<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span><a name="line.479"></a>
+<span class="sourceLineNo">480</span>    // We have numThreads executor + one timer thread used for timing out<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    // procedures and triggering periodic procedures.<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    this.corePoolSize = numThreads;<a name="line.482"></a>
+<span class="sourceLineNo">483</span>    LOG.info("Starting executor worker threads=" + corePoolSize);<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // Create the Thread Group for the executors<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    threadGroup = new ThreadGroup("ProcedureExecutor");<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>    // Create the timeout executor<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    timeoutExecutor = new TimeoutExecutorThread(threadGroup);<a name="line.489"></a>
+<span class="sourceLineNo">490</span><a name="line.490"></a>
+<span class="sourceLineNo">491</span>    // Create the workers<a name="line.491"></a>
+<span class="sourceLineNo">492</span>    workerId.set(0);<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    workerThreads = new CopyOnWriteArrayList&lt;&gt;();<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    for (int i = 0; i &lt; corePoolSize; ++i) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      workerThreads.add(new WorkerThread(threadGroup));<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    }<a name="line.496"></a>
+<span class="sourceLineNo">497</span><a name="line.497"></a>
+<span class="sourceLineNo">498</span>    long st, et;<a name="line.498"></a>
 <span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>    long st, et;<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>    // Acquire the store lease.<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    store.recoverLease();<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    LOG.info(String.format("Recover store (%s) lease: %s",<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.507"></a>
-<span class="sourceLineNo">508</span><a name="line.508"></a>
-<span class="sourceLineNo">509</span>    // start the procedure scheduler<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    scheduler.start();<a name="line.510"></a>
-<span class="sourceLineNo">511</span><a name="line.511"></a>
-<span class="sourceLineNo">512</span>    // TODO: Split in two steps.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    // The first one will make sure that we have the latest id,<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    // so we can start the threads and accept new procedures.<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    // The second step will do the actual load of old procedures.<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    load(abortOnCorruption);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    LOG.info(String.format("Load store (%s): %s",<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (LOG.isTraceEnabled()) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.trace("Start workers " + workerThreads.size());<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    timeoutExecutor.start();<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    for (WorkerThread worker: workerThreads) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      worker.start();<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    // Internal chores<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    timeoutExecutor.add(new WorkerMonitor());<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>    // Add completed cleaner chore<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    addChore(new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  public void stop() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    if (!running.getAndSet(false)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>      return;<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>    LOG.info("Stopping");<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    scheduler.stop();<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    timeoutExecutor.sendStopSignal();<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  @VisibleForTesting<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  public void join() {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    assert !isRunning() : "expected not running";<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>    // stop the timeout executor<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    timeoutExecutor.awaitTermination();<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    timeoutExecutor = null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>    // stop the worker threads<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    for (WorkerThread worker: workerThreads) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      worker.awaitTermination();<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    workerThreads = null;<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    // Destroy the Thread Group for the executors<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    try {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      threadGroup.destroy();<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    } catch (IllegalThreadStateException e) {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      LOG.error("Thread group " + threadGroup + " contains running threads");<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      threadGroup.list();<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    } finally {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      threadGroup = null;<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>    // reset the in-memory state for testing<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    completed.clear();<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    rollbackStack.clear();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    procedures.clear();<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    nonceKeysToProcIdsMap.clear();<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    scheduler.clear();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    lastProcId.set(-1);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  }<a name="line.580"></a>
-<span class="sourceLineNo">581</span><a name="line.581"></a>
-<span class="sourceLineNo">582</span>  public void refreshConfiguration(final Configuration conf) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    this.conf = conf;<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  }<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
+<span class="sourceLineNo">500</span>    // Acquire the store lease.<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    store.recoverLease();<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    LOG.info(String.format("Recover store (%s) lease: %s",<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.505"></a>
+<span class="sourceLineNo">506</span><a name="line.506"></a>
+<span class="sourceLineNo">507</span>    // start the procedure scheduler<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    scheduler.start();<a name="line.508"></a>
+<span class="sourceLineNo">509</span><a name="line.509"></a>
+<span class="sourceLineNo">510</span>    // TODO: Split in two steps.<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    // The first one will make sure that we have the latest id,<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    // so we can start the threads and accept new procedures.<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    // The second step will do the actual load of old procedures.<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    load(abortOnCorruption);<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.517"></a>
+<span class="sourceLineNo">518</span>    LOG.info(String.format("Load store (%s): %s",<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    if (LOG.isTraceEnabled()) {<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      LOG.trace("Start workers " + workerThreads.size());<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    timeoutExecutor.start();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    for (WorkerThread worker: workerThreads) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      worker.start();<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
+<span class="sourceLineNo">529</span><a name="line.529"></a>
+<span class="sourceLineNo">530</span>    // Internal chores<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    timeoutExecutor.add(new WorkerMonitor());<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    // Add completed cleaner chore<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    addChore(new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.534"></a>
+<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>  public void stop() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    if (!running.getAndSet(false)) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      return;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    }<a name="line.540"></a>
+<span class="sourceLineNo">541</span><a name="line.541"></a>
+<span class="sourceLineNo">542</span>    LOG.info("Stopping");<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    scheduler.stop();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    timeoutExecutor.sendStopSignal();<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>  @VisibleForTesting<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  public void join() {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    assert !isRunning() : "expected not running";<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span>    // stop the timeout executor<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    timeoutExecutor.awaitTermination();<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    timeoutExecutor = null;<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    // stop the worker threads<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    for (WorkerThread worker: workerThreads) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      worker.awaitTermination();<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    workerThreads = null;<a name="line.559"></a>
+<span class="sourceLineNo">560</span><a name="line.560"></a>
+<span class="sourceLineNo">561</span>    // Destroy the Thread Group for the executors<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    try {<a name="line.562"></a>
+<span class="sourceLineNo">563</span>      threadGroup.destroy();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    } catch (IllegalThreadStateException e) {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      LOG.error("Thread group " + threadGroup + " contains running threads");<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      threadGroup.list();<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    } finally {<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      threadGroup = null;<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
+<span class="sourceLineNo">570</span><a name="line.570"></a>
+<span class="sourceLineNo">571</span>    // reset the in-memory state for testing<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    completed.clear();<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    rollbackStack.clear();<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    procedures.clear();<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    nonceKeysToProcIdsMap.clear();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    scheduler.clear();<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    lastProcId.set(-1);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
+<span class="sourceLineNo">579</span><a name="line.579"></a>
+<span class="sourceLineNo">580</span>  public void refreshConfiguration(final Configuration conf) {<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    this.conf = conf;<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.582"></a>
+<span class="sourceLineNo">583</span>        DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<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>  // ==========================================================================<a name="line.586"></a>
+<span class="sourceLineNo">587</span>  //  Accessors<a name="line.587"></a>
 <span class="sourceLineNo">588</span>  // ==========================================================================<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  //  Accessors<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  // ==========================================================================<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  public boolean isRunning() {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return running.get();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return the current number of worker threads.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   */<a name="line.597"></a>
-<span class="sourceLineNo">598</span>  public int getWorkerThreadCount() {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    return workerThreads.size();<a name="line.599"></a>
-<span class="sourceLineNo">600</span>  }<a name="line.600"></a>
-<span class="sourceLineNo">601</span><a name="line.601"></a>
-<span class="sourceLineNo">602</span>  /**<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   * @return the core pool size settings.<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   */<a name="line.604"></a>
-<span class="sourceLineNo">605</span>  public int getCorePoolSize() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    return corePoolSize;<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>  public int getActiveExecutorCount() {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    return activeExecutorCount.get();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  public TEnvironment getEnvironment() {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    return this.environment;<a name="line.614"></a>
-<span class="sourceLineNo">615</span>  }<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>  public ProcedureStore getStore() {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    return this.store;<a name="line.618"></a>
-<span class="sourceLineNo">619</span>  }<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>  protected ProcedureScheduler getScheduler() {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    return scheduler;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>  }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>  public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    this.scheduler.signalAll();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>  }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>  public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<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">589</span>  public boolean isRunning() {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    return running.get();<a name="line.590"></a>
+<span class="sourceLineNo">591</span>  }<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span>  /**<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @return the current number of worker threads.<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
+<span class="sourceLineNo">596</span>  public int getWorkerThreadCount() {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    return workerThreads.size();<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  }<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span>  /**<a name="line.600"></a>
+<span class="sourceLineNo">601</span>   * @return the core pool size settings.<a name="line.601"></a>
+<span class="sourceLineNo">602</span>   */<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  public int getCorePoolSize() {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    return corePoolSize;<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  }<a name="line.605"></a>
+<span class="sourceLineNo">606</span><a name="line.606"></a>
+<span class="sourceLineNo">607</span>  public int getActiveExecutorCount() {<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    return activeExecutorCount.get();<a name="line.608"></a>
+<span class="sourceLineNo">609</span>  }<a name="line.609"></a>
+<span class="sourceLineNo">610</span><a name="line.610"></a>
+<span class="sourceLineNo">611</span>  public TEnvironment getEnvironment() {<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    return this.environment;<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>  public ProcedureStore getStore() {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    return this.store;<a name="line.616"></a>
+<span class="sourceLineNo">617</span>  }<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>  protected ProcedureScheduler getScheduler() {<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    return scheduler;<a name="line.620"></a>
+<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>  public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    this.scheduler.signalAll();<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>  public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
+<span class="sourceLineNo">631</span><a name="line.631"></a>
+<span class="sourceLineNo">632</span>  // ==========================================================================<a name="line.632"></a>
+<span class="sourceLineNo">633</span>  //  Submit/Remove Chores<a name="line.633"></a>
 <span class="sourceLineNo">634</span>  // ==========================================================================<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  //  Submit/Remove Chores<a name="line.635"></a>
-<span class="sourceLineNo">636</span>  // ==========================================================================<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span>  /**<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * Add a chore procedure to the executor<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   * @param chore the chore to add<a name="line.640"></a>
-<span class="sourceLineNo">641</span>   */<a name="line.641"></a>
-<span class="sourceLineNo">642</span>  public void addChore(final ProcedureInMemoryChore chore) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    timeoutExecutor.add(chore);<a name="line.644"></a>
-<span class="sourceLineNo">645</span>  }<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>  /**<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   * Remove a chore procedure from the executor<a name="line.648"></a>
-<span class="sourceLineNo">649</span>   * @param chore the chore to remove<a name="line.649"></a>
-<span class="sourceLineNo">650</span>   * @return whether the chore is removed, or it will be removed later<a name="line.650"></a>
-<span class="sourceLineNo">651</span>   */<a name="line.651"></a>
-<span class="sourceLineNo">652</span>  public boolean removeChore(final ProcedureInMemoryChore chore) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    chore.setState(ProcedureState.FINISHED);<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    return timeoutExecutor.remove(chore);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>  }<a name="line.655"></a>
-<span class="sourceLineNo">656</span><a name="line.656"></a>
+<span class="sourceLineNo">635</span><a name="line.635"></a>
+<span class="sourceLineNo">636</span>  /**<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   * Add a chore procedure to the executor<a name="line.637"></a>
+<span class="sourceLineNo">638</span>   * @param chore the chore to add<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   */<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  public void addChore(final ProcedureInMemoryChore chore) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    timeoutExecutor.add(chore);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>  }<a name="line.643"></a>
+<span class="sourceLineNo">644</span><a name="line.644"></a>
+<span class="sourceLineNo">645</span>  /**<a name="line.645"></a>
+<span class="sourceLineNo">646</span>   * Remove a chore procedure from the executor<a name="line.646"></a>
+<span class="sourceLineNo">647</span>   * @param chore the chore to remove<a name="line.647"></a>
+<span class="sourceLineNo">648</span>   * @return whether the chore is removed, or it will be removed later<a name="line.648"></a>
+<span class="sourceLineNo">649</span>   */<a name="line.649"></a>
+<span class="sourceLineNo">650</span>  public boolean removeChore(final ProcedureInMemoryChore chore) {<a name="line.650"></a>
+<span class="sourceLineNo">651</span>    chore.setState(ProcedureState.SUCCESS);<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    return timeoutExecutor.remove(chore);<a name="line.652"></a>
+<span class="sourceLineNo">653</span>  }<a name="line.653"></a>
+<span class="sourceLineNo">654</span><a name="line.654"></a>
+<span class="sourceLineNo">655</span>  // ==========================================================================<a name="line.655"></a>
+<span class="sourceLineNo">656</span>  //  Nonce Procedure helpers<a name="line.656"></a>
 <span class="sourceLineNo">657</span>  // ==========================================================================<a name="line.657"></a>
-<span class="sourceLineNo">658</span>  //  Nonce Procedure helpers<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  // ==========================================================================<a name="line.659"></a>
-<span class="sourceLineNo">660</span>  /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * @param nonceGroup<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * @param nonce<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * @return the generated NonceKey<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>  }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>  /**<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   * Register a nonce for a procedure that is going to be submitted.<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   * A procId will be reserved and on submitProcedure(),<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   * the procedure with the specified nonce will take the reserved ProcId.<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   * otherwise an invalid procId will be returned. and the caller should procede<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   * and submit the procedure.<a name="line.676"></a>
-<span class="sourceLineNo">677</span>   *<a name="line.677"></a>
-<span class="sourceLineNo">678</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.678"></a>
-<span class="sourceLineNo">679</span>   * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.679"></a>
-<span class="sourceLineNo">680</span>   */<a name="line.680"></a>
-<span class="sourceLineNo">681</span>  public long registerNonce(final NonceKey nonceKey) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    if (nonceKey == null) return -1;<a name="line.682"></a>
-<span class="sourceLineNo">683</span><a name="line.683"></a>
-<span class="sourceLineNo">684</span>    // check if we have already a Reserved ID for the nonce<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    if (oldProcId == null) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      // reserve a new Procedure ID, this will be associated with the nonce<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      // and the procedure submitted with the specified nonce will use this ID.<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      final long newProcId = nextProcId();<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.690"></a>
-<span class="sourceLineNo">691</span>      if (oldProcId == null) return -1;<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>    // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    // since the client expect the procedure to be submitted, spin here until it is.<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    while (isRunning() &amp;&amp;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>           !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &amp;&amp;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>           nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      if (traceEnabled) {<a name="line.700"></a>
-<span class="sourceLineNo">701</span>        LOG.trace("Waiting for procId=" + oldProcId.longValue() + " to be submitted");<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      }<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      Threads.sleep(100);<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    }<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    return oldProcId.longValue();<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  }<a name="line.706"></a>
-<span class="sourceLineNo">707</span><a name="line.707"></a>
-<span class="sourceLineNo">708</span>  /**<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    if (nonceKey == null) return;<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    if (procId == null) return;<a name="line.716"></a>
-<span class="sourceLineNo">717</span><a name="line.717"></a>
-<span class="sourceLineNo">718</span>    // if the procedure was not submitted, remove the nonce<a name="line.718"></a>
-<span class="sourceLineNo">719</span>    if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    }<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  }<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>  /**<a name="line.724"></a>
-<span class="sourceLineNo">725</span>   * If the failure failed before submitting it, we may want to give back the<a name="line.725"></a>
-<span class="sourceLineNo">726</span>   * same error to the requests with the same nonceKey.<a name="line.726"></a>
-<span class="sourceLineNo">727</span>   *<a name="line.727"></a>
-<span class="sourceLineNo">728</span>   * @param nonceKey A unique identifier for this operation from the client or process<a name="line.728"></a>
-<span class="sourceLineNo">729</span>   * @param procName name of the procedure, used to inform the user<a name="line.729"></a>
-<span class="sourceLineNo">730</span>   * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * @param exception the failure to report to the user<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   */<a name="line.732"></a>
-<span class="sourceLineNo">733</span>  public void setFailureResultForNonce(final NonceKey nonceKey, final String procName,<a name="line.733"></a>
-<span class="sourceLineNo">734</span>      final User procOwner, final IOException exception) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    if (nonceKey == null) return;<a name="line.735"></a>
-<span class="sourceLineNo">736</span><a name="line.736"></a>
-<span class="sourceLineNo">737</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    if (procId == null || completed.containsKey(procId)) return;<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>    final long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    final ProcedureInfo result = new ProcedureInfo(procId.longValue(),<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      procName, procOwner != null ? procOwner.getShortName() : null,<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      ProcedureUtil.convertToProcedureState(ProcedureState.ROLLEDBACK),<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      -1, nonceKey, exception, currentTime, currentTime, null);<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    completed.putIfAbsent(procId, result);<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
-<span class="sourceLineNo">747</span><a name="line.747"></a>
+<span class="sourceLineNo">658</span>  /**<a name="line.658"></a>
+<span class="sourceLineNo">659</span>   * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.659"></a>
+<span class="sourceLineNo">660</span>   * @param nonceGroup<a name="line.660"></a>
+<span class="sourceLineNo">661</span>   * @param nonce<a name="line.661"></a>
+<span class="sourceLineNo">662</span>   * @return the generated NonceKey<a name="line.662"></a>
+<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
+<span class="sourceLineNo">664</span>  public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.665"></a>
+<span class="sourceLineNo">666</span>  }<a name="line.666"></a>
+<span class="sourceLineNo">667</span><a name="line.667"></a>
+<span class="sourceLineNo">668</span>  /**<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * Register a nonce for a procedure that is going to be submitted.<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * A procId will be reserved and on submitProcedure(),<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   * the procedure with the specified nonce will take the reserved ProcId.<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   * otherwise an invalid procId will be returned. and the caller should procede<a name="line.673"></a>
+<span class="sourceLineNo">674</span>   * and submit the procedure.<a name="line.674"></a>
+<span class="sourceLineNo">675</span>   *<a name="line.675"></a>
+<span class="sourceLineNo">676</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.676"></a>
+<span class="sourceLineNo">677</span>   * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.677"></a>
+<span class="sourceLineNo">678</span>   */<a name="line.678"></a>
+<span class="sourceLineNo">679</span>  public long registerNonce(final NonceKey nonceKey) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span>    if (nonceKey == null) return -1;<a name="line.680"></a>
+<span class="sourceLineNo">681</span><a name="line.681"></a>
+<span class="sourceLineNo">682</span>    // check if we have already a Reserved ID for the nonce<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>    if (oldProcId == null) {<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      // reserve a new Procedure ID, this will be associated with the nonce<a name="line.685"></a>
+<span class="sourceLineNo">686</span>      // and the procedure submitted with the specified nonce will use this ID.<a name="line.686"></a>
+<span class="sourceLineNo">687</span>      final long newProcId = nextProcId();<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      if (oldProcId == null) return -1;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>    }<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span>    // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    // since the client expect the procedure to be submitted, spin here until it is.<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    while (isRunning() &amp;&amp;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>           !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &amp;&amp;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>           nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.697"></a>
+<span class="sourceLineNo">698</span>      if (traceEnabled) {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>        LOG.trace("Waiting for procId=" + oldProcId.longValue() + " to be submitted");<a name="line.699"></a>
+<span class="sourceLineNo">700</span>      }<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      Threads.sleep(100);<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    }<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    return oldProcId.longValue();<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>  /**<a name="line.706"></a>
+<span class="sourceLineNo">707</span>   * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.707"></a>
+<span class="sourceLineNo">708</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.708"></a>
+<span class="sourceLineNo">709</span>   */<a name="line.709"></a>
+<span class="sourceLineNo">710</span>  public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    if (nonceKey == null) return;<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.713"></a>
+<span class="sourceLineNo">714</span>    if (procId == null) return;<a name="line.714"></a>
+<span class="sourceLineNo">715</span><a name="line.715"></a>
+<span class="sourceLineNo">716</span>    // if the procedure was not submitted, remove the nonce<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    }<a name="line.719"></a>
+<span class="sourceLineNo">720</span>  }<a name="line.720"></a>
+<span class="sourceLineNo">721</span><a name="line.721"></a>
+<span class="sourceLineNo">722</span>  /**<a name="line.722"></a>
+<span class="sourceLineNo">723</span>   * If the failure failed before submitting it, we may want to give back the<a name="line.723"></a>
+<span class="sourceLineNo">724</span>   * same error to the requests with the same nonceKey.<a name="line.724"></a>
+<span class="sourceLineNo">725</span>   *<a name="line.725"></a>
+<span class="sourceLineNo">726</span>   * @param nonceKey A unique identifier for this operation from the client or process<a name="line.726"></a>
+<span class="sourceLineNo">727</span>   * @param procName name of the procedure, used to inform the user<a name="line.727"></a>
+<span class="sourceLineNo">728</span>   * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.728"></a>
+<span class="sourceLineNo">729</span>   * @param exception the failure to report to the user<a name="line.729"></a>
+<span class="sourceLineNo">730</span>   */<a name="line.730"></a>
+<span class="sourceLineNo">731</span>  public void setFailureResultForNonce(final NonceKey nonceKey, final String procName,<a name="line.731"></a>
+<span class="sourceLineNo">732</span>      final User procOwner, final IOException exception) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    if (nonceKey == null) return;<a name="line.733"></a>
+<span class="sourceLineNo">734</span><a name="line.734"></a>
+<span class="sourceLineNo">735</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    if (procId == null || completed.containsKey(procId)) return;<a name="line.736"></a>
+<span class="sourceLineNo">737</span><a name="line.737"></a>
+<span class="sourceLineNo">738</span>    final long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.738"></a>
+<span class="sourceLineNo">739</span>    final ProcedureInfo result = new ProcedureInfo(procId.longValue(),<a name="line.739"></a>
+<span class="sourceLineNo">740</span>      procName, procOwner != null ? procOwner.getShortName() : null,<a name="line.740"></a>
+<span class="sourceLineNo">741</span>      ProcedureUtil.convertToProcedureState(ProcedureState.ROLLEDBACK),<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      -1, nonceKey, exception, currentTime, currentTime, null);<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    completed.putIfAbsent(procId, result);<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>  // ==========================================================================<a name="line.746"></a>
+<span class="sourceLineNo">747</span>  //  Submit/Abort Procedure<a name="line.747"></a>
 <span class="sourceLineNo">748</span>  // ==========================================================================<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  //  Submit/Abort Procedure<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>   * Add a new root-procedure to the executor.<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   * @param proc the new procedure to execute.<a name="line.753"></a>
-<span class="sourceLineNo">754</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.754"></a>
-<span class="sourceLineNo">755</span>   */<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  public long submitProcedure(final Procedure proc) {<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    return submitProcedure(proc, null);<a name="line.757"></a>
-<span class="sourceLineNo">758</span>  }<a name="line.758"></a>
-<span class="sourceLineNo">759</span><a name="line.759"></a>
-<span class="sourceLineNo">760</span>  /**<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   * Add a new root-procedure to the executor.<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * @param proc the new procedure to execute.<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   * @param nonceKey the registered unique identifier for this operation from the client or process.<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   */<a name="line.765"></a>
-<span class="sourceLineNo">766</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NP_NULL_ON_SOME_PATH",<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      justification = "FindBugs is blind to the check-for-null")<a name="line.767"></a>
-<span class="sourceLineNo">768</span>  public long submitProcedure(final Procedure proc, final NonceKey nonceKey) {<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.770"></a>
+<span class="sourceLineNo">749</span>  /**<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * Add a new root-procedure to the executor.<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   * @param proc the new procedure to execute.<a name="line.751"></a>
+<span class="sourceLineNo">752</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.752"></a>
+<span class="sourceLineNo">753</span>   */<a name="line.753"></a>
+<span class="sourceLineNo">754</span>  public long submitProcedure(final Procedure proc) {<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    return submitProcedure(proc, null);<a name="line.755"></a>
+<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
+<span class="sourceLineNo">757</span><a name="line.757"></a>
+<span class="sourceLineNo">758</span>  /**<a name="line.758"></a>
+<span class="sourceLineNo">759</span>   * Add a new root-procedure to the executor.<a name="line.759"></a>
+<span class="sourceLineNo">760</span>   * @param proc the new procedure to execute.<a name="line.760"></a>
+<span class="sourceLineNo">761</span>   * @param nonceKey the registered unique identifier for this operation from the client or process.<a name="line.761"></a>
+<span class="sourceLineNo">762</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.762"></a>
+<span class="sourceLineNo">763</span>   */<a name="line.763"></a>
+<span class="sourceLineNo">764</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NP_NULL_ON_SOME_PATH",<a name="line.764"></a>
+<span class="sourceLineNo">765</span>      justification = "FindBugs is blind to the check-for-null")<a name="line.765"></a>
+<span class="sourceLineNo">766</span>  public long submitProcedure(final Procedure proc, final NonceKey nonceKey) {<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.767"></a>
+<span class="sourceLineNo">768</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.768"></a>
+<span class="sourceLineNo">769</span><a name="line.769"></a>
+<span class="sourceLineNo">770</span>    prepareProcedure(proc);<a name="line.770"></a>
 <span class="sourceLineNo">771</span><a name="line.771"></a>
-<span class="sourceLineNo">772</span>    prepareProcedure(proc);<a name="line.772"></a>
-<span class="sourceLineNo">773</span><a name="line.773"></a>
-<span class="sourceLineNo">774</span>    final Long currentProcId;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    if (nonceKey != null) {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>      currentProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      Preconditions.checkArgument(currentProcId != null,<a name="line.777"></a>
-<span class="sourceLineNo">778</span>        "Expected nonceKey=" + nonceKey + " to be reserved, use registerNonce(); proc=" + proc);<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    } else {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      currentProcId = nextProcId();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>    // Initialize the procedure<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    proc.setNonceKey(nonceKey);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    proc.setProcId(currentProcId.longValue());<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span>    // Commit the transaction<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    store.insert(proc, null);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    if (LOG.isDebugEnabled()) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      LOG.debug("Stored " + proc);<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>    // Add the procedure to the executor<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    return pushProcedure(proc);<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>  /**<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * Add a set of new root-procedure to the executor.<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * @param procs the new procedures to execute.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   */<a name="line.800"></a>
-<span class="sourceLineNo">801</span>  // TODO: Do we need to take nonces here?<a name="line.801"></a>
-<span class="sourceLineNo">802</span>  public void submitProcedures(final Procedure[] procs) {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.804"></a>
-<span class="sourceLineNo">805</span><a name="line.805"></a>
-<span class="sourceLineNo">806</span>    // Prepare procedure<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.807"></a>
-<span class="sourceLineNo">808</span>      prepareProcedure(procs[i]).setProcId(nextProcId());<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    }<a name="line.809"></a>
-<span class="sourceLineNo">810</span><a name="line.810"></a>
-<span class="sourceLineNo">811</span>    // Commit the transaction<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    store.insert(procs);<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    if (LOG.isDebugEnabled()) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>      LOG.debug("Stored " + Arrays.toString(procs));<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>    // Add the procedure to the executor<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.818"></a>
-<span class="sourceLineNo">819</span>      pushProcedure(procs[i]);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    }<a name="line.820"></a>
-<span class="sourceLineNo">821</span>  }<a name="line.821"></a>
-<span class="sourceLineNo">822</span><a name="line.822"></a>
-<span class="sourceLineNo">823</span>  private Procedure prepareProcedure(final Procedure proc) {<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    Preconditions.checkArgument(!proc.hasParent(), "unexpected parent", proc);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    if (this.checkOwnerSet) {<a name="line.827"></a>
-<span class="sourceLineNo">828</span>      Preconditions.checkArgument(proc.hasOwner(), "missing owner");<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    }<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    return proc;<a name="line.830"></a>
-<span class="sourceLineNo">831</span>  }<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span>  private long pushProcedure(final Procedure proc) {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    final long currentProcId = proc.getProcId();<a name="line.834"></a>
-<span class="sourceLineNo">835</span><a name="line.835"></a>
-<span class="sourceLineNo">836</span>    // Create the rollback stack for the procedure<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    RootProcedureState stack = new RootProcedureState();<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    rollbackStack.put(currentProcId, stack);<a name="line.838"></a>
-<span class="sourceLineNo">839</span><a name="line.839"></a>
-<span class="sourceLineNo">840</span>    // Submit the new subprocedures<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    assert !procedures.containsKey(currentProcId);<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    procedures.put(currentProcId, proc);<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    sendProcedureAddedNotification(currentProcId);<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    scheduler.addBack(proc);<a name="line.844"></a>
-<span class="sourceLineNo">845</span>    return proc.getProcId();<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>  /**<a name="line.848"></a>
-<span class="sourceLineNo">849</span>   * Send an abort notification the specified procedure.<a name="line.849"></a>
-<span class="sourceLineNo">850</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.850"></a>
-<span class="sourceLineNo">851</span>   * @param procId the procedure to abort<a name="line.851"></a>
-<span class="sourceLineNo">852</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.852"></a>
-<span class="sourceLineNo">853</span>   */<a name="line.853"></a>
-<span class="sourceLineNo">854</span>  public boolean abort(final long procId) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    return abort(procId, true);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>  }<a name="line.856"></a>
-<span class="sourceLineNo">857</span><a name="line.857"></a>
-<span class="sourceLineNo">858</span>  /**<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * Send an abort notification the specified procedure.<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   * @param procId the procedure to abort<a name="line.861"></a>
-<span class="sourceLineNo">862</span>   * @param mayInterruptIfRunning if the proc completed at least one step, should it be aborted?<a name="line.862"></a>
-<span class="sourceLineNo">863</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.863"></a>
-<span class="sourceLineNo">864</span>   */<a name="line.864"></a>
-<span class="sourceLineNo">865</span>  public boolean abort(final long procId, final boolean mayInterruptIfRunning) {<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    final Procedure proc = procedures.get(procId);<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    if (proc != null) {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>      if (!mayInterruptIfRunning &amp;&amp; proc.wasExecuted()) {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        return false;<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      }<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      return proc.abort(getEnvironment());<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    }<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    return false;<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">772</span>    final Long currentProcId;<a name="line.772"></a>
+<span class="sourceLineNo">773</span>    if (nonceKey != null) {<a name="line.773"></a>
+<span class="sourceLineNo">774</span>      currentProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.774"></a>
+<span class="sourceLineNo">775</span>      Preconditions.checkArgument(currentProcId != null,<a name="line.775"></a>
+<span class="sourceLineNo">776</span>        "Expected nonceKey=" + nonceKey + " to be reserved, use registerNonce(); proc=" + proc);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    } else {<a name="line.777"></a>
+<span class="sourceLineNo">778</span>      currentProcId = nextProcId();<a name="line.778"></a>
+<span class="sourceLineNo">779</span>    }<a name="line.779"></a>
+<span class="sourceLineNo">780</span><a name="line.780"></a>
+<span class="sourceLineNo">781</span>    // Initialize the procedure<a name="line.781"></a>
+<span class="sourceLineNo">782</span>    proc.setNonceKey(nonceKey);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>    proc.setProcId(currentProcId.longValue());<a name="line.783"></a>
+<span class="sourceLineNo">784</span><a name="line.784"></a>
+<span class="sourceLineNo">785</span>    // Commit the transaction<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    store.insert(proc, null);<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    if (LOG.isDebugEnabled()) {<a name="line.787"></a>
+<span class="sourceLineNo">788</span>      LOG.debug("Stored " + proc);<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
+<span class="sourceLineNo">790</span><a name="line.790"></a>
+<span class="sourceLineNo">791</span>    // Add the procedure to the executor<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    return pushProcedure(proc);<a name="line.792"></a>
+<span class="sourceLineNo">793</span>  }<a name="line.793"></a>
+<span class="sourceLineNo">794</span><a name="line.794"></a>
+<span class="sourceLineNo">795</span>  /**<a name="line.795"></a>
+<span class="sourceLineNo">796</span>   * Add a set of new root-procedure to the executor.<a name="line.796"></a>
+<span class="sourceLineNo">797</span>   * @param procs the new procedures to execute.<a name="line.797"></a>
+<span class="sourceLineNo">798</span>   */<a name="line.798"></a>
+<span class="sourceLineNo">799</span>  // TODO: Do we need to take nonces here?<a name="line.799"></a>
+<span class="sourceLineNo">800</span>  public void submitProcedures(final Procedure[] procs) {<a name="line.800"></a>
+<span class="sourceLineNo">801</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.801"></a>
+<span class="sourceLineNo">802</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.802"></a>
+<span class="sourceLineNo">803</span><a name="line.803"></a>
+<span class="sourceLineNo">804</span>    // Prepare procedure<a name="line.804"></a>
+<span class="sourceLineNo">805</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.805"></a>
+<span class="sourceLineNo">806</span>      prepareProcedure(procs[i]).setProcId(nextProcId());<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    }<a name="line.807"></a>
+<span class="sourceLineNo">808</span><a name="line.808"></a>
+<span class="sourceLineNo">809</span>    // Commit the transaction<a name="line.809"></a>
+<span class="sourceLineNo">810</span>    store.insert(procs);<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    if (LOG.isDebugEnabled()) {<a name="line.811"></a>
+<span class="sourceLineNo">812</span>      LOG.debug("Stored " + Arrays.toString(procs));<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    }<a name="line.813"></a>
+<span class="sourceLineNo">814</span><a name="line.814"></a>
+<span class="sourceLineNo">815</span>    // Add the procedure to the executor<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.816"></a>
+<span class="sourceLineNo">817</span>      pushProcedure(procs[i]);<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
+<span class="sourceLineNo">819</span>  }<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span>  private Procedure prepareProcedure(final Procedure proc) {<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.822"></a>
+<span class="sourceLineNo">823</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.823"></a>
+<span class="sourceLineNo">824</span>    Preconditions.checkArgument(!proc.hasParent(), "unexpected parent", proc);<a name="line.824"></a>
+<span class="sourceLineNo">825</span>    if (this.checkOwnerSet) {<a name="line.825"></a>
+<span class="sourceLineNo">826</span>      Preconditions.checkArgument(proc.hasOwner(), "missing owner");<a name="line.826"></a>
+<span class="sourceLineNo">827</span>    }<a name="line.827"></a>
+<span class="sourceLineNo">828</span>    return proc;<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>  private long pushProcedure(final Procedure proc) {<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    final long currentProcId = proc.getProcId();<a name="line.832"></a>
+<span class="sourceLineNo">833</span><a name="line.833"></a>
+<span class="sourceLineNo">834</span>    // Create the rollback stack for the procedure<a name="line.834"></a>
+<span class="sourceLineNo">835</span>    RootProcedureState stack = new RootProcedureState();<a name="line.835"></a>
+<span class="sourceLineNo">836</span>    rollbackStack.put(currentProcId, stack);<a name="line.836"></a>
+<span class="sourceLineNo">837</span><a name="line.837"></a>
+<span class="sourceLineNo">838</span>    // Submit the new subprocedures<a name="line.838"></a>
+<span class="sourceLineNo">839</span>    assert !procedures.containsKey(currentProcId);<a name="line.839"></a>
+<span class="sourceLineNo">840

<TRUNCATED>

[13/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.Testing.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.Testing.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.Testing.html
index 35cebd9..b6b4cb6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.Testing.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.Testing.html
@@ -321,7 +321,7 @@
 <span class="sourceLineNo">313</span>      final NonceKey nonceKey;<a name="line.313"></a>
 <span class="sourceLineNo">314</span>      final long procId;<a name="line.314"></a>
 <span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>      if (procIter.isNextCompleted()) {<a name="line.316"></a>
+<span class="sourceLineNo">316</span>      if (procIter.isNextFinished()) {<a name="line.316"></a>
 <span class="sourceLineNo">317</span>        ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.317"></a>
 <span class="sourceLineNo">318</span>        nonceKey = proc.getNonceKey();<a name="line.318"></a>
 <span class="sourceLineNo">319</span>        procId = proc.getProcId();<a name="line.319"></a>
@@ -359,7 +359,7 @@
 <span class="sourceLineNo">351</span>    HashSet&lt;Procedure&gt; waitingSet = null;<a name="line.351"></a>
 <span class="sourceLineNo">352</span>    procIter.reset();<a name="line.352"></a>
 <span class="sourceLineNo">353</span>    while (procIter.hasNext()) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (procIter.isNextCompleted()) {<a name="line.354"></a>
+<span class="sourceLineNo">354</span>      if (procIter.isNextFinished()) {<a name="line.354"></a>
 <span class="sourceLineNo">355</span>        procIter.skipNext();<a name="line.355"></a>
 <span class="sourceLineNo">356</span>        continue;<a name="line.356"></a>
 <span class="sourceLineNo">357</span>      }<a name="line.357"></a>
@@ -405,1450 +405,1448 @@
 <span class="sourceLineNo">397</span>          }<a name="line.397"></a>
 <span class="sourceLineNo">398</span>          waitingSet.add(proc);<a name="line.398"></a>
 <span class="sourceLineNo">399</span>          break;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        case FINISHED:<a name="line.400"></a>
-<span class="sourceLineNo">401</span>          if (proc.hasException()) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>            // add the proc to the scheduler to perform the rollback<a name="line.402"></a>
-<span class="sourceLineNo">403</span>            scheduler.addBack(proc);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          }<a name="line.404"></a>
-<span class="sourceLineNo">405</span>          break;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        case ROLLEDBACK:<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        case INITIALIZING:<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          LOG.error(msg);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          throw new UnsupportedOperationException(msg);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        default:<a name="line.411"></a>
-<span class="sourceLineNo">412</span>          break;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      }<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    // 3. Validate the stacks<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    int corruptedCount = 0;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    while (itStack.hasNext()) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      RootProcedureState procStack = entry.getValue();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      if (procStack.isValid()) continue;<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>      for (Procedure proc: procStack.getSubproceduresStack()) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        LOG.error("Corrupted " + proc);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        procedures.remove(proc.getProcId());<a name="line.426"></a>
-<span class="sourceLineNo">427</span>        runnableList.remove(proc);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        corruptedCount++;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      }<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      itStack.remove();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    // 4. Push the procedures to the timeout executor<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    if (waitingSet != null &amp;&amp; !waitingSet.isEmpty()) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      for (Procedure proc: waitingSet) {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        proc.afterReplay(getEnvironment());<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        timeoutExecutor.add(proc);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      }<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    }<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>    // 5. Push the procedure to the scheduler<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    if (!runnableList.isEmpty()) {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      // some procedure may be started way before this stuff.<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        Procedure proc = runnableList.get(i);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        proc.afterReplay(getEnvironment());<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        if (!proc.hasParent()) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        }<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        if (proc.wasExecuted()) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>          scheduler.addFront(proc);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        } else {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          // if it was not in execution, it can wait.<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          scheduler.addBack(proc);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        }<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    }<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>   * Start the procedure executor.<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   *<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * @param numThreads number of threads available for procedure execution.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   */<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    if (running.getAndSet(true)) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      LOG.warn("Already running");<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      return;<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>    // We have numThreads executor + one timer thread used for timing out<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    // procedures and triggering periodic procedures.<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    this.corePoolSize = numThreads;<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    LOG.info("Starting executor worker threads=" + corePoolSize);<a name="line.485"></a>
-<span class="sourceLineNo">486</span><a name="line.486"></a>
-<span class="sourceLineNo">487</span>    // Create the Thread Group for the executors<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    threadGroup = new ThreadGroup("ProcedureExecutor");<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>    // Create the timeout executor<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    timeoutExecutor = new TimeoutExecutorThread(threadGroup);<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>    // Create the workers<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    workerId.set(0);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    workerThreads = new CopyOnWriteArrayList&lt;&gt;();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    for (int i = 0; i &lt; corePoolSize; ++i) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      workerThreads.add(new WorkerThread(threadGroup));<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
+<span class="sourceLineNo">400</span>        case FAILED:<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          // add the proc to the scheduler to perform the rollback<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          scheduler.addBack(proc);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          break;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        case ROLLEDBACK:<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        case INITIALIZING:<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.406"></a>
+<span class="sourceLineNo">407</span>          LOG.error(msg);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>          throw new UnsupportedOperationException(msg);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        default:<a name="line.409"></a>
+<span class="sourceLineNo">410</span>          break;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    // 3. Validate the stacks<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    int corruptedCount = 0;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    while (itStack.hasNext()) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      RootProcedureState procStack = entry.getValue();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      if (procStack.isValid()) continue;<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span>      for (Procedure proc: procStack.getSubproceduresStack()) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        LOG.error("Corrupted " + proc);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        procedures.remove(proc.getProcId());<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        runnableList.remove(proc);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        corruptedCount++;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>      }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      itStack.remove();<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    }<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<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>    // 4. Push the procedures to the timeout executor<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    if (waitingSet != null &amp;&amp; !waitingSet.isEmpty()) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      for (Procedure proc: waitingSet) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        proc.afterReplay(getEnvironment());<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        timeoutExecutor.add(proc);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      }<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span>    // 5. Push the procedure to the scheduler<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    if (!runnableList.isEmpty()) {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      // some procedure may be started way before this stuff.<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>        Procedure proc = runnableList.get(i);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        proc.afterReplay(getEnvironment());<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        if (!proc.hasParent()) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        }<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        if (proc.wasExecuted()) {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          scheduler.addFront(proc);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>        } else {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          // if it was not in execution, it can wait.<a name="line.457"></a>
+<span class="sourceLineNo">458</span>          scheduler.addBack(proc);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      }<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  }<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>   * Start the procedure executor.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   *<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @param numThreads number of threads available for procedure execution.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   */<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    if (running.getAndSet(true)) {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      LOG.warn("Already running");<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      return;<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span><a name="line.479"></a>
+<span class="sourceLineNo">480</span>    // We have numThreads executor + one timer thread used for timing out<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    // procedures and triggering periodic procedures.<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    this.corePoolSize = numThreads;<a name="line.482"></a>
+<span class="sourceLineNo">483</span>    LOG.info("Starting executor worker threads=" + corePoolSize);<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // Create the Thread Group for the executors<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    threadGroup = new ThreadGroup("ProcedureExecutor");<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>    // Create the timeout executor<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    timeoutExecutor = new TimeoutExecutorThread(threadGroup);<a name="line.489"></a>
+<span class="sourceLineNo">490</span><a name="line.490"></a>
+<span class="sourceLineNo">491</span>    // Create the workers<a name="line.491"></a>
+<span class="sourceLineNo">492</span>    workerId.set(0);<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    workerThreads = new CopyOnWriteArrayList&lt;&gt;();<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    for (int i = 0; i &lt; corePoolSize; ++i) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      workerThreads.add(new WorkerThread(threadGroup));<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    }<a name="line.496"></a>
+<span class="sourceLineNo">497</span><a name="line.497"></a>
+<span class="sourceLineNo">498</span>    long st, et;<a name="line.498"></a>
 <span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>    long st, et;<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>    // Acquire the store lease.<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    store.recoverLease();<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    LOG.info(String.format("Recover store (%s) lease: %s",<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.507"></a>
-<span class="sourceLineNo">508</span><a name="line.508"></a>
-<span class="sourceLineNo">509</span>    // start the procedure scheduler<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    scheduler.start();<a name="line.510"></a>
-<span class="sourceLineNo">511</span><a name="line.511"></a>
-<span class="sourceLineNo">512</span>    // TODO: Split in two steps.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    // The first one will make sure that we have the latest id,<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    // so we can start the threads and accept new procedures.<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    // The second step will do the actual load of old procedures.<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    load(abortOnCorruption);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    LOG.info(String.format("Load store (%s): %s",<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (LOG.isTraceEnabled()) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.trace("Start workers " + workerThreads.size());<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    timeoutExecutor.start();<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    for (WorkerThread worker: workerThreads) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      worker.start();<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    // Internal chores<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    timeoutExecutor.add(new WorkerMonitor());<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>    // Add completed cleaner chore<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    addChore(new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  public void stop() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    if (!running.getAndSet(false)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>      return;<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>    LOG.info("Stopping");<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    scheduler.stop();<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    timeoutExecutor.sendStopSignal();<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  @VisibleForTesting<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  public void join() {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    assert !isRunning() : "expected not running";<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>    // stop the timeout executor<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    timeoutExecutor.awaitTermination();<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    timeoutExecutor = null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>    // stop the worker threads<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    for (WorkerThread worker: workerThreads) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      worker.awaitTermination();<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    workerThreads = null;<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    // Destroy the Thread Group for the executors<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    try {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      threadGroup.destroy();<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    } catch (IllegalThreadStateException e) {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      LOG.error("Thread group " + threadGroup + " contains running threads");<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      threadGroup.list();<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    } finally {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      threadGroup = null;<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>    // reset the in-memory state for testing<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    completed.clear();<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    rollbackStack.clear();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    procedures.clear();<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    nonceKeysToProcIdsMap.clear();<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    scheduler.clear();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    lastProcId.set(-1);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  }<a name="line.580"></a>
-<span class="sourceLineNo">581</span><a name="line.581"></a>
-<span class="sourceLineNo">582</span>  public void refreshConfiguration(final Configuration conf) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    this.conf = conf;<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  }<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
+<span class="sourceLineNo">500</span>    // Acquire the store lease.<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    store.recoverLease();<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    LOG.info(String.format("Recover store (%s) lease: %s",<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.505"></a>
+<span class="sourceLineNo">506</span><a name="line.506"></a>
+<span class="sourceLineNo">507</span>    // start the procedure scheduler<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    scheduler.start();<a name="line.508"></a>
+<span class="sourceLineNo">509</span><a name="line.509"></a>
+<span class="sourceLineNo">510</span>    // TODO: Split in two steps.<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    // The first one will make sure that we have the latest id,<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    // so we can start the threads and accept new procedures.<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    // The second step will do the actual load of old procedures.<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    load(abortOnCorruption);<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.517"></a>
+<span class="sourceLineNo">518</span>    LOG.info(String.format("Load store (%s): %s",<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    if (LOG.isTraceEnabled()) {<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      LOG.trace("Start workers " + workerThreads.size());<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    timeoutExecutor.start();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    for (WorkerThread worker: workerThreads) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      worker.start();<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
+<span class="sourceLineNo">529</span><a name="line.529"></a>
+<span class="sourceLineNo">530</span>    // Internal chores<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    timeoutExecutor.add(new WorkerMonitor());<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    // Add completed cleaner chore<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    addChore(new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.534"></a>
+<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>  public void stop() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    if (!running.getAndSet(false)) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      return;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    }<a name="line.540"></a>
+<span class="sourceLineNo">541</span><a name="line.541"></a>
+<span class="sourceLineNo">542</span>    LOG.info("Stopping");<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    scheduler.stop();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    timeoutExecutor.sendStopSignal();<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>  @VisibleForTesting<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  public void join() {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    assert !isRunning() : "expected not running";<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span>    // stop the timeout executor<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    timeoutExecutor.awaitTermination();<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    timeoutExecutor = null;<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    // stop the worker threads<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    for (WorkerThread worker: workerThreads) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      worker.awaitTermination();<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    workerThreads = null;<a name="line.559"></a>
+<span class="sourceLineNo">560</span><a name="line.560"></a>
+<span class="sourceLineNo">561</span>    // Destroy the Thread Group for the executors<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    try {<a name="line.562"></a>
+<span class="sourceLineNo">563</span>      threadGroup.destroy();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    } catch (IllegalThreadStateException e) {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      LOG.error("Thread group " + threadGroup + " contains running threads");<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      threadGroup.list();<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    } finally {<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      threadGroup = null;<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
+<span class="sourceLineNo">570</span><a name="line.570"></a>
+<span class="sourceLineNo">571</span>    // reset the in-memory state for testing<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    completed.clear();<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    rollbackStack.clear();<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    procedures.clear();<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    nonceKeysToProcIdsMap.clear();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    scheduler.clear();<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    lastProcId.set(-1);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
+<span class="sourceLineNo">579</span><a name="line.579"></a>
+<span class="sourceLineNo">580</span>  public void refreshConfiguration(final Configuration conf) {<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    this.conf = conf;<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.582"></a>
+<span class="sourceLineNo">583</span>        DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<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>  // ==========================================================================<a name="line.586"></a>
+<span class="sourceLineNo">587</span>  //  Accessors<a name="line.587"></a>
 <span class="sourceLineNo">588</span>  // ==========================================================================<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  //  Accessors<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  // ==========================================================================<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  public boolean isRunning() {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return running.get();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return the current number of worker threads.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   */<a name="line.597"></a>
-<span class="sourceLineNo">598</span>  public int getWorkerThreadCount() {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    return workerThreads.size();<a name="line.599"></a>
-<span class="sourceLineNo">600</span>  }<a name="line.600"></a>
-<span class="sourceLineNo">601</span><a name="line.601"></a>
-<span class="sourceLineNo">602</span>  /**<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   * @return the core pool size settings.<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   */<a name="line.604"></a>
-<span class="sourceLineNo">605</span>  public int getCorePoolSize() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    return corePoolSize;<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>  public int getActiveExecutorCount() {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    return activeExecutorCount.get();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  public TEnvironment getEnvironment() {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    return this.environment;<a name="line.614"></a>
-<span class="sourceLineNo">615</span>  }<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>  public ProcedureStore getStore() {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    return this.store;<a name="line.618"></a>
-<span class="sourceLineNo">619</span>  }<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>  protected ProcedureScheduler getScheduler() {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    return scheduler;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>  }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>  public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    this.scheduler.signalAll();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>  }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>  public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<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">589</span>  public boolean isRunning() {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    return running.get();<a name="line.590"></a>
+<span class="sourceLineNo">591</span>  }<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span>  /**<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @return the current number of worker threads.<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
+<span class="sourceLineNo">596</span>  public int getWorkerThreadCount() {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    return workerThreads.size();<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  }<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span>  /**<a name="line.600"></a>
+<span class="sourceLineNo">601</span>   * @return the core pool size settings.<a name="line.601"></a>
+<span class="sourceLineNo">602</span>   */<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  public int getCorePoolSize() {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    return corePoolSize;<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  }<a name="line.605"></a>
+<span class="sourceLineNo">606</span><a name="line.606"></a>
+<span class="sourceLineNo">607</span>  public int getActiveExecutorCount() {<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    return activeExecutorCount.get();<a name="line.608"></a>
+<span class="sourceLineNo">609</span>  }<a name="line.609"></a>
+<span class="sourceLineNo">610</span><a name="line.610"></a>
+<span class="sourceLineNo">611</span>  public TEnvironment getEnvironment() {<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    return this.environment;<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>  public ProcedureStore getStore() {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    return this.store;<a name="line.616"></a>
+<span class="sourceLineNo">617</span>  }<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>  protected ProcedureScheduler getScheduler() {<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    return scheduler;<a name="line.620"></a>
+<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>  public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    this.scheduler.signalAll();<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>  public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
+<span class="sourceLineNo">631</span><a name="line.631"></a>
+<span class="sourceLineNo">632</span>  // ==========================================================================<a name="line.632"></a>
+<span class="sourceLineNo">633</span>  //  Submit/Remove Chores<a name="line.633"></a>
 <span class="sourceLineNo">634</span>  // ==========================================================================<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  //  Submit/Remove Chores<a name="line.635"></a>
-<span class="sourceLineNo">636</span>  // ==========================================================================<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span>  /**<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * Add a chore procedure to the executor<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   * @param chore the chore to add<a name="line.640"></a>
-<span class="sourceLineNo">641</span>   */<a name="line.641"></a>
-<span class="sourceLineNo">642</span>  public void addChore(final ProcedureInMemoryChore chore) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    timeoutExecutor.add(chore);<a name="line.644"></a>
-<span class="sourceLineNo">645</span>  }<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>  /**<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   * Remove a chore procedure from the executor<a name="line.648"></a>
-<span class="sourceLineNo">649</span>   * @param chore the chore to remove<a name="line.649"></a>
-<span class="sourceLineNo">650</span>   * @return whether the chore is removed, or it will be removed later<a name="line.650"></a>
-<span class="sourceLineNo">651</span>   */<a name="line.651"></a>
-<span class="sourceLineNo">652</span>  public boolean removeChore(final ProcedureInMemoryChore chore) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    chore.setState(ProcedureState.FINISHED);<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    return timeoutExecutor.remove(chore);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>  }<a name="line.655"></a>
-<span class="sourceLineNo">656</span><a name="line.656"></a>
+<span class="sourceLineNo">635</span><a name="line.635"></a>
+<span class="sourceLineNo">636</span>  /**<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   * Add a chore procedure to the executor<a name="line.637"></a>
+<span class="sourceLineNo">638</span>   * @param chore the chore to add<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   */<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  public void addChore(final ProcedureInMemoryChore chore) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    timeoutExecutor.add(chore);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>  }<a name="line.643"></a>
+<span class="sourceLineNo">644</span><a name="line.644"></a>
+<span class="sourceLineNo">645</span>  /**<a name="line.645"></a>
+<span class="sourceLineNo">646</span>   * Remove a chore procedure from the executor<a name="line.646"></a>
+<span class="sourceLineNo">647</span>   * @param chore the chore to remove<a name="line.647"></a>
+<span class="sourceLineNo">648</span>   * @return whether the chore is removed, or it will be removed later<a name="line.648"></a>
+<span class="sourceLineNo">649</span>   */<a name="line.649"></a>
+<span class="sourceLineNo">650</span>  public boolean removeChore(final ProcedureInMemoryChore chore) {<a name="line.650"></a>
+<span class="sourceLineNo">651</span>    chore.setState(ProcedureState.SUCCESS);<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    return timeoutExecutor.remove(chore);<a name="line.652"></a>
+<span class="sourceLineNo">653</span>  }<a name="line.653"></a>
+<span class="sourceLineNo">654</span><a name="line.654"></a>
+<span class="sourceLineNo">655</span>  // ==========================================================================<a name="line.655"></a>
+<span class="sourceLineNo">656</span>  //  Nonce Procedure helpers<a name="line.656"></a>
 <span class="sourceLineNo">657</span>  // ==========================================================================<a name="line.657"></a>
-<span class="sourceLineNo">658</span>  //  Nonce Procedure helpers<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  // ==========================================================================<a name="line.659"></a>
-<span class="sourceLineNo">660</span>  /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * @param nonceGroup<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * @param nonce<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * @return the generated NonceKey<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>  }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>  /**<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   * Register a nonce for a procedure that is going to be submitted.<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   * A procId will be reserved and on submitProcedure(),<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   * the procedure with the specified nonce will take the reserved ProcId.<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   * otherwise an invalid procId will be returned. and the caller should procede<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   * and submit the procedure.<a name="line.676"></a>
-<span class="sourceLineNo">677</span>   *<a name="line.677"></a>
-<span class="sourceLineNo">678</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.678"></a>
-<span class="sourceLineNo">679</span>   * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.679"></a>
-<span class="sourceLineNo">680</span>   */<a name="line.680"></a>
-<span class="sourceLineNo">681</span>  public long registerNonce(final NonceKey nonceKey) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    if (nonceKey == null) return -1;<a name="line.682"></a>
-<span class="sourceLineNo">683</span><a name="line.683"></a>
-<span class="sourceLineNo">684</span>    // check if we have already a Reserved ID for the nonce<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    if (oldProcId == null) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      // reserve a new Procedure ID, this will be associated with the nonce<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      // and the procedure submitted with the specified nonce will use this ID.<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      final long newProcId = nextProcId();<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.690"></a>
-<span class="sourceLineNo">691</span>      if (oldProcId == null) return -1;<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>    // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    // since the client expect the procedure to be submitted, spin here until it is.<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    while (isRunning() &amp;&amp;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>           !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &amp;&amp;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>           nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      if (traceEnabled) {<a name="line.700"></a>
-<span class="sourceLineNo">701</span>        LOG.trace("Waiting for procId=" + oldProcId.longValue() + " to be submitted");<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      }<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      Threads.sleep(100);<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    }<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    return oldProcId.longValue();<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  }<a name="line.706"></a>
-<span class="sourceLineNo">707</span><a name="line.707"></a>
-<span class="sourceLineNo">708</span>  /**<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    if (nonceKey == null) return;<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    if (procId == null) return;<a name="line.716"></a>
-<span class="sourceLineNo">717</span><a name="line.717"></a>
-<span class="sourceLineNo">718</span>    // if the procedure was not submitted, remove the nonce<a name="line.718"></a>
-<span class="sourceLineNo">719</span>    if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    }<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  }<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>  /**<a name="line.724"></a>
-<span class="sourceLineNo">725</span>   * If the failure failed before submitting it, we may want to give back the<a name="line.725"></a>
-<span class="sourceLineNo">726</span>   * same error to the requests with the same nonceKey.<a name="line.726"></a>
-<span class="sourceLineNo">727</span>   *<a name="line.727"></a>
-<span class="sourceLineNo">728</span>   * @param nonceKey A unique identifier for this operation from the client or process<a name="line.728"></a>
-<span class="sourceLineNo">729</span>   * @param procName name of the procedure, used to inform the user<a name="line.729"></a>
-<span class="sourceLineNo">730</span>   * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * @param exception the failure to report to the user<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   */<a name="line.732"></a>
-<span class="sourceLineNo">733</span>  public void setFailureResultForNonce(final NonceKey nonceKey, final String procName,<a name="line.733"></a>
-<span class="sourceLineNo">734</span>      final User procOwner, final IOException exception) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    if (nonceKey == null) return;<a name="line.735"></a>
-<span class="sourceLineNo">736</span><a name="line.736"></a>
-<span class="sourceLineNo">737</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    if (procId == null || completed.containsKey(procId)) return;<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>    final long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    final ProcedureInfo result = new ProcedureInfo(procId.longValue(),<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      procName, procOwner != null ? procOwner.getShortName() : null,<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      ProcedureUtil.convertToProcedureState(ProcedureState.ROLLEDBACK),<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      -1, nonceKey, exception, currentTime, currentTime, null);<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    completed.putIfAbsent(procId, result);<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
-<span class="sourceLineNo">747</span><a name="line.747"></a>
+<span class="sourceLineNo">658</span>  /**<a name="line.658"></a>
+<span class="sourceLineNo">659</span>   * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.659"></a>
+<span class="sourceLineNo">660</span>   * @param nonceGroup<a name="line.660"></a>
+<span class="sourceLineNo">661</span>   * @param nonce<a name="line.661"></a>
+<span class="sourceLineNo">662</span>   * @return the generated NonceKey<a name="line.662"></a>
+<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
+<span class="sourceLineNo">664</span>  public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.665"></a>
+<span class="sourceLineNo">666</span>  }<a name="line.666"></a>
+<span class="sourceLineNo">667</span><a name="line.667"></a>
+<span class="sourceLineNo">668</span>  /**<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * Register a nonce for a procedure that is going to be submitted.<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * A procId will be reserved and on submitProcedure(),<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   * the procedure with the specified nonce will take the reserved ProcId.<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   * otherwise an invalid procId will be returned. and the caller should procede<a name="line.673"></a>
+<span class="sourceLineNo">674</span>   * and submit the procedure.<a name="line.674"></a>
+<span class="sourceLineNo">675</span>   *<a name="line.675"></a>
+<span class="sourceLineNo">676</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.676"></a>
+<span class="sourceLineNo">677</span>   * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.677"></a>
+<span class="sourceLineNo">678</span>   */<a name="line.678"></a>
+<span class="sourceLineNo">679</span>  public long registerNonce(final NonceKey nonceKey) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span>    if (nonceKey == null) return -1;<a name="line.680"></a>
+<span class="sourceLineNo">681</span><a name="line.681"></a>
+<span class="sourceLineNo">682</span>    // check if we have already a Reserved ID for the nonce<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>    if (oldProcId == null) {<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      // reserve a new Procedure ID, this will be associated with the nonce<a name="line.685"></a>
+<span class="sourceLineNo">686</span>      // and the procedure submitted with the specified nonce will use this ID.<a name="line.686"></a>
+<span class="sourceLineNo">687</span>      final long newProcId = nextProcId();<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      if (oldProcId == null) return -1;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>    }<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span>    // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    // since the client expect the procedure to be submitted, spin here until it is.<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    while (isRunning() &amp;&amp;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>           !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &amp;&amp;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>           nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.697"></a>
+<span class="sourceLineNo">698</span>      if (traceEnabled) {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>        LOG.trace("Waiting for procId=" + oldProcId.longValue() + " to be submitted");<a name="line.699"></a>
+<span class="sourceLineNo">700</span>      }<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      Threads.sleep(100);<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    }<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    return oldProcId.longValue();<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>  /**<a name="line.706"></a>
+<span class="sourceLineNo">707</span>   * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.707"></a>
+<span class="sourceLineNo">708</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.708"></a>
+<span class="sourceLineNo">709</span>   */<a name="line.709"></a>
+<span class="sourceLineNo">710</span>  public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    if (nonceKey == null) return;<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.713"></a>
+<span class="sourceLineNo">714</span>    if (procId == null) return;<a name="line.714"></a>
+<span class="sourceLineNo">715</span><a name="line.715"></a>
+<span class="sourceLineNo">716</span>    // if the procedure was not submitted, remove the nonce<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    }<a name="line.719"></a>
+<span class="sourceLineNo">720</span>  }<a name="line.720"></a>
+<span class="sourceLineNo">721</span><a name="line.721"></a>
+<span class="sourceLineNo">722</span>  /**<a name="line.722"></a>
+<span class="sourceLineNo">723</span>   * If the failure failed before submitting it, we may want to give back the<a name="line.723"></a>
+<span class="sourceLineNo">724</span>   * same error to the requests with the same nonceKey.<a name="line.724"></a>
+<span class="sourceLineNo">725</span>   *<a name="line.725"></a>
+<span class="sourceLineNo">726</span>   * @param nonceKey A unique identifier for this operation from the client or process<a name="line.726"></a>
+<span class="sourceLineNo">727</span>   * @param procName name of the procedure, used to inform the user<a name="line.727"></a>
+<span class="sourceLineNo">728</span>   * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.728"></a>
+<span class="sourceLineNo">729</span>   * @param exception the failure to report to the user<a name="line.729"></a>
+<span class="sourceLineNo">730</span>   */<a name="line.730"></a>
+<span class="sourceLineNo">731</span>  public void setFailureResultForNonce(final NonceKey nonceKey, final String procName,<a name="line.731"></a>
+<span class="sourceLineNo">732</span>      final User procOwner, final IOException exception) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    if (nonceKey == null) return;<a name="line.733"></a>
+<span class="sourceLineNo">734</span><a name="line.734"></a>
+<span class="sourceLineNo">735</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    if (procId == null || completed.containsKey(procId)) return;<a name="line.736"></a>
+<span class="sourceLineNo">737</span><a name="line.737"></a>
+<span class="sourceLineNo">738</span>    final long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.738"></a>
+<span class="sourceLineNo">739</span>    final ProcedureInfo result = new ProcedureInfo(procId.longValue(),<a name="line.739"></a>
+<span class="sourceLineNo">740</span>      procName, procOwner != null ? procOwner.getShortName() : null,<a name="line.740"></a>
+<span class="sourceLineNo">741</span>      ProcedureUtil.convertToProcedureState(ProcedureState.ROLLEDBACK),<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      -1, nonceKey, exception, currentTime, currentTime, null);<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    completed.putIfAbsent(procId, result);<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>  // ==========================================================================<a name="line.746"></a>
+<span class="sourceLineNo">747</span>  //  Submit/Abort Procedure<a name="line.747"></a>
 <span class="sourceLineNo">748</span>  // ==========================================================================<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  //  Submit/Abort Procedure<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>   * Add a new root-procedure to the executor.<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   * @param proc the new procedure to execute.<a name="line.753"></a>
-<span class="sourceLineNo">754</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.754"></a>
-<span class="sourceLineNo">755</span>   */<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  public long submitProcedure(final Procedure proc) {<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    return submitProcedure(proc, null);<a name="line.757"></a>
-<span class="sourceLineNo">758</span>  }<a name="line.758"></a>
-<span class="sourceLineNo">759</span><a name="line.759"></a>
-<span class="sourceLineNo">760</span>  /**<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   * Add a new root-procedure to the executor.<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * @param proc the new procedure to execute.<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   * @param nonceKey the registered unique identifier for this operation from the client or process.<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   */<a name="line.765"></a>
-<span class="sourceLineNo">766</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NP_NULL_ON_SOME_PATH",<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      justification = "FindBugs is blind to the check-for-null")<a name="line.767"></a>
-<span class="sourceLineNo">768</span>  public long submitProcedure(final Procedure proc, final NonceKey nonceKey) {<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.770"></a>
+<span class="sourceLineNo">749</span>  /**<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * Add a new root-procedure to the executor.<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   * @param proc the new procedure to execute.<a name="line.751"></a>
+<span class="sourceLineNo">752</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.752"></a>
+<span class="sourceLineNo">753</span>   */<a name="line.753"></a>
+<span class="sourceLineNo">754</span>  public long submitProcedure(final Procedure proc) {<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    return submitProcedure(proc, null);<a name="line.755"></a>
+<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
+<span class="sourceLineNo">757</span><a name="line.757"></a>
+<span class="sourceLineNo">758</span>  /**<a name="line.758"></a>
+<span class="sourceLineNo">759</span>   * Add a new root-procedure to the executor.<a name="line.759"></a>
+<span class="sourceLineNo">760</span>   * @param proc the new procedure to execute.<a name="line.760"></a>
+<span class="sourceLineNo">761</span>   * @param nonceKey the registered unique identifier for this operation from the client or process.<a name="line.761"></a>
+<span class="sourceLineNo">762</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.762"></a>
+<span class="sourceLineNo">763</span>   */<a name="line.763"></a>
+<span class="sourceLineNo">764</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NP_NULL_ON_SOME_PATH",<a name="line.764"></a>
+<span class="sourceLineNo">765</span>      justification = "FindBugs is blind to the check-for-null")<a name="line.765"></a>
+<span class="sourceLineNo">766</span>  public long submitProcedure(final Procedure proc, final NonceKey nonceKey) {<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.767"></a>
+<span class="sourceLineNo">768</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.768"></a>
+<span class="sourceLineNo">769</span><a name="line.769"></a>
+<span class="sourceLineNo">770</span>    prepareProcedure(proc);<a name="line.770"></a>
 <span class="sourceLineNo">771</span><a name="line.771"></a>
-<span class="sourceLineNo">772</span>    prepareProcedure(proc);<a name="line.772"></a>
-<span class="sourceLineNo">773</span><a name="line.773"></a>
-<span class="sourceLineNo">774</span>    final Long currentProcId;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    if (nonceKey != null) {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>      currentProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      Preconditions.checkArgument(currentProcId != null,<a name="line.777"></a>
-<span class="sourceLineNo">778</span>        "Expected nonceKey=" + nonceKey + " to be reserved, use registerNonce(); proc=" + proc);<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    } else {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      currentProcId = nextProcId();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>    // Initialize the procedure<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    proc.setNonceKey(nonceKey);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    proc.setProcId(currentProcId.longValue());<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span>    // Commit the transaction<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    store.insert(proc, null);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    if (LOG.isDebugEnabled()) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      LOG.debug("Stored " + proc);<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>    // Add the procedure to the executor<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    return pushProcedure(proc);<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>  /**<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * Add a set of new root-procedure to the executor.<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * @param procs the new procedures to execute.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   */<a name="line.800"></a>
-<span class="sourceLineNo">801</span>  // TODO: Do we need to take nonces here?<a name="line.801"></a>
-<span class="sourceLineNo">802</span>  public void submitProcedures(final Procedure[] procs) {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.804"></a>
-<span class="sourceLineNo">805</span><a name="line.805"></a>
-<span class="sourceLineNo">806</span>    // Prepare procedure<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.807"></a>
-<span class="sourceLineNo">808</span>      prepareProcedure(procs[i]).setProcId(nextProcId());<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    }<a name="line.809"></a>
-<span class="sourceLineNo">810</span><a name="line.810"></a>
-<span class="sourceLineNo">811</span>    // Commit the transaction<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    store.insert(procs);<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    if (LOG.isDebugEnabled()) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>      LOG.debug("Stored " + Arrays.toString(procs));<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>    // Add the procedure to the executor<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.818"></a>
-<span class="sourceLineNo">819</span>      pushProcedure(procs[i]);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    }<a name="line.820"></a>
-<span class="sourceLineNo">821</span>  }<a name="line.821"></a>
-<span class="sourceLineNo">822</span><a name="line.822"></a>
-<span class="sourceLineNo">823</span>  private Procedure prepareProcedure(final Procedure proc) {<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    Preconditions.checkArgument(!proc.hasParent(), "unexpected parent", proc);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    if (this.checkOwnerSet) {<a name="line.827"></a>
-<span class="sourceLineNo">828</span>      Preconditions.checkArgument(proc.hasOwner(), "missing owner");<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    }<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    return proc;<a name="line.830"></a>
-<span class="sourceLineNo">831</span>  }<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span>  private long pushProcedure(final Procedure proc) {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    final long currentProcId = proc.getProcId();<a name="line.834"></a>
-<span class="sourceLineNo">835</span><a name="line.835"></a>
-<span class="sourceLineNo">836</span>    // Create the rollback stack for the procedure<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    RootProcedureState stack = new RootProcedureState();<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    rollbackStack.put(currentProcId, stack);<a name="line.838"></a>
-<span class="sourceLineNo">839</span><a name="line.839"></a>
-<span class="sourceLineNo">840</span>    // Submit the new subprocedures<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    assert !procedures.containsKey(currentProcId);<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    procedures.put(currentProcId, proc);<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    sendProcedureAddedNotification(currentProcId);<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    scheduler.addBack(proc);<a name="line.844"></a>
-<span class="sourceLineNo">845</span>    return proc.getProcId();<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>  /**<a name="line.848"></a>
-<span class="sourceLineNo">849</span>   * Send an abort notification the specified procedure.<a name="line.849"></a>
-<span class="sourceLineNo">850</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.850"></a>
-<span class="sourceLineNo">851</span>   * @param procId the procedure to abort<a name="line.851"></a>
-<span class="sourceLineNo">852</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.852"></a>
-<span class="sourceLineNo">853</span>   */<a name="line.853"></a>
-<span class="sourceLineNo">854</span>  public boolean abort(final long procId) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    return abort(procId, true);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>  }<a name="line.856"></a>
-<span class="sourceLineNo">857</span><a name="line.857"></a>
-<span class="sourceLineNo">858</span>  /**<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * Send an abort notification the specified procedure.<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   * @param procId the procedure to abort<a name="line.861"></a>
-<span class="sourceLineNo">862</span>   * @param mayInterruptIfRunning if the proc completed at least one step, should it be aborted?<a name="line.862"></a>
-<span class="sourceLineNo">863</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.863"></a>
-<span class="sourceLineNo">864</span>   */<a name="line.864"></a>
-<span class="sourceLineNo">865</span>  public boolean abort(final long procId, final boolean mayInterruptIfRunning) {<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    final Procedure proc = procedures.get(procId);<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    if (proc != null) {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>      if (!mayInterruptIfRunning &amp;&amp; proc.wasExecuted()) {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        return false;<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      }<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      return proc.abort(getEnvironment());<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    }<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    return false;<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">772</span>    final Long currentProcId;<a name="line.772"></a>
+<span class="sourceLineNo">773</span>    if (nonceKey != null) {<a name="line.773"></a>
+<span class="sourceLineNo">774</span>      currentProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.774"></a>
+<span class="sourceLineNo">775</span>      Preconditions.checkArgument(currentProcId != null,<a name="line.775"></a>
+<span class="sourceLineNo">776</span>        "Expected nonceKey=" + nonceKey + " to be reserved, use registerNonce(); proc=" + proc);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    } else {<a name="line.777"></a>
+<span class="sourceLineNo">778</span>      currentProcId = nextProcId();<a name="line.778"></a>
+<span class="sourceLineNo">779</span>    }<a name="line.779"></a>
+<span class="sourceLineNo">780</span><a name="line.780"></a>
+<span class="sourceLineNo">781</span>    // Initialize the procedure<a name="line.781"></a>
+<span class="sourceLineNo">782</span>    proc.setNonceKey(nonceKey);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>    proc.setProcId(currentProcId.longValue());<a name="line.783"></a>
+<span class="sourceLineNo">784</span><a name="line.784"></a>
+<span class="sourceLineNo">785</span>    // Commit the transaction<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    store.insert(proc, null);<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    if (LOG.isDebugEnabled()) {<a name="line.787"></a>
+<span class="sourceLineNo">788</span>      LOG.debug("Stored " + proc);<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
+<span class="sourceLineNo">790</span><a name="line.790"></a>
+<span class="sourceLineNo">791</span>    // Add the procedure to the executor<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    return pushProcedure(proc);<a name="line.792"></a>
+<span class="sourceLineNo">793</span>  }<a name="line.793"></a>
+<span class="sourceLineNo">794</span><a name="line.794"></a>
+<span class="sourceLineNo">795</span>  /**<a name="line.795"></a>
+<span class="sourceLineNo">796</span>   * Add a set of new root-procedure to the executor.<a name="line.796"></a>
+<span class="sourceLineNo">797</span>   * @param procs the new procedures to execute.<a name="line.797"></a>
+<span class="sourceLineNo">798</span>   */<a name="line.798"></a>
+<span class="sourceLineNo">799</span>  // TODO: Do we need to take nonces here?<a name="line.799"></a>
+<span class="sourceLineNo">800</span>  public void submitProcedures(final Procedure[] procs) {<a name="line.800"></a>
+<span class="sourceLineNo">801</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.801"></a>
+<span class="sourceLineNo">802</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.802"></a>
+<span class="sourceLineNo">803</span><a name="line.803"></a>
+<span class="sourceLineNo">804</span>    // Prepare procedure<a name="line.804"></a>
+<span class="sourceLineNo">805</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.805"></a>
+<span class="sourceLineNo">806</span>      prepareProcedure(procs[i]).setProcId(nextProcId());<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    }<a name="line.807"></a>
+<span class="sourceLineNo">808</span><a name="line.808"></a>
+<span class="sourceLineNo">809</span>    // Commit the transaction<a name="line.809"></a>
+<span class="sourceLineNo">810</span>    store.insert(procs);<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    if (LOG.isDebugEnabled()) {<a name="line.811"></a>
+<span class="sourceLineNo">812</span>      LOG.debug("Stored " + Arrays.toString(procs));<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    }<a name="line.813"></a>
+<span class="sourceLineNo">814</span><a name="line.814"></a>
+<span class="sourceLineNo">815</span>    // Add the procedure to the executor<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.816"></a>
+<span class="sourceLineNo">817</span>      pushProcedure(procs[i]);<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
+<span class="sourceLineNo">819</span>  }<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span>  private Procedure prepareProcedure(final Procedure proc) {<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.822"></a>
+<span class="sourceLineNo">823</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.823"></a>
+<span class="sourceLineNo">824</span>    Preconditions.checkArgument(!proc.hasParent(), "unexpected parent", proc);<a name="line.824"></a>
+<span class="sourceLineNo">825</span>    if (this.checkOwnerSet) {<a name="line.825"></a>
+<span class="sourceLineNo">826</span>      Preconditions.checkArgument(proc.hasOwner(), "missing owner");<a name="line.826"></a>
+<span class="sourceLineNo">827</span>    }<a name="line.827"></a>
+<span class="sourceLineNo">828</span>    return proc;<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>  private long pushProcedure(final Procedure proc) {<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    final long currentProcId = proc.getProcId();<a name="line.832"></a>
+<span class="sourceLineNo">833</span><a name="line.833"></a>
+<span class="sourceLineNo">834</span>    // Create the rollback stack for the procedure<a name="line.834"></a>
+<span class="sourceLineNo">835</span>    RootProcedureState stack = new RootProcedureState();<a name="line.835"></a>
+<span class="sourceLineNo">836</span>    rollbackStack.put(currentProcId, stack);<a name="line.836"></a>
+<span class="sourceLineNo">837</span><a name="line.837"></a>
+<span class="sourceLineNo">838</span>    // Submit the new subprocedures<a name="line.838"></a>
+<span class="sourceLineNo">839</span>    assert !procedures.containsKey(currentProcId);<a name="line.839"></a>
+<span class="sourceLineNo">840</span>    procedures.put(currentProcId, proc);<a name="line.840"></a>

<TRUNCATED>

[15/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html
index 35cebd9..b6b4cb6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html
@@ -321,7 +321,7 @@
 <span class="sourceLineNo">313</span>      final NonceKey nonceKey;<a name="line.313"></a>
 <span class="sourceLineNo">314</span>      final long procId;<a name="line.314"></a>
 <span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>      if (procIter.isNextCompleted()) {<a name="line.316"></a>
+<span class="sourceLineNo">316</span>      if (procIter.isNextFinished()) {<a name="line.316"></a>
 <span class="sourceLineNo">317</span>        ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.317"></a>
 <span class="sourceLineNo">318</span>        nonceKey = proc.getNonceKey();<a name="line.318"></a>
 <span class="sourceLineNo">319</span>        procId = proc.getProcId();<a name="line.319"></a>
@@ -359,7 +359,7 @@
 <span class="sourceLineNo">351</span>    HashSet&lt;Procedure&gt; waitingSet = null;<a name="line.351"></a>
 <span class="sourceLineNo">352</span>    procIter.reset();<a name="line.352"></a>
 <span class="sourceLineNo">353</span>    while (procIter.hasNext()) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (procIter.isNextCompleted()) {<a name="line.354"></a>
+<span class="sourceLineNo">354</span>      if (procIter.isNextFinished()) {<a name="line.354"></a>
 <span class="sourceLineNo">355</span>        procIter.skipNext();<a name="line.355"></a>
 <span class="sourceLineNo">356</span>        continue;<a name="line.356"></a>
 <span class="sourceLineNo">357</span>      }<a name="line.357"></a>
@@ -405,1450 +405,1448 @@
 <span class="sourceLineNo">397</span>          }<a name="line.397"></a>
 <span class="sourceLineNo">398</span>          waitingSet.add(proc);<a name="line.398"></a>
 <span class="sourceLineNo">399</span>          break;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        case FINISHED:<a name="line.400"></a>
-<span class="sourceLineNo">401</span>          if (proc.hasException()) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>            // add the proc to the scheduler to perform the rollback<a name="line.402"></a>
-<span class="sourceLineNo">403</span>            scheduler.addBack(proc);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          }<a name="line.404"></a>
-<span class="sourceLineNo">405</span>          break;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        case ROLLEDBACK:<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        case INITIALIZING:<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          LOG.error(msg);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          throw new UnsupportedOperationException(msg);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        default:<a name="line.411"></a>
-<span class="sourceLineNo">412</span>          break;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      }<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    // 3. Validate the stacks<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    int corruptedCount = 0;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    while (itStack.hasNext()) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      RootProcedureState procStack = entry.getValue();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      if (procStack.isValid()) continue;<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>      for (Procedure proc: procStack.getSubproceduresStack()) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        LOG.error("Corrupted " + proc);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        procedures.remove(proc.getProcId());<a name="line.426"></a>
-<span class="sourceLineNo">427</span>        runnableList.remove(proc);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        corruptedCount++;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      }<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      itStack.remove();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    // 4. Push the procedures to the timeout executor<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    if (waitingSet != null &amp;&amp; !waitingSet.isEmpty()) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      for (Procedure proc: waitingSet) {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        proc.afterReplay(getEnvironment());<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        timeoutExecutor.add(proc);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      }<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    }<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>    // 5. Push the procedure to the scheduler<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    if (!runnableList.isEmpty()) {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      // some procedure may be started way before this stuff.<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        Procedure proc = runnableList.get(i);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        proc.afterReplay(getEnvironment());<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        if (!proc.hasParent()) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        }<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        if (proc.wasExecuted()) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>          scheduler.addFront(proc);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        } else {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          // if it was not in execution, it can wait.<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          scheduler.addBack(proc);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        }<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    }<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>   * Start the procedure executor.<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   *<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * @param numThreads number of threads available for procedure execution.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   */<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    if (running.getAndSet(true)) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      LOG.warn("Already running");<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      return;<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>    // We have numThreads executor + one timer thread used for timing out<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    // procedures and triggering periodic procedures.<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    this.corePoolSize = numThreads;<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    LOG.info("Starting executor worker threads=" + corePoolSize);<a name="line.485"></a>
-<span class="sourceLineNo">486</span><a name="line.486"></a>
-<span class="sourceLineNo">487</span>    // Create the Thread Group for the executors<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    threadGroup = new ThreadGroup("ProcedureExecutor");<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>    // Create the timeout executor<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    timeoutExecutor = new TimeoutExecutorThread(threadGroup);<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>    // Create the workers<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    workerId.set(0);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    workerThreads = new CopyOnWriteArrayList&lt;&gt;();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    for (int i = 0; i &lt; corePoolSize; ++i) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      workerThreads.add(new WorkerThread(threadGroup));<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
+<span class="sourceLineNo">400</span>        case FAILED:<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          // add the proc to the scheduler to perform the rollback<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          scheduler.addBack(proc);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          break;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        case ROLLEDBACK:<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        case INITIALIZING:<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.406"></a>
+<span class="sourceLineNo">407</span>          LOG.error(msg);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>          throw new UnsupportedOperationException(msg);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        default:<a name="line.409"></a>
+<span class="sourceLineNo">410</span>          break;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    // 3. Validate the stacks<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    int corruptedCount = 0;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    while (itStack.hasNext()) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      RootProcedureState procStack = entry.getValue();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      if (procStack.isValid()) continue;<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span>      for (Procedure proc: procStack.getSubproceduresStack()) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        LOG.error("Corrupted " + proc);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        procedures.remove(proc.getProcId());<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        runnableList.remove(proc);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        corruptedCount++;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>      }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      itStack.remove();<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    }<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<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>    // 4. Push the procedures to the timeout executor<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    if (waitingSet != null &amp;&amp; !waitingSet.isEmpty()) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      for (Procedure proc: waitingSet) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        proc.afterReplay(getEnvironment());<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        timeoutExecutor.add(proc);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      }<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span>    // 5. Push the procedure to the scheduler<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    if (!runnableList.isEmpty()) {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      // some procedure may be started way before this stuff.<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>        Procedure proc = runnableList.get(i);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        proc.afterReplay(getEnvironment());<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        if (!proc.hasParent()) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        }<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        if (proc.wasExecuted()) {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          scheduler.addFront(proc);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>        } else {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          // if it was not in execution, it can wait.<a name="line.457"></a>
+<span class="sourceLineNo">458</span>          scheduler.addBack(proc);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      }<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  }<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>   * Start the procedure executor.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   *<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @param numThreads number of threads available for procedure execution.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   */<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    if (running.getAndSet(true)) {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      LOG.warn("Already running");<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      return;<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span><a name="line.479"></a>
+<span class="sourceLineNo">480</span>    // We have numThreads executor + one timer thread used for timing out<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    // procedures and triggering periodic procedures.<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    this.corePoolSize = numThreads;<a name="line.482"></a>
+<span class="sourceLineNo">483</span>    LOG.info("Starting executor worker threads=" + corePoolSize);<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // Create the Thread Group for the executors<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    threadGroup = new ThreadGroup("ProcedureExecutor");<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>    // Create the timeout executor<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    timeoutExecutor = new TimeoutExecutorThread(threadGroup);<a name="line.489"></a>
+<span class="sourceLineNo">490</span><a name="line.490"></a>
+<span class="sourceLineNo">491</span>    // Create the workers<a name="line.491"></a>
+<span class="sourceLineNo">492</span>    workerId.set(0);<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    workerThreads = new CopyOnWriteArrayList&lt;&gt;();<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    for (int i = 0; i &lt; corePoolSize; ++i) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      workerThreads.add(new WorkerThread(threadGroup));<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    }<a name="line.496"></a>
+<span class="sourceLineNo">497</span><a name="line.497"></a>
+<span class="sourceLineNo">498</span>    long st, et;<a name="line.498"></a>
 <span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>    long st, et;<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>    // Acquire the store lease.<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    store.recoverLease();<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    LOG.info(String.format("Recover store (%s) lease: %s",<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.507"></a>
-<span class="sourceLineNo">508</span><a name="line.508"></a>
-<span class="sourceLineNo">509</span>    // start the procedure scheduler<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    scheduler.start();<a name="line.510"></a>
-<span class="sourceLineNo">511</span><a name="line.511"></a>
-<span class="sourceLineNo">512</span>    // TODO: Split in two steps.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    // The first one will make sure that we have the latest id,<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    // so we can start the threads and accept new procedures.<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    // The second step will do the actual load of old procedures.<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    load(abortOnCorruption);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    LOG.info(String.format("Load store (%s): %s",<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (LOG.isTraceEnabled()) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.trace("Start workers " + workerThreads.size());<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    timeoutExecutor.start();<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    for (WorkerThread worker: workerThreads) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      worker.start();<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    // Internal chores<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    timeoutExecutor.add(new WorkerMonitor());<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>    // Add completed cleaner chore<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    addChore(new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  public void stop() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    if (!running.getAndSet(false)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>      return;<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>    LOG.info("Stopping");<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    scheduler.stop();<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    timeoutExecutor.sendStopSignal();<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  @VisibleForTesting<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  public void join() {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    assert !isRunning() : "expected not running";<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>    // stop the timeout executor<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    timeoutExecutor.awaitTermination();<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    timeoutExecutor = null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>    // stop the worker threads<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    for (WorkerThread worker: workerThreads) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      worker.awaitTermination();<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    workerThreads = null;<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    // Destroy the Thread Group for the executors<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    try {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      threadGroup.destroy();<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    } catch (IllegalThreadStateException e) {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      LOG.error("Thread group " + threadGroup + " contains running threads");<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      threadGroup.list();<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    } finally {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      threadGroup = null;<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>    // reset the in-memory state for testing<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    completed.clear();<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    rollbackStack.clear();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    procedures.clear();<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    nonceKeysToProcIdsMap.clear();<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    scheduler.clear();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    lastProcId.set(-1);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  }<a name="line.580"></a>
-<span class="sourceLineNo">581</span><a name="line.581"></a>
-<span class="sourceLineNo">582</span>  public void refreshConfiguration(final Configuration conf) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    this.conf = conf;<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  }<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
+<span class="sourceLineNo">500</span>    // Acquire the store lease.<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    store.recoverLease();<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    LOG.info(String.format("Recover store (%s) lease: %s",<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.505"></a>
+<span class="sourceLineNo">506</span><a name="line.506"></a>
+<span class="sourceLineNo">507</span>    // start the procedure scheduler<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    scheduler.start();<a name="line.508"></a>
+<span class="sourceLineNo">509</span><a name="line.509"></a>
+<span class="sourceLineNo">510</span>    // TODO: Split in two steps.<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    // The first one will make sure that we have the latest id,<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    // so we can start the threads and accept new procedures.<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    // The second step will do the actual load of old procedures.<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    load(abortOnCorruption);<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.517"></a>
+<span class="sourceLineNo">518</span>    LOG.info(String.format("Load store (%s): %s",<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    if (LOG.isTraceEnabled()) {<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      LOG.trace("Start workers " + workerThreads.size());<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    timeoutExecutor.start();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    for (WorkerThread worker: workerThreads) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      worker.start();<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
+<span class="sourceLineNo">529</span><a name="line.529"></a>
+<span class="sourceLineNo">530</span>    // Internal chores<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    timeoutExecutor.add(new WorkerMonitor());<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    // Add completed cleaner chore<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    addChore(new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.534"></a>
+<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>  public void stop() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    if (!running.getAndSet(false)) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      return;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    }<a name="line.540"></a>
+<span class="sourceLineNo">541</span><a name="line.541"></a>
+<span class="sourceLineNo">542</span>    LOG.info("Stopping");<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    scheduler.stop();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    timeoutExecutor.sendStopSignal();<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>  @VisibleForTesting<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  public void join() {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    assert !isRunning() : "expected not running";<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span>    // stop the timeout executor<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    timeoutExecutor.awaitTermination();<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    timeoutExecutor = null;<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    // stop the worker threads<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    for (WorkerThread worker: workerThreads) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      worker.awaitTermination();<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    workerThreads = null;<a name="line.559"></a>
+<span class="sourceLineNo">560</span><a name="line.560"></a>
+<span class="sourceLineNo">561</span>    // Destroy the Thread Group for the executors<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    try {<a name="line.562"></a>
+<span class="sourceLineNo">563</span>      threadGroup.destroy();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    } catch (IllegalThreadStateException e) {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      LOG.error("Thread group " + threadGroup + " contains running threads");<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      threadGroup.list();<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    } finally {<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      threadGroup = null;<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
+<span class="sourceLineNo">570</span><a name="line.570"></a>
+<span class="sourceLineNo">571</span>    // reset the in-memory state for testing<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    completed.clear();<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    rollbackStack.clear();<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    procedures.clear();<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    nonceKeysToProcIdsMap.clear();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    scheduler.clear();<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    lastProcId.set(-1);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
+<span class="sourceLineNo">579</span><a name="line.579"></a>
+<span class="sourceLineNo">580</span>  public void refreshConfiguration(final Configuration conf) {<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    this.conf = conf;<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.582"></a>
+<span class="sourceLineNo">583</span>        DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<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>  // ==========================================================================<a name="line.586"></a>
+<span class="sourceLineNo">587</span>  //  Accessors<a name="line.587"></a>
 <span class="sourceLineNo">588</span>  // ==========================================================================<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  //  Accessors<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  // ==========================================================================<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  public boolean isRunning() {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return running.get();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return the current number of worker threads.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   */<a name="line.597"></a>
-<span class="sourceLineNo">598</span>  public int getWorkerThreadCount() {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    return workerThreads.size();<a name="line.599"></a>
-<span class="sourceLineNo">600</span>  }<a name="line.600"></a>
-<span class="sourceLineNo">601</span><a name="line.601"></a>
-<span class="sourceLineNo">602</span>  /**<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   * @return the core pool size settings.<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   */<a name="line.604"></a>
-<span class="sourceLineNo">605</span>  public int getCorePoolSize() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    return corePoolSize;<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>  public int getActiveExecutorCount() {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    return activeExecutorCount.get();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  public TEnvironment getEnvironment() {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    return this.environment;<a name="line.614"></a>
-<span class="sourceLineNo">615</span>  }<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>  public ProcedureStore getStore() {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    return this.store;<a name="line.618"></a>
-<span class="sourceLineNo">619</span>  }<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>  protected ProcedureScheduler getScheduler() {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    return scheduler;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>  }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>  public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    this.scheduler.signalAll();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>  }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>  public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<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">589</span>  public boolean isRunning() {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    return running.get();<a name="line.590"></a>
+<span class="sourceLineNo">591</span>  }<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span>  /**<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @return the current number of worker threads.<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
+<span class="sourceLineNo">596</span>  public int getWorkerThreadCount() {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    return workerThreads.size();<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  }<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span>  /**<a name="line.600"></a>
+<span class="sourceLineNo">601</span>   * @return the core pool size settings.<a name="line.601"></a>
+<span class="sourceLineNo">602</span>   */<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  public int getCorePoolSize() {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    return corePoolSize;<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  }<a name="line.605"></a>
+<span class="sourceLineNo">606</span><a name="line.606"></a>
+<span class="sourceLineNo">607</span>  public int getActiveExecutorCount() {<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    return activeExecutorCount.get();<a name="line.608"></a>
+<span class="sourceLineNo">609</span>  }<a name="line.609"></a>
+<span class="sourceLineNo">610</span><a name="line.610"></a>
+<span class="sourceLineNo">611</span>  public TEnvironment getEnvironment() {<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    return this.environment;<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>  public ProcedureStore getStore() {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    return this.store;<a name="line.616"></a>
+<span class="sourceLineNo">617</span>  }<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>  protected ProcedureScheduler getScheduler() {<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    return scheduler;<a name="line.620"></a>
+<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>  public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    this.scheduler.signalAll();<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>  public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
+<span class="sourceLineNo">631</span><a name="line.631"></a>
+<span class="sourceLineNo">632</span>  // ==========================================================================<a name="line.632"></a>
+<span class="sourceLineNo">633</span>  //  Submit/Remove Chores<a name="line.633"></a>
 <span class="sourceLineNo">634</span>  // ==========================================================================<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  //  Submit/Remove Chores<a name="line.635"></a>
-<span class="sourceLineNo">636</span>  // ==========================================================================<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span>  /**<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * Add a chore procedure to the executor<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   * @param chore the chore to add<a name="line.640"></a>
-<span class="sourceLineNo">641</span>   */<a name="line.641"></a>
-<span class="sourceLineNo">642</span>  public void addChore(final ProcedureInMemoryChore chore) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    timeoutExecutor.add(chore);<a name="line.644"></a>
-<span class="sourceLineNo">645</span>  }<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>  /**<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   * Remove a chore procedure from the executor<a name="line.648"></a>
-<span class="sourceLineNo">649</span>   * @param chore the chore to remove<a name="line.649"></a>
-<span class="sourceLineNo">650</span>   * @return whether the chore is removed, or it will be removed later<a name="line.650"></a>
-<span class="sourceLineNo">651</span>   */<a name="line.651"></a>
-<span class="sourceLineNo">652</span>  public boolean removeChore(final ProcedureInMemoryChore chore) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    chore.setState(ProcedureState.FINISHED);<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    return timeoutExecutor.remove(chore);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>  }<a name="line.655"></a>
-<span class="sourceLineNo">656</span><a name="line.656"></a>
+<span class="sourceLineNo">635</span><a name="line.635"></a>
+<span class="sourceLineNo">636</span>  /**<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   * Add a chore procedure to the executor<a name="line.637"></a>
+<span class="sourceLineNo">638</span>   * @param chore the chore to add<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   */<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  public void addChore(final ProcedureInMemoryChore chore) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    timeoutExecutor.add(chore);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>  }<a name="line.643"></a>
+<span class="sourceLineNo">644</span><a name="line.644"></a>
+<span class="sourceLineNo">645</span>  /**<a name="line.645"></a>
+<span class="sourceLineNo">646</span>   * Remove a chore procedure from the executor<a name="line.646"></a>
+<span class="sourceLineNo">647</span>   * @param chore the chore to remove<a name="line.647"></a>
+<span class="sourceLineNo">648</span>   * @return whether the chore is removed, or it will be removed later<a name="line.648"></a>
+<span class="sourceLineNo">649</span>   */<a name="line.649"></a>
+<span class="sourceLineNo">650</span>  public boolean removeChore(final ProcedureInMemoryChore chore) {<a name="line.650"></a>
+<span class="sourceLineNo">651</span>    chore.setState(ProcedureState.SUCCESS);<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    return timeoutExecutor.remove(chore);<a name="line.652"></a>
+<span class="sourceLineNo">653</span>  }<a name="line.653"></a>
+<span class="sourceLineNo">654</span><a name="line.654"></a>
+<span class="sourceLineNo">655</span>  // ==========================================================================<a name="line.655"></a>
+<span class="sourceLineNo">656</span>  //  Nonce Procedure helpers<a name="line.656"></a>
 <span class="sourceLineNo">657</span>  // ==========================================================================<a name="line.657"></a>
-<span class="sourceLineNo">658</span>  //  Nonce Procedure helpers<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  // ==========================================================================<a name="line.659"></a>
-<span class="sourceLineNo">660</span>  /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * @param nonceGroup<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * @param nonce<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * @return the generated NonceKey<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>  }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>  /**<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   * Register a nonce for a procedure that is going to be submitted.<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   * A procId will be reserved and on submitProcedure(),<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   * the procedure with the specified nonce will take the reserved ProcId.<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   * otherwise an invalid procId will be returned. and the caller should procede<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   * and submit the procedure.<a name="line.676"></a>
-<span class="sourceLineNo">677</span>   *<a name="line.677"></a>
-<span class="sourceLineNo">678</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.678"></a>
-<span class="sourceLineNo">679</span>   * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.679"></a>
-<span class="sourceLineNo">680</span>   */<a name="line.680"></a>
-<span class="sourceLineNo">681</span>  public long registerNonce(final NonceKey nonceKey) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    if (nonceKey == null) return -1;<a name="line.682"></a>
-<span class="sourceLineNo">683</span><a name="line.683"></a>
-<span class="sourceLineNo">684</span>    // check if we have already a Reserved ID for the nonce<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    if (oldProcId == null) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      // reserve a new Procedure ID, this will be associated with the nonce<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      // and the procedure submitted with the specified nonce will use this ID.<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      final long newProcId = nextProcId();<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.690"></a>
-<span class="sourceLineNo">691</span>      if (oldProcId == null) return -1;<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>    // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    // since the client expect the procedure to be submitted, spin here until it is.<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    while (isRunning() &amp;&amp;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>           !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &amp;&amp;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>           nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      if (traceEnabled) {<a name="line.700"></a>
-<span class="sourceLineNo">701</span>        LOG.trace("Waiting for procId=" + oldProcId.longValue() + " to be submitted");<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      }<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      Threads.sleep(100);<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    }<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    return oldProcId.longValue();<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  }<a name="line.706"></a>
-<span class="sourceLineNo">707</span><a name="line.707"></a>
-<span class="sourceLineNo">708</span>  /**<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    if (nonceKey == null) return;<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    if (procId == null) return;<a name="line.716"></a>
-<span class="sourceLineNo">717</span><a name="line.717"></a>
-<span class="sourceLineNo">718</span>    // if the procedure was not submitted, remove the nonce<a name="line.718"></a>
-<span class="sourceLineNo">719</span>    if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    }<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  }<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>  /**<a name="line.724"></a>
-<span class="sourceLineNo">725</span>   * If the failure failed before submitting it, we may want to give back the<a name="line.725"></a>
-<span class="sourceLineNo">726</span>   * same error to the requests with the same nonceKey.<a name="line.726"></a>
-<span class="sourceLineNo">727</span>   *<a name="line.727"></a>
-<span class="sourceLineNo">728</span>   * @param nonceKey A unique identifier for this operation from the client or process<a name="line.728"></a>
-<span class="sourceLineNo">729</span>   * @param procName name of the procedure, used to inform the user<a name="line.729"></a>
-<span class="sourceLineNo">730</span>   * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * @param exception the failure to report to the user<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   */<a name="line.732"></a>
-<span class="sourceLineNo">733</span>  public void setFailureResultForNonce(final NonceKey nonceKey, final String procName,<a name="line.733"></a>
-<span class="sourceLineNo">734</span>      final User procOwner, final IOException exception) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    if (nonceKey == null) return;<a name="line.735"></a>
-<span class="sourceLineNo">736</span><a name="line.736"></a>
-<span class="sourceLineNo">737</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    if (procId == null || completed.containsKey(procId)) return;<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>    final long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    final ProcedureInfo result = new ProcedureInfo(procId.longValue(),<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      procName, procOwner != null ? procOwner.getShortName() : null,<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      ProcedureUtil.convertToProcedureState(ProcedureState.ROLLEDBACK),<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      -1, nonceKey, exception, currentTime, currentTime, null);<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    completed.putIfAbsent(procId, result);<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
-<span class="sourceLineNo">747</span><a name="line.747"></a>
+<span class="sourceLineNo">658</span>  /**<a name="line.658"></a>
+<span class="sourceLineNo">659</span>   * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.659"></a>
+<span class="sourceLineNo">660</span>   * @param nonceGroup<a name="line.660"></a>
+<span class="sourceLineNo">661</span>   * @param nonce<a name="line.661"></a>
+<span class="sourceLineNo">662</span>   * @return the generated NonceKey<a name="line.662"></a>
+<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
+<span class="sourceLineNo">664</span>  public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.665"></a>
+<span class="sourceLineNo">666</span>  }<a name="line.666"></a>
+<span class="sourceLineNo">667</span><a name="line.667"></a>
+<span class="sourceLineNo">668</span>  /**<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * Register a nonce for a procedure that is going to be submitted.<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * A procId will be reserved and on submitProcedure(),<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   * the procedure with the specified nonce will take the reserved ProcId.<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   * otherwise an invalid procId will be returned. and the caller should procede<a name="line.673"></a>
+<span class="sourceLineNo">674</span>   * and submit the procedure.<a name="line.674"></a>
+<span class="sourceLineNo">675</span>   *<a name="line.675"></a>
+<span class="sourceLineNo">676</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.676"></a>
+<span class="sourceLineNo">677</span>   * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.677"></a>
+<span class="sourceLineNo">678</span>   */<a name="line.678"></a>
+<span class="sourceLineNo">679</span>  public long registerNonce(final NonceKey nonceKey) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span>    if (nonceKey == null) return -1;<a name="line.680"></a>
+<span class="sourceLineNo">681</span><a name="line.681"></a>
+<span class="sourceLineNo">682</span>    // check if we have already a Reserved ID for the nonce<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>    if (oldProcId == null) {<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      // reserve a new Procedure ID, this will be associated with the nonce<a name="line.685"></a>
+<span class="sourceLineNo">686</span>      // and the procedure submitted with the specified nonce will use this ID.<a name="line.686"></a>
+<span class="sourceLineNo">687</span>      final long newProcId = nextProcId();<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      if (oldProcId == null) return -1;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>    }<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span>    // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    // since the client expect the procedure to be submitted, spin here until it is.<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    while (isRunning() &amp;&amp;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>           !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &amp;&amp;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>           nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.697"></a>
+<span class="sourceLineNo">698</span>      if (traceEnabled) {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>        LOG.trace("Waiting for procId=" + oldProcId.longValue() + " to be submitted");<a name="line.699"></a>
+<span class="sourceLineNo">700</span>      }<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      Threads.sleep(100);<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    }<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    return oldProcId.longValue();<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>  /**<a name="line.706"></a>
+<span class="sourceLineNo">707</span>   * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.707"></a>
+<span class="sourceLineNo">708</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.708"></a>
+<span class="sourceLineNo">709</span>   */<a name="line.709"></a>
+<span class="sourceLineNo">710</span>  public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    if (nonceKey == null) return;<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.713"></a>
+<span class="sourceLineNo">714</span>    if (procId == null) return;<a name="line.714"></a>
+<span class="sourceLineNo">715</span><a name="line.715"></a>
+<span class="sourceLineNo">716</span>    // if the procedure was not submitted, remove the nonce<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    }<a name="line.719"></a>
+<span class="sourceLineNo">720</span>  }<a name="line.720"></a>
+<span class="sourceLineNo">721</span><a name="line.721"></a>
+<span class="sourceLineNo">722</span>  /**<a name="line.722"></a>
+<span class="sourceLineNo">723</span>   * If the failure failed before submitting it, we may want to give back the<a name="line.723"></a>
+<span class="sourceLineNo">724</span>   * same error to the requests with the same nonceKey.<a name="line.724"></a>
+<span class="sourceLineNo">725</span>   *<a name="line.725"></a>
+<span class="sourceLineNo">726</span>   * @param nonceKey A unique identifier for this operation from the client or process<a name="line.726"></a>
+<span class="sourceLineNo">727</span>   * @param procName name of the procedure, used to inform the user<a name="line.727"></a>
+<span class="sourceLineNo">728</span>   * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.728"></a>
+<span class="sourceLineNo">729</span>   * @param exception the failure to report to the user<a name="line.729"></a>
+<span class="sourceLineNo">730</span>   */<a name="line.730"></a>
+<span class="sourceLineNo">731</span>  public void setFailureResultForNonce(final NonceKey nonceKey, final String procName,<a name="line.731"></a>
+<span class="sourceLineNo">732</span>      final User procOwner, final IOException exception) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    if (nonceKey == null) return;<a name="line.733"></a>
+<span class="sourceLineNo">734</span><a name="line.734"></a>
+<span class="sourceLineNo">735</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    if (procId == null || completed.containsKey(procId)) return;<a name="line.736"></a>
+<span class="sourceLineNo">737</span><a name="line.737"></a>
+<span class="sourceLineNo">738</span>    final long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.738"></a>
+<span class="sourceLineNo">739</span>    final ProcedureInfo result = new ProcedureInfo(procId.longValue(),<a name="line.739"></a>
+<span class="sourceLineNo">740</span>      procName, procOwner != null ? procOwner.getShortName() : null,<a name="line.740"></a>
+<span class="sourceLineNo">741</span>      ProcedureUtil.convertToProcedureState(ProcedureState.ROLLEDBACK),<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      -1, nonceKey, exception, currentTime, currentTime, null);<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    completed.putIfAbsent(procId, result);<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>  // ==========================================================================<a name="line.746"></a>
+<span class="sourceLineNo">747</span>  //  Submit/Abort Procedure<a name="line.747"></a>
 <span class="sourceLineNo">748</span>  // ==========================================================================<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  //  Submit/Abort Procedure<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>   * Add a new root-procedure to the executor.<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   * @param proc the new procedure to execute.<a name="line.753"></a>
-<span class="sourceLineNo">754</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.754"></a>
-<span class="sourceLineNo">755</span>   */<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  public long submitProcedure(final Procedure proc) {<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    return submitProcedure(proc, null);<a name="line.757"></a>
-<span class="sourceLineNo">758</span>  }<a name="line.758"></a>
-<span class="sourceLineNo">759</span><a name="line.759"></a>
-<span class="sourceLineNo">760</span>  /**<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   * Add a new root-procedure to the executor.<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * @param proc the new procedure to execute.<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   * @param nonceKey the registered unique identifier for this operation from the client or process.<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   */<a name="line.765"></a>
-<span class="sourceLineNo">766</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NP_NULL_ON_SOME_PATH",<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      justification = "FindBugs is blind to the check-for-null")<a name="line.767"></a>
-<span class="sourceLineNo">768</span>  public long submitProcedure(final Procedure proc, final NonceKey nonceKey) {<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.770"></a>
+<span class="sourceLineNo">749</span>  /**<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * Add a new root-procedure to the executor.<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   * @param proc the new procedure to execute.<a name="line.751"></a>
+<span class="sourceLineNo">752</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.752"></a>
+<span class="sourceLineNo">753</span>   */<a name="line.753"></a>
+<span class="sourceLineNo">754</span>  public long submitProcedure(final Procedure proc) {<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    return submitProcedure(proc, null);<a name="line.755"></a>
+<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
+<span class="sourceLineNo">757</span><a name="line.757"></a>
+<span class="sourceLineNo">758</span>  /**<a name="line.758"></a>
+<span class="sourceLineNo">759</span>   * Add a new root-procedure to the executor.<a name="line.759"></a>
+<span class="sourceLineNo">760</span>   * @param proc the new procedure to execute.<a name="line.760"></a>
+<span class="sourceLineNo">761</span>   * @param nonceKey the registered unique identifier for this operation from the client or process.<a name="line.761"></a>
+<span class="sourceLineNo">762</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.762"></a>
+<span class="sourceLineNo">763</span>   */<a name="line.763"></a>
+<span class="sourceLineNo">764</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NP_NULL_ON_SOME_PATH",<a name="line.764"></a>
+<span class="sourceLineNo">765</span>      justification = "FindBugs is blind to the check-for-null")<a name="line.765"></a>
+<span class="sourceLineNo">766</span>  public long submitProcedure(final Procedure proc, final NonceKey nonceKey) {<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.767"></a>
+<span class="sourceLineNo">768</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.768"></a>
+<span class="sourceLineNo">769</span><a name="line.769"></a>
+<span class="sourceLineNo">770</span>    prepareProcedure(proc);<a name="line.770"></a>
 <span class="sourceLineNo">771</span><a name="line.771"></a>
-<span class="sourceLineNo">772</span>    prepareProcedure(proc);<a name="line.772"></a>
-<span class="sourceLineNo">773</span><a name="line.773"></a>
-<span class="sourceLineNo">774</span>    final Long currentProcId;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    if (nonceKey != null) {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>      currentProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      Preconditions.checkArgument(currentProcId != null,<a name="line.777"></a>
-<span class="sourceLineNo">778</span>        "Expected nonceKey=" + nonceKey + " to be reserved, use registerNonce(); proc=" + proc);<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    } else {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      currentProcId = nextProcId();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>    // Initialize the procedure<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    proc.setNonceKey(nonceKey);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    proc.setProcId(currentProcId.longValue());<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span>    // Commit the transaction<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    store.insert(proc, null);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    if (LOG.isDebugEnabled()) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      LOG.debug("Stored " + proc);<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>    // Add the procedure to the executor<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    return pushProcedure(proc);<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>  /**<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * Add a set of new root-procedure to the executor.<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * @param procs the new procedures to execute.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   */<a name="line.800"></a>
-<span class="sourceLineNo">801</span>  // TODO: Do we need to take nonces here?<a name="line.801"></a>
-<span class="sourceLineNo">802</span>  public void submitProcedures(final Procedure[] procs) {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.804"></a>
-<span class="sourceLineNo">805</span><a name="line.805"></a>
-<span class="sourceLineNo">806</span>    // Prepare procedure<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.807"></a>
-<span class="sourceLineNo">808</span>      prepareProcedure(procs[i]).setProcId(nextProcId());<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    }<a name="line.809"></a>
-<span class="sourceLineNo">810</span><a name="line.810"></a>
-<span class="sourceLineNo">811</span>    // Commit the transaction<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    store.insert(procs);<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    if (LOG.isDebugEnabled()) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>      LOG.debug("Stored " + Arrays.toString(procs));<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>    // Add the procedure to the executor<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.818"></a>
-<span class="sourceLineNo">819</span>      pushProcedure(procs[i]);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    }<a name="line.820"></a>
-<span class="sourceLineNo">821</span>  }<a name="line.821"></a>
-<span class="sourceLineNo">822</span><a name="line.822"></a>
-<span class="sourceLineNo">823</span>  private Procedure prepareProcedure(final Procedure proc) {<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    Preconditions.checkArgument(!proc.hasParent(), "unexpected parent", proc);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    if (this.checkOwnerSet) {<a name="line.827"></a>
-<span class="sourceLineNo">828</span>      Preconditions.checkArgument(proc.hasOwner(), "missing owner");<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    }<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    return proc;<a name="line.830"></a>
-<span class="sourceLineNo">831</span>  }<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span>  private long pushProcedure(final Procedure proc) {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    final long currentProcId = proc.getProcId();<a name="line.834"></a>
-<span class="sourceLineNo">835</span><a name="line.835"></a>
-<span class="sourceLineNo">836</span>    // Create the rollback stack for the procedure<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    RootProcedureState stack = new RootProcedureState();<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    rollbackStack.put(currentProcId, stack);<a name="line.838"></a>
-<span class="sourceLineNo">839</span><a name="line.839"></a>
-<span class="sourceLineNo">840</span>    // Submit the new subprocedures<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    assert !procedures.containsKey(currentProcId);<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    procedures.put(currentProcId, proc);<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    sendProcedureAddedNotification(currentProcId);<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    scheduler.addBack(proc);<a name="line.844"></a>
-<span class="sourceLineNo">845</span>    return proc.getProcId();<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>  /**<a name="line.848"></a>
-<span class="sourceLineNo">849</span>   * Send an abort notification the specified procedure.<a name="line.849"></a>
-<span class="sourceLineNo">850</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.850"></a>
-<span class="sourceLineNo">851</span>   * @param procId the procedure to abort<a name="line.851"></a>
-<span class="sourceLineNo">852</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.852"></a>
-<span class="sourceLineNo">853</span>   */<a name="line.853"></a>
-<span class="sourceLineNo">854</span>  public boolean abort(final long procId) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    return abort(procId, true);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>  }<a name="line.856"></a>
-<span class="sourceLineNo">857</span><a name="line.857"></a>
-<span class="sourceLineNo">858</span>  /**<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * Send an abort notification the specified procedure.<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   * @param procId the procedure to abort<a name="line.861"></a>
-<span class="sourceLineNo">862</span>   * @param mayInterruptIfRunning if the proc completed at least one step, should it be aborted?<a name="line.862"></a>
-<span class="sourceLineNo">863</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.863"></a>
-<span class="sourceLineNo">864</span>   */<a name="line.864"></a>
-<span class="sourceLineNo">865</span>  public boolean abort(final long procId, final boolean mayInterruptIfRunning) {<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    final Procedure proc = procedures.get(procId);<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    if (proc != null) {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>      if (!mayInterruptIfRunning &amp;&amp; proc.wasExecuted()) {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        return false;<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      }<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      return proc.abort(getEnvironment());<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    }<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    return false;<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">772</span>    final Long currentProcId;<a name="line.772"></a>
+<span class="sourceLineNo">773</span>    if (nonceKey != null) {<a name="line.773"></a>
+<span class="sourceLineNo">774</span>      currentProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.774"></a>
+<span class="sourceLineNo">775</span>      Preconditions.checkArgument(currentProcId != null,<a name="line.775"></a>
+<span class="sourceLineNo">776</span>        "Expected nonceKey=" + nonceKey + " to be reserved, use registerNonce(); proc=" + proc);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    } else {<a name="line.777"></a>
+<span class="sourceLineNo">778</span>      currentProcId = nextProcId();<a name="line.778"></a>
+<span class="sourceLineNo">779</span>    }<a name="line.779"></a>
+<span class="sourceLineNo">780</span><a name="line.780"></a>
+<span class="sourceLineNo">781</span>    // Initialize the procedure<a name="line.781"></a>
+<span class="sourceLineNo">782</span>    proc.setNonceKey(nonceKey);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>    proc.setProcId(currentProcId.longValue());<a name="line.783"></a>
+<span class="sourceLineNo">784</span><a name="line.784"></a>
+<span class="sourceLineNo">785</span>    // Commit the transaction<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    store.insert(proc, null);<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    if (LOG.isDebugEnabled()) {<a name="line.787"></a>
+<span class="sourceLineNo">788</span>      LOG.debug("Stored " + proc);<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
+<span class="sourceLineNo">790</span><a name="line.790"></a>
+<span class="sourceLineNo">791</span>    // Add the procedure to the executor<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    return pushProcedure(proc);<a name="line.792"></a>
+<span class="sourceLineNo">793</span>  }<a name="line.793"></a>
+<span class="sourceLineNo">794</span><a name="line.794"></a>
+<span class="sourceLineNo">795</span>  /**<a name="line.795"></a>
+<span class="sourceLineNo">796</span>   * Add a set of new root-procedure to the executor.<a name="line.796"></a>
+<span class="sourceLineNo">797</span>   * @param procs the new procedures to execute.<a name="line.797"></a>
+<span class="sourceLineNo">798</span>   */<a name="line.798"></a>
+<span class="sourceLineNo">799</span>  // TODO: Do we need to take nonces here?<a name="line.799"></a>
+<span class="sourceLineNo">800</span>  public void submitProcedures(final Procedure[] procs) {<a name="line.800"></a>
+<span class="sourceLineNo">801</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.801"></a>
+<span class="sourceLineNo">802</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.802"></a>
+<span class="sourceLineNo">803</span><a name="line.803"></a>
+<span class="sourceLineNo">804</span>    // Prepare procedure<a name="line.804"></a>
+<span class="sourceLineNo">805</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.805"></a>
+<span class="sourceLineNo">806</span>      prepareProcedure(procs[i]).setProcId(nextProcId());<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    }<a name="line.807"></a>
+<span class="sourceLineNo">808</span><a name="line.808"></a>
+<span class="sourceLineNo">809</span>    // Commit the transaction<a name="line.809"></a>
+<span class="sourceLineNo">810</span>    store.insert(procs);<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    if (LOG.isDebugEnabled()) {<a name="line.811"></a>
+<span class="sourceLineNo">812</span>      LOG.debug("Stored " + Arrays.toString(procs));<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    }<a name="line.813"></a>
+<span class="sourceLineNo">814</span><a name="line.814"></a>
+<span class="sourceLineNo">815</span>    // Add the procedure to the executor<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.816"></a>
+<span class="sourceLineNo">817</span>      pushProcedure(procs[i]);<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
+<span class="sourceLineNo">819</span>  }<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span>  private Procedure prepareProcedure(final Procedure proc) {<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.822"></a>
+<span class="sourceLineNo">823</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.823"></a>
+<span class="sourceLineNo">824</span>    Preconditions.checkArgument(!proc.hasParent(), "unexpected parent", proc);<a name="line.824"></a>
+<span class="sourceLineNo">825</span>    if (this.checkOwnerSet) {<a name="line.825"></a>
+<span class="sourceLineNo">826</span>      Preconditions.checkArgument(proc.hasOwner(), "missing owner");<a name="line.826"></a>
+<span class="sourceLineNo">827</span>    }<a name="line.827"></a>
+<span class="sourceLineNo">828</span>    return proc;<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>  private long pushProcedure(final Procedure proc) {<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    final long currentProcId = proc.getProcId();<a name="line.832"></a>
+<span class="sourceLineNo">833</span><a name="line.833"></a>
+<span class="sourceLineNo">834</span>    // Create the rollback stack for the procedure<a name="line.834"></a>
+<span class="sourceLineNo">835</span>    RootProcedureState stack = new RootProcedureState();<a name="line.835"></a>
+<span class="sourceLineNo">836</span>    rollbackStack.put(currentProcId, stack);<a name="line.836"></a>
+<span class="sourceLineNo">837</span><a name="line.837"></a>
+<span class="sourceLineNo">838</span>    // Submit the new subprocedures<a name="line.838"></a>
+<span class="sourceLineNo">839</span>    assert !procedures.containsKey(currentProcId);<a name="line.839"></a>
+<span clas

<TRUNCATED>

[07/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html
index 22e0fbd..c2b04b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html
@@ -57,7 +57,7 @@
 <span class="sourceLineNo">049</span>  //   - INIT: Procedure submitted by the user (also known as 'root procedure')<a name="line.49"></a>
 <span class="sourceLineNo">050</span>  //   - INSERT: Children added to the procedure &lt;parentId&gt;:[&lt;childId&gt;, ...]<a name="line.50"></a>
 <span class="sourceLineNo">051</span>  //   - UPDATE: The specified procedure was updated<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  //   - DELETE: The procedure was removed (completed/rolledback and result TTL expired)<a name="line.52"></a>
+<span class="sourceLineNo">052</span>  //   - DELETE: The procedure was removed (finished/rolledback and result TTL expired)<a name="line.52"></a>
 <span class="sourceLineNo">053</span>  //<a name="line.53"></a>
 <span class="sourceLineNo">054</span>  // In the WAL we can find multiple times the same procedure as UPDATE or INSERT.<a name="line.54"></a>
 <span class="sourceLineNo">055</span>  // We read the WAL from top to bottom, so every time we find an entry of the<a name="line.55"></a>
@@ -334,505 +334,504 @@
 <span class="sourceLineNo">326</span>    public boolean hasParent() { return proto.hasParentId(); }<a name="line.326"></a>
 <span class="sourceLineNo">327</span>    public boolean isReady() { return ready; }<a name="line.327"></a>
 <span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span>    public boolean isCompleted() {<a name="line.329"></a>
+<span class="sourceLineNo">329</span>    public boolean isFinished() {<a name="line.329"></a>
 <span class="sourceLineNo">330</span>      if (!hasParent()) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        // we only consider 'root' procedures. because for the user 'completed'<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        // means when everything up to the 'root' is complete.<a name="line.332"></a>
+<span class="sourceLineNo">331</span>        // we only consider 'root' procedures. because for the user 'finished'<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        // means when everything up to the 'root' is finished.<a name="line.332"></a>
 <span class="sourceLineNo">333</span>        switch (proto.getState()) {<a name="line.333"></a>
 <span class="sourceLineNo">334</span>          case ROLLEDBACK:<a name="line.334"></a>
-<span class="sourceLineNo">335</span>            return true;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>          case FINISHED:<a name="line.336"></a>
-<span class="sourceLineNo">337</span>            return !proto.hasException();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>          default:<a name="line.338"></a>
-<span class="sourceLineNo">339</span>            break;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>        }<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      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>    public Procedure convert() throws IOException {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      if (procedure == null) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        procedure = ProcedureUtil.convertToProcedure(proto);<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      }<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      return procedure;<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>    public ProcedureInfo convertToInfo() {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      return ProcedureUtil.convertToProcedureInfo(proto);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>    @Override<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    public String toString() {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      final StringBuilder sb = new StringBuilder();<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      sb.append("Entry(");<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      sb.append(getProcId());<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      sb.append(", parentId=");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      sb.append(getParentId());<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      sb.append(", class=");<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      sb.append(proto.getClassName());<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      sb.append(")");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      return sb.toString();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  }<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>  private static class EntryIterator implements ProcedureIterator {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    private final Entry replayHead;<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    private Entry current;<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span>    public EntryIterator(Entry replayHead) {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      this.replayHead = replayHead;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      this.current = replayHead;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>    @Override<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    public void reset() {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      this.current = replayHead;<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>    @Override<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    public boolean hasNext() {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      return current != null;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>    @Override<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    public boolean isNextCompleted() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      return current != null &amp;&amp; current.isCompleted();<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    @Override<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    public void skipNext() {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      current = current.replayNext;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    }<a name="line.397"></a>
-<span class="sourceLineNo">398</span><a name="line.398"></a>
-<span class="sourceLineNo">399</span>    @Override<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    public Procedure nextAsProcedure() throws IOException {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      try {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        return current.convert();<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      } finally {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        current = current.replayNext;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      }<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    @Override<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    public ProcedureInfo nextAsProcedureInfo() {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      try {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        return current.convertToInfo();<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      } finally {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        current = current.replayNext;<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      }<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>  private static class WalProcedureMap {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    // procedure hash table<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    private Entry[] procedureMap;<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>    // replay-order double-linked-list<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    private Entry replayOrderHead;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    private Entry replayOrderTail;<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    // root linked-list<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    private Entry rootHead;<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // pending unlinked children (root not present yet)<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    private Entry childUnlinkedHead;<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>    // Track ProcId range<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    private long minProcId = Long.MAX_VALUE;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    private long maxProcId = Long.MIN_VALUE;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>    public WalProcedureMap(int size) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      procedureMap = new Entry[size];<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      replayOrderHead = null;<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      replayOrderTail = null;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      rootHead = null;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      childUnlinkedHead = null;<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span>    public void add(ProcedureProtos.Procedure procProto) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      trackProcIds(procProto.getProcId());<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      Entry entry = addToMap(procProto.getProcId(), procProto.hasParentId());<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      boolean isNew = entry.proto == null;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      entry.proto = procProto;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      addToReplayList(entry);<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>      if (isNew) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        if (procProto.hasParentId()) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>          childUnlinkedHead = addToLinkList(entry, childUnlinkedHead);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        } else {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>          rootHead = addToLinkList(entry, rootHead);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        }<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span>    public boolean remove(long procId) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      trackProcIds(procId);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      Entry entry = removeFromMap(procId);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      if (entry != null) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>        unlinkFromReplayList(entry);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>        unlinkFromLinkList(entry);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>        return true;<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      }<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      return false;<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>    private void trackProcIds(long procId) {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      minProcId = Math.min(minProcId, procId);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      maxProcId = Math.max(maxProcId, procId);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
-<span class="sourceLineNo">475</span><a name="line.475"></a>
-<span class="sourceLineNo">476</span>    public long getMinProcId() {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      return minProcId;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span>    public long getMaxProcId() {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      return maxProcId;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    }<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>    public boolean contains(long procId) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      return getProcedure(procId) != null;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    }<a name="line.486"></a>
-<span class="sourceLineNo">487</span><a name="line.487"></a>
-<span class="sourceLineNo">488</span>    public boolean isEmpty() {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      return replayOrderHead == null;<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>    public void clear() {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        procedureMap[i] = null;<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      }<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      replayOrderHead = null;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      replayOrderTail = null;<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      rootHead = null;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      childUnlinkedHead = null;<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      minProcId = Long.MAX_VALUE;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      maxProcId = Long.MIN_VALUE;<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    }<a name="line.502"></a>
-<span class="sourceLineNo">503</span><a name="line.503"></a>
-<span class="sourceLineNo">504</span>    /*<a name="line.504"></a>
-<span class="sourceLineNo">505</span>     * Merges two WalProcedureMap,<a name="line.505"></a>
-<span class="sourceLineNo">506</span>     * the target is the "global" map, the source is the "local" map.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>     *  - The entries in the hashtables are guaranteed to be unique.<a name="line.507"></a>
-<span class="sourceLineNo">508</span>     *    On replay we don't load procedures that already exist in the "global"<a name="line.508"></a>
-<span class="sourceLineNo">509</span>     *    map (the one we are merging the "local" in to).<a name="line.509"></a>
-<span class="sourceLineNo">510</span>     *  - The replayOrderList of the "local" nao will be appended to the "global"<a name="line.510"></a>
-<span class="sourceLineNo">511</span>     *    map replay list.<a name="line.511"></a>
-<span class="sourceLineNo">512</span>     *  - The "local" map will be cleared at the end of the operation.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>     */<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    public void mergeTail(WalProcedureMap other) {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      for (Entry p = other.replayOrderHead; p != null; p = p.replayNext) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        int slotIndex = getMapSlot(p.getProcId());<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        p.hashNext = procedureMap[slotIndex];<a name="line.517"></a>
-<span class="sourceLineNo">518</span>        procedureMap[slotIndex] = p;<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      }<a name="line.519"></a>
-<span class="sourceLineNo">520</span><a name="line.520"></a>
-<span class="sourceLineNo">521</span>      if (replayOrderHead == null) {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        replayOrderHead = other.replayOrderHead;<a name="line.522"></a>
-<span class="sourceLineNo">523</span>        replayOrderTail = other.replayOrderTail;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>        rootHead = other.rootHead;<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        childUnlinkedHead = other.childUnlinkedHead;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      } else {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        // append replay list<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        assert replayOrderTail.replayNext == null;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>        assert other.replayOrderHead.replayPrev == null;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>        replayOrderTail.replayNext = other.replayOrderHead;<a name="line.530"></a>
-<span class="sourceLineNo">531</span>        other.replayOrderHead.replayPrev = replayOrderTail;<a name="line.531"></a>
-<span class="sourceLineNo">532</span>        replayOrderTail = other.replayOrderTail;<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>        // merge rootHead<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        if (rootHead == null) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          rootHead = other.rootHead;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        } else if (other.rootHead != null) {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          Entry otherTail = findLinkListTail(other.rootHead);<a name="line.538"></a>
-<span class="sourceLineNo">539</span>          otherTail.linkNext = rootHead;<a name="line.539"></a>
-<span class="sourceLineNo">540</span>          rootHead.linkPrev = otherTail;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>          rootHead = other.rootHead;<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>        // merge childUnlinkedHead<a name="line.544"></a>
-<span class="sourceLineNo">545</span>        if (childUnlinkedHead == null) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>          childUnlinkedHead = other.childUnlinkedHead;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>        } else if (other.childUnlinkedHead != null) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>          Entry otherTail = findLinkListTail(other.childUnlinkedHead);<a name="line.548"></a>
-<span class="sourceLineNo">549</span>          otherTail.linkNext = childUnlinkedHead;<a name="line.549"></a>
-<span class="sourceLineNo">550</span>          childUnlinkedHead.linkPrev = otherTail;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>          childUnlinkedHead = other.childUnlinkedHead;<a name="line.551"></a>
-<span class="sourceLineNo">552</span>        }<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      }<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      maxProcId = Math.max(maxProcId, other.maxProcId);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      minProcId = Math.max(minProcId, other.minProcId);<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>      other.clear();<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    /*<a name="line.560"></a>
-<span class="sourceLineNo">561</span>     * Returns an EntryIterator with the list of procedures ready<a name="line.561"></a>
-<span class="sourceLineNo">562</span>     * to be added to the executor.<a name="line.562"></a>
-<span class="sourceLineNo">563</span>     * A Procedure is ready if its children and parent are ready.<a name="line.563"></a>
-<span class="sourceLineNo">564</span>     */<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    public EntryIterator fetchReady() {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      buildGraph();<a name="line.566"></a>
-<span class="sourceLineNo">567</span><a name="line.567"></a>
-<span class="sourceLineNo">568</span>      Entry readyHead = null;<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      Entry readyTail = null;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      Entry p = replayOrderHead;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      while (p != null) {<a name="line.571"></a>
-<span class="sourceLineNo">572</span>        Entry next = p.replayNext;<a name="line.572"></a>
-<span class="sourceLineNo">573</span>        if (p.isReady()) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          unlinkFromReplayList(p);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>          if (readyTail != null) {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>            readyTail.replayNext = p;<a name="line.576"></a>
-<span class="sourceLineNo">577</span>            p.replayPrev = readyTail;<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          } else {<a name="line.578"></a>
-<span class="sourceLineNo">579</span>            p.replayPrev = null;<a name="line.579"></a>
-<span class="sourceLineNo">580</span>            readyHead = p;<a name="line.580"></a>
-<span class="sourceLineNo">581</span>          }<a name="line.581"></a>
-<span class="sourceLineNo">582</span>          readyTail = p;<a name="line.582"></a>
-<span class="sourceLineNo">583</span>          p.replayNext = null;<a name="line.583"></a>
-<span class="sourceLineNo">584</span>        }<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        p = next;<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      }<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      // we need the hash-table lookups for parents, so this must be done<a name="line.587"></a>
-<span class="sourceLineNo">588</span>      // out of the loop where we check isReadyToRun()<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      for (p = readyHead; p != null; p = p.replayNext) {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>        removeFromMap(p.getProcId());<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        unlinkFromLinkList(p);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      }<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      return readyHead != null ? new EntryIterator(readyHead) : null;<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    }<a name="line.594"></a>
-<span class="sourceLineNo">595</span><a name="line.595"></a>
-<span class="sourceLineNo">596</span>    /*<a name="line.596"></a>
-<span class="sourceLineNo">597</span>     * Drain this map and return all procedures in it.<a name="line.597"></a>
-<span class="sourceLineNo">598</span>     */<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    public EntryIterator fetchAll() {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      Entry head = replayOrderHead;<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      for (Entry p = head; p != null; p = p.replayNext) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>        removeFromMap(p.getProcId());<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      }<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>        assert procedureMap[i] == null : "map not empty i=" + i;<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      }<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      replayOrderHead = null;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>      replayOrderTail = null;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      childUnlinkedHead = null;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      rootHead = null;<a name="line.610"></a>
-<span class="sourceLineNo">611</span>      return head != null ? new EntryIterator(head) : null;<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>    private void buildGraph() {<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      Entry p = childUnlinkedHead;<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      while (p != null) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        Entry next = p.linkNext;<a name="line.617"></a>
-<span class="sourceLineNo">618</span>        Entry rootProc = getRootProcedure(p);<a name="line.618"></a>
-<span class="sourceLineNo">619</span>        if (rootProc != null) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          rootProc.childHead = addToLinkList(p, rootProc.childHead);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>        }<a name="line.621"></a>
-<span class="sourceLineNo">622</span>        p = next;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>      for (p = rootHead; p != null; p = p.linkNext) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        checkReadyToRun(p);<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><a name="line.629"></a>
-<span class="sourceLineNo">630</span>    private Entry getRootProcedure(Entry entry) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      while (entry != null &amp;&amp; entry.hasParent()) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>        entry = getProcedure(entry.getParentId());<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      return entry;<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>    /*<a name="line.637"></a>
-<span class="sourceLineNo">638</span>     * (see the comprehensive explaination in the beginning of the file)<a name="line.638"></a>
-<span class="sourceLineNo">639</span>     * A Procedure is ready when parent and children are ready.<a name="line.639"></a>
-<span class="sourceLineNo">640</span>     * "ready" means that we all the information that we need in-memory.<a name="line.640"></a>
-<span class="sourceLineNo">641</span>     *<a name="line.641"></a>
-<span class="sourceLineNo">642</span>     * Example-1:<a name="line.642"></a>
-<span class="sourceLineNo">643</span>     * We have two WALs, we start reading fronm the newest (wal-2)<a name="line.643"></a>
-<span class="sourceLineNo">644</span>     *    wal-2 | C B |<a name="line.644"></a>
-<span class="sourceLineNo">645</span>     *    wal-1 | A B C |<a name="line.645"></a>
-<span class="sourceLineNo">646</span>     *<a name="line.646"></a>
-<span class="sourceLineNo">647</span>     * If C and B don't depend on A (A is not the parent), we can start them<a name="line.647"></a>
-<span class="sourceLineNo">648</span>     * before reading wal-1. If B is the only one with parent A we can start C<a name="line.648"></a>
-<span class="sourceLineNo">649</span>     * and read one more WAL before being able to start B.<a name="line.649"></a>
-<span class="sourceLineNo">650</span>     *<a name="line.650"></a>
-<span class="sourceLineNo">651</span>     * How do we know with the only information in B that we are not ready.<a name="line.651"></a>
-<span class="sourceLineNo">652</span>     *  - easy case, the parent is missing from the global map<a name="line.652"></a>
-<span class="sourceLineNo">653</span>     *  - more complex case we look at the Stack IDs<a name="line.653"></a>
-<span class="sourceLineNo">654</span>     *<a name="line.654"></a>
-<span class="sourceLineNo">655</span>     * The Stack-IDs are added to the procedure order as incremental index<a name="line.655"></a>
-<span class="sourceLineNo">656</span>     * tracking how many times that procedure was executed, which is equivalent<a name="line.656"></a>
-<span class="sourceLineNo">657</span>     * at the number of times we wrote the procedure to the WAL.<a name="line.657"></a>
-<span class="sourceLineNo">658</span>     * In the example above:<a name="line.658"></a>
-<span class="sourceLineNo">659</span>     *   wal-2: B has stackId = [1, 2]<a name="line.659"></a>
-<span class="sourceLineNo">660</span>     *   wal-1: B has stackId = [1]<a name="line.660"></a>
-<span class="sourceLineNo">661</span>     *   wal-1: A has stackId = [0]<a name="line.661"></a>
-<span class="sourceLineNo">662</span>     *<a name="line.662"></a>
-<span class="sourceLineNo">663</span>     * Since we know that the Stack-IDs are incremental for a Procedure,<a name="line.663"></a>
-<span class="sourceLineNo">664</span>     * we notice that there is a gap in the stackIds of B, so something was<a name="line.664"></a>
-<span class="sourceLineNo">665</span>     * executed before.<a name="line.665"></a>
-<span class="sourceLineNo">666</span>     * To identify when a Procedure is ready we do the sum of the stackIds of<a name="line.666"></a>
-<span class="sourceLineNo">667</span>     * the procedure and the parent. if the stackIdSum is equals to the<a name="line.667"></a>
-<span class="sourceLineNo">668</span>     * sum of {1..maxStackId} then everything we need is avaiable.<a name="line.668"></a>
-<span class="sourceLineNo">669</span>     *<a name="line.669"></a>
-<span class="sourceLineNo">670</span>     * Example-2<a name="line.670"></a>
-<span class="sourceLineNo">671</span>     *    wal-2 | A |              A stackIds = [0, 2]<a name="line.671"></a>
-<span class="sourceLineNo">672</span>     *    wal-1 | A B |            B stackIds = [1]<a name="line.672"></a>
-<span class="sourceLineNo">673</span>     *<a name="line.673"></a>
-<span class="sourceLineNo">674</span>     * There is a gap between A stackIds so something was executed in between.<a name="line.674"></a>
-<span class="sourceLineNo">675</span>     */<a name="line.675"></a>
-<span class="sourceLineNo">676</span>    private boolean checkReadyToRun(Entry rootEntry) {<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      assert !rootEntry.hasParent() : "expected root procedure, got " + rootEntry;<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span>      if (rootEntry.isCompleted()) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>        // if the root procedure is completed, sub-procedures should be gone<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        if (rootEntry.childHead != null) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>          LOG.error("unexpected active children for root-procedure: " + rootEntry);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>            LOG.error("unexpected active children: " + p);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>          }<a name="line.685"></a>
-<span class="sourceLineNo">686</span>        }<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>        assert rootEntry.childHead == null : "unexpected children on root completion. " + rootEntry;<a name="line.688"></a>
-<span class="sourceLineNo">689</span>        rootEntry.ready = true;<a name="line.689"></a>
-<span class="sourceLineNo">690</span>        return true;<a name="line.690"></a>
-<span class="sourceLineNo">691</span>      }<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span>      int stackIdSum = 0;<a name="line.693"></a>
-<span class="sourceLineNo">694</span>      int maxStackId = 0;<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      for (int i = 0; i &lt; rootEntry.proto.getStackIdCount(); ++i) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>        int stackId = 1 + rootEntry.proto.getStackId(i);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>        maxStackId  = Math.max(maxStackId, stackId);<a name="line.697"></a>
-<span class="sourceLineNo">698</span>        stackIdSum += stackId;<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>      for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span>        for (int i = 0; i &lt; p.proto.getStackIdCount(); ++i) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span>          int stackId = 1 + p.proto.getStackId(i);<a name="line.703"></a>
-<span class="sourceLineNo">704</span>          maxStackId  = Math.max(maxStackId, stackId);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>          stackIdSum += stackId;<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        }<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      }<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      final int cmpStackIdSum = (maxStackId * (maxStackId + 1) / 2);<a name="line.708"></a>
-<span class="sourceLineNo">709</span>      if (cmpStackIdSum == stackIdSum) {<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        rootEntry.ready = true;<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>          p.ready = true;<a name="line.712"></a>
-<span class="sourceLineNo">713</span>        }<a name="line.713"></a>
-<span class="sourceLineNo">714</span>        return true;<a name="line.714"></a>
-<span class="sourceLineNo">715</span>      }<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      return false;<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    }<a name="line.717"></a>
-<span class="sourceLineNo">718</span><a name="line.718"></a>
-<span class="sourceLineNo">719</span>    private void unlinkFromReplayList(Entry entry) {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      if (replayOrderHead == entry) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>        replayOrderHead = entry.replayNext;<a name="line.721"></a>
-<span class="sourceLineNo">722</span>      }<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      if (replayOrderTail == entry) {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>        replayOrderTail = entry.replayPrev;<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      }<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      if (entry.replayPrev != null) {<a name="line.726"></a>
-<span class="sourceLineNo">727</span>        entry.replayPrev.replayNext = entry.replayNext;<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      }<a name="line.728"></a>
-<span class="sourceLineNo">729</span>      if (entry.replayNext != null) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        entry.replayNext.replayPrev = entry.replayPrev;<a name="line.730"></a>
-<span class="sourceLineNo">731</span>      }<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    }<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>    private void addToReplayList(final Entry entry) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>      unlinkFromReplayList(entry);<a name="line.735"></a>
-<span class="sourceLineNo">736</span>      entry.replayNext = replayOrderHead;<a name="line.736"></a>
-<span class="sourceLineNo">737</span>      entry.replayPrev = null;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>      if (replayOrderHead != null) {<a name="line.738"></a>
-<span class="sourceLineNo">739</span>        replayOrderHead.replayPrev = entry;<a name="line.739"></a>
-<span class="sourceLineNo">740</span>      } else {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>        replayOrderTail = entry;<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      }<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      replayOrderHead = entry;<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>    private void unlinkFromLinkList(Entry entry) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>      if (entry == rootHead) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>        rootHead = entry.linkNext;<a name="line.748"></a>
-<span class="sourceLineNo">749</span>      } else if (entry == childUnlinkedHead) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>        childUnlinkedHead = entry.linkNext;<a name="line.750"></a>
-<span class="sourceLineNo">751</span>      }<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      if (entry.linkPrev != null) {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        entry.linkPrev.linkNext = entry.linkNext;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>      if (entry.linkNext != null) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span>        entry.linkNext.linkPrev = entry.linkPrev;<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><a name="line.759"></a>
-<span class="sourceLineNo">760</span>    private Entry addToLinkList(Entry entry, Entry linkHead) {<a name="line.760"></a>
-<span class="sourceLineNo">761</span>      unlinkFromLinkList(entry);<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      entry.linkNext = linkHead;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      entry.linkPrev = null;<a name="line.763"></a>
-<span class="sourceLineNo">764</span>      if (linkHead != null) {<a name="line.764"></a>
-<span class="sourceLineNo">765</span>        linkHead.linkPrev = entry;<a name="line.765"></a>
-<span class="sourceLineNo">766</span>      }<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      return entry;<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    }<a name="line.768"></a>
-<span class="sourceLineNo">769</span><a name="line.769"></a>
-<span class="sourceLineNo">770</span>    private Entry findLinkListTail(Entry linkHead) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>      Entry tail = linkHead;<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      while (tail.linkNext != null) {<a name="line.772"></a>
-<span class="sourceLineNo">773</span>        tail = tail.linkNext;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>      }<a name="line.774"></a>
-<span class="sourceLineNo">775</span>      return tail;<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    }<a name="line.776"></a>
-<span class="sourceLineNo">777</span><a name="line.777"></a>
-<span class="sourceLineNo">778</span>    private Entry addToMap(final long procId, final boolean hasParent) {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      int slotIndex = getMapSlot(procId);<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      Entry entry = getProcedure(slotIndex, procId);<a name="line.780"></a>
-<span class="sourceLineNo">781</span>      if (entry != null) return entry;<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>      entry = new Entry(procedureMap[slotIndex]);<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      procedureMap[slotIndex] = entry;<a name="line.784"></a>
-<span class="sourceLineNo">785</span>      return entry;<a name="line.785"></a>
-<span class="sourceLineNo">786</span>    }<a name="line.786"></a>
-<span class="sourceLineNo">787</span><a name="line.787"></a>
-<span class="sourceLineNo">788</span>    private Entry removeFromMap(final long procId) {<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      int slotIndex = getMapSlot(procId);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      Entry prev = null;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>      Entry entry = procedureMap[slotIndex];<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      while (entry != null) {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>        if (procId == entry.getProcId()) {<a name="line.793"></a>
-<span class="sourceLineNo">794</span>          if (prev != null) {<a name="line.794"></a>
-<span class="sourceLineNo">795</span>            prev.hashNext = entry.hashNext;<a name="line.795"></a>
-<span class="sourceLineNo">796</span>          } else {<a name="line.796"></a>
-<span class="sourceLineNo">797</span>            procedureMap[slotIndex] = entry.hashNext;<a name="line.797"></a>
-<span class="sourceLineNo">798</span>          }<a name="line.798"></a>
-<span class="sourceLineNo">799</span>          entry.hashNext = null;<a name="line.799"></a>
-<span class="sourceLineNo">800</span>          return entry;<a name="line.800"></a>
-<span class="sourceLineNo">801</span>        }<a name="line.801"></a>
-<span class="sourceLineNo">802</span>        prev = entry;<a name="line.802"></a>
-<span class="sourceLineNo">803</span>        entry = entry.hashNext;<a name="line.803"></a>
-<span class="sourceLineNo">804</span>      }<a name="line.804"></a>
-<span class="sourceLineNo">805</span>      return null;<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    }<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span>    private Entry getProcedure(final long procId) {<a name="line.808"></a>
-<span class="sourceLineNo">809</span>      return getProcedure(getMapSlot(procId), procId);<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    }<a name="line.810"></a>
-<span class="sourceLineNo">811</span><a name="line.811"></a>
-<span class="sourceLineNo">812</span>    private Entry getProcedure(final int slotIndex, final long procId) {<a name="line.812"></a>
-<span class="sourceLineNo">813</span>      Entry entry = procedureMap[slotIndex];<a name="line.813"></a>
-<span class="sourceLineNo">814</span>      while (entry != null) {<a name="line.814"></a>
-<span class="sourceLineNo">815</span>        if (procId == entry.getProcId()) {<a name="line.815"></a>
-<span class="sourceLineNo">816</span>          return entry;<a name="line.816"></a>
-<span class="sourceLineNo">817</span>        }<a name="line.817"></a>
-<span class="sourceLineNo">818</span>        entry = entry.hashNext;<a name="line.818"></a>
-<span class="sourceLineNo">819</span>      }<a name="line.819"></a>
-<span class="sourceLineNo">820</span>      return null;<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>    private int getMapSlot(final long procId) {<a name="line.823"></a>
-<span class="sourceLineNo">824</span>      return (int)(Procedure.getProcIdHashCode(procId) % procedureMap.length);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    }<a name="line.825"></a>
-<span class="sourceLineNo">826</span>  }<a name="line.826"></a>
-<span class="sourceLineNo">827</span>}<a name="line.827"></a>
+<span class="sourceLineNo">335</span>          case SUCCESS:<a name="line.335"></a>
+<span class="sourceLineNo">336</span>            return true;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>          default:<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            break;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        }<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      }<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      return false;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    }<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>    public Procedure convert() throws IOException {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      if (procedure == null) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        procedure = ProcedureUtil.convertToProcedure(proto);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      }<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      return procedure;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span>    public ProcedureInfo convertToInfo() {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      return ProcedureUtil.convertToProcedureInfo(proto);<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>    @Override<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    public String toString() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      final StringBuilder sb = new StringBuilder();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      sb.append("Entry(");<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      sb.append(getProcId());<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      sb.append(", parentId=");<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      sb.append(getParentId());<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      sb.append(", class=");<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      sb.append(proto.getClassName());<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      sb.append(")");<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      return sb.toString();<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span>  }<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span>  private static class EntryIterator implements ProcedureIterator {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    private final Entry replayHead;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    private Entry current;<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>    public EntryIterator(Entry replayHead) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      this.replayHead = replayHead;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      this.current = replayHead;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>    @Override<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    public void reset() {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      this.current = replayHead;<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>    @Override<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    public boolean hasNext() {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      return current != null;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    }<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span>    @Override<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    public boolean isNextFinished() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      return current != null &amp;&amp; current.isFinished();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span>    @Override<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    public void skipNext() {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>      current = current.replayNext;<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    }<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span>    @Override<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    public Procedure nextAsProcedure() throws IOException {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        return current.convert();<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      } finally {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        current = current.replayNext;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      }<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    }<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span>    @Override<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    public ProcedureInfo nextAsProcedureInfo() {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      try {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        return current.convertToInfo();<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      } finally {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        current = current.replayNext;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      }<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  }<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span>  private static class WalProcedureMap {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    // procedure hash table<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    private Entry[] procedureMap;<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span>    // replay-order double-linked-list<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    private Entry replayOrderHead;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    private Entry replayOrderTail;<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>    // root linked-list<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    private Entry rootHead;<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span>    // pending unlinked children (root not present yet)<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    private Entry childUnlinkedHead;<a name="line.429"></a>
+<span class="sourceLineNo">430</span><a name="line.430"></a>
+<span class="sourceLineNo">431</span>    // Track ProcId range<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    private long minProcId = Long.MAX_VALUE;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    private long maxProcId = Long.MIN_VALUE;<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>    public WalProcedureMap(int size) {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      procedureMap = new Entry[size];<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      replayOrderHead = null;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      replayOrderTail = null;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      rootHead = null;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      childUnlinkedHead = null;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    }<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>    public void add(ProcedureProtos.Procedure procProto) {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      trackProcIds(procProto.getProcId());<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      Entry entry = addToMap(procProto.getProcId(), procProto.hasParentId());<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      boolean isNew = entry.proto == null;<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      entry.proto = procProto;<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      addToReplayList(entry);<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>      if (isNew) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        if (procProto.hasParentId()) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          childUnlinkedHead = addToLinkList(entry, childUnlinkedHead);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        } else {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>          rootHead = addToLinkList(entry, rootHead);<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>    }<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>    public boolean remove(long procId) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      trackProcIds(procId);<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      Entry entry = removeFromMap(procId);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      if (entry != null) {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        unlinkFromReplayList(entry);<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        unlinkFromLinkList(entry);<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        return true;<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      }<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      return false;<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>    private void trackProcIds(long procId) {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      minProcId = Math.min(minProcId, procId);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      maxProcId = Math.max(maxProcId, procId);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    }<a name="line.473"></a>
+<span class="sourceLineNo">474</span><a name="line.474"></a>
+<span class="sourceLineNo">475</span>    public long getMinProcId() {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      return minProcId;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    public long getMaxProcId() {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      return maxProcId;<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>    public boolean contains(long procId) {<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      return getProcedure(procId) != null;<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    }<a name="line.485"></a>
+<span class="sourceLineNo">486</span><a name="line.486"></a>
+<span class="sourceLineNo">487</span>    public boolean isEmpty() {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      return replayOrderHead == null;<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>    public void clear() {<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.492"></a>
+<span class="sourceLineNo">493</span>        procedureMap[i] = null;<a name="line.493"></a>
+<span class="sourceLineNo">494</span>      }<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      replayOrderHead = null;<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      replayOrderTail = null;<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      rootHead = null;<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      childUnlinkedHead = null;<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      minProcId = Long.MAX_VALUE;<a name="line.499"></a>
+<span class="sourceLineNo">500</span>      maxProcId = Long.MIN_VALUE;<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>    /*<a name="line.503"></a>
+<span class="sourceLineNo">504</span>     * Merges two WalProcedureMap,<a name="line.504"></a>
+<span class="sourceLineNo">505</span>     * the target is the "global" map, the source is the "local" map.<a name="line.505"></a>
+<span class="sourceLineNo">506</span>     *  - The entries in the hashtables are guaranteed to be unique.<a name="line.506"></a>
+<span class="sourceLineNo">507</span>     *    On replay we don't load procedures that already exist in the "global"<a name="line.507"></a>
+<span class="sourceLineNo">508</span>     *    map (the one we are merging the "local" in to).<a name="line.508"></a>
+<span class="sourceLineNo">509</span>     *  - The replayOrderList of the "local" nao will be appended to the "global"<a name="line.509"></a>
+<span class="sourceLineNo">510</span>     *    map replay list.<a name="line.510"></a>
+<span class="sourceLineNo">511</span>     *  - The "local" map will be cleared at the end of the operation.<a name="line.511"></a>
+<span class="sourceLineNo">512</span>     */<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    public void mergeTail(WalProcedureMap other) {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      for (Entry p = other.replayOrderHead; p != null; p = p.replayNext) {<a name="line.514"></a>
+<span class="sourceLineNo">515</span>        int slotIndex = getMapSlot(p.getProcId());<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        p.hashNext = procedureMap[slotIndex];<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        procedureMap[slotIndex] = p;<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span><a name="line.519"></a>
+<span class="sourceLineNo">520</span>      if (replayOrderHead == null) {<a name="line.520"></a>
+<span class="sourceLineNo">521</span>        replayOrderHead = other.replayOrderHead;<a name="line.521"></a>
+<span class="sourceLineNo">522</span>        replayOrderTail = other.replayOrderTail;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>        rootHead = other.rootHead;<a name="line.523"></a>
+<span class="sourceLineNo">524</span>        childUnlinkedHead = other.childUnlinkedHead;<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      } else {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>        // append replay list<a name="line.526"></a>
+<span class="sourceLineNo">527</span>        assert replayOrderTail.replayNext == null;<a name="line.527"></a>
+<span class="sourceLineNo">528</span>        assert other.replayOrderHead.replayPrev == null;<a name="line.528"></a>
+<span class="sourceLineNo">529</span>        replayOrderTail.replayNext = other.replayOrderHead;<a name="line.529"></a>
+<span class="sourceLineNo">530</span>        other.replayOrderHead.replayPrev = replayOrderTail;<a name="line.530"></a>
+<span class="sourceLineNo">531</span>        replayOrderTail = other.replayOrderTail;<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>        // merge rootHead<a name="line.533"></a>
+<span class="sourceLineNo">534</span>        if (rootHead == null) {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>          rootHead = other.rootHead;<a name="line.535"></a>
+<span class="sourceLineNo">536</span>        } else if (other.rootHead != null) {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>          Entry otherTail = findLinkListTail(other.rootHead);<a name="line.537"></a>
+<span class="sourceLineNo">538</span>          otherTail.linkNext = rootHead;<a name="line.538"></a>
+<span class="sourceLineNo">539</span>          rootHead.linkPrev = otherTail;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>          rootHead = other.rootHead;<a name="line.540"></a>
+<span class="sourceLineNo">541</span>        }<a name="line.541"></a>
+<span class="sourceLineNo">542</span><a name="line.542"></a>
+<span class="sourceLineNo">543</span>        // merge childUnlinkedHead<a name="line.543"></a>
+<span class="sourceLineNo">544</span>        if (childUnlinkedHead == null) {<a name="line.544"></a>
+<span class="sourceLineNo">545</span>          childUnlinkedHead = other.childUnlinkedHead;<a name="line.545"></a>
+<span class="sourceLineNo">546</span>        } else if (other.childUnlinkedHead != null) {<a name="line.546"></a>
+<span class="sourceLineNo">547</span>          Entry otherTail = findLinkListTail(other.childUnlinkedHead);<a name="line.547"></a>
+<span class="sourceLineNo">548</span>          otherTail.linkNext = childUnlinkedHead;<a name="line.548"></a>
+<span class="sourceLineNo">549</span>          childUnlinkedHead.linkPrev = otherTail;<a name="line.549"></a>
+<span class="sourceLineNo">550</span>          childUnlinkedHead = other.childUnlinkedHead;<a name="line.550"></a>
+<span class="sourceLineNo">551</span>        }<a name="line.551"></a>
+<span class="sourceLineNo">552</span>      }<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      maxProcId = Math.max(maxProcId, other.maxProcId);<a name="line.553"></a>
+<span class="sourceLineNo">554</span>      minProcId = Math.max(minProcId, other.minProcId);<a name="line.554"></a>
+<span class="sourceLineNo">555</span><a name="line.555"></a>
+<span class="sourceLineNo">556</span>      other.clear();<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    }<a name="line.557"></a>
+<span class="sourceLineNo">558</span><a name="line.558"></a>
+<span class="sourceLineNo">559</span>    /*<a name="line.559"></a>
+<span class="sourceLineNo">560</span>     * Returns an EntryIterator with the list of procedures ready<a name="line.560"></a>
+<span class="sourceLineNo">561</span>     * to be added to the executor.<a name="line.561"></a>
+<span class="sourceLineNo">562</span>     * A Procedure is ready if its children and parent are ready.<a name="line.562"></a>
+<span class="sourceLineNo">563</span>     */<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    public EntryIterator fetchReady() {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      buildGraph();<a name="line.565"></a>
+<span class="sourceLineNo">566</span><a name="line.566"></a>
+<span class="sourceLineNo">567</span>      Entry readyHead = null;<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      Entry readyTail = null;<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      Entry p = replayOrderHead;<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      while (p != null) {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>        Entry next = p.replayNext;<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        if (p.isReady()) {<a name="line.572"></a>
+<span class="sourceLineNo">573</span>          unlinkFromReplayList(p);<a name="line.573"></a>
+<span class="sourceLineNo">574</span>          if (readyTail != null) {<a name="line.574"></a>
+<span class="sourceLineNo">575</span>            readyTail.replayNext = p;<a name="line.575"></a>
+<span class="sourceLineNo">576</span>            p.replayPrev = readyTail;<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          } else {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>            p.replayPrev = null;<a name="line.578"></a>
+<span class="sourceLineNo">579</span>            readyHead = p;<a name="line.579"></a>
+<span class="sourceLineNo">580</span>          }<a name="line.580"></a>
+<span class="sourceLineNo">581</span>          readyTail = p;<a name="line.581"></a>
+<span class="sourceLineNo">582</span>          p.replayNext = null;<a name="line.582"></a>
+<span class="sourceLineNo">583</span>        }<a name="line.583"></a>
+<span class="sourceLineNo">584</span>        p = next;<a name="line.584"></a>
+<span class="sourceLineNo">585</span>      }<a name="line.585"></a>
+<span class="sourceLineNo">586</span>      // we need the hash-table lookups for parents, so this must be done<a name="line.586"></a>
+<span class="sourceLineNo">587</span>      // out of the loop where we check isReadyToRun()<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      for (p = readyHead; p != null; p = p.replayNext) {<a name="line.588"></a>
+<span class="sourceLineNo">589</span>        removeFromMap(p.getProcId());<a name="line.589"></a>
+<span class="sourceLineNo">590</span>        unlinkFromLinkList(p);<a name="line.590"></a>
+<span class="sourceLineNo">591</span>      }<a name="line.591"></a>
+<span class="sourceLineNo">592</span>      return readyHead != null ? new EntryIterator(readyHead) : null;<a name="line.592"></a>
+<span class="sourceLineNo">593</span>    }<a name="line.593"></a>
+<span class="sourceLineNo">594</span><a name="line.594"></a>
+<span class="sourceLineNo">595</span>    /*<a name="line.595"></a>
+<span class="sourceLineNo">596</span>     * Drain this map and return all procedures in it.<a name="line.596"></a>
+<span class="sourceLineNo">597</span>     */<a name="line.597"></a>
+<span class="sourceLineNo">598</span>    public EntryIterator fetchAll() {<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      Entry head = replayOrderHead;<a name="line.599"></a>
+<span class="sourceLineNo">600</span>      for (Entry p = head; p != null; p = p.replayNext) {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>        removeFromMap(p.getProcId());<a name="line.601"></a>
+<span class="sourceLineNo">602</span>      }<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>        assert procedureMap[i] == null : "map not empty i=" + i;<a name="line.604"></a>
+<span class="sourceLineNo">605</span>      }<a name="line.605"></a>
+<span class="sourceLineNo">606</span>      replayOrderHead = null;<a name="line.606"></a>
+<span class="sourceLineNo">607</span>      replayOrderTail = null;<a name="line.607"></a>
+<span class="sourceLineNo">608</span>      childUnlinkedHead = null;<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      rootHead = null;<a name="line.609"></a>
+<span class="sourceLineNo">610</span>      return head != null ? new EntryIterator(head) : null;<a name="line.610"></a>
+<span class="sourceLineNo">611</span>    }<a name="line.611"></a>
+<span class="sourceLineNo">612</span><a name="line.612"></a>
+<span class="sourceLineNo">613</span>    private void buildGraph() {<a name="line.613"></a>
+<span class="sourceLineNo">614</span>      Entry p = childUnlinkedHead;<a name="line.614"></a>
+<span class="sourceLineNo">615</span>      while (p != null) {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>        Entry next = p.linkNext;<a name="line.616"></a>
+<span class="sourceLineNo">617</span>        Entry rootProc = getRootProcedure(p);<a name="line.617"></a>
+<span class="sourceLineNo">618</span>        if (rootProc != null) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>          rootProc.childHead = addToLinkList(p, rootProc.childHead);<a name="line.619"></a>
+<span class="sourceLineNo">620</span>        }<a name="line.620"></a>
+<span class="sourceLineNo">621</span>        p = next;<a name="line.621"></a>
+<span class="sourceLineNo">622</span>      }<a name="line.622"></a>
+<span class="sourceLineNo">623</span><a name="line.623"></a>
+<span class="sourceLineNo">624</span>      for (p = rootHead; p != null; p = p.linkNext) {<a name="line.624"></a>
+<span class="sourceLineNo">625</span>        checkReadyToRun(p);<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>    private Entry getRootProcedure(Entry entry) {<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      while (entry != null &amp;&amp; entry.hasParent()) {<a name="line.630"></a>
+<span class="sourceLineNo">631</span>        entry = getProcedure(entry.getParentId());<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      }<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      return entry;<a name="line.633"></a>
+<span class="sourceLineNo">634</span>    }<a name="line.634"></a>
+<span class="sourceLineNo">635</span><a name="line.635"></a>
+<span class="sourceLineNo">636</span>    /*<a name="line.636"></a>
+<span class="sourceLineNo">637</span>     * (see the comprehensive explaination in the beginning of the file)<a name="line.637"></a>
+<span class="sourceLineNo">638</span>     * A Procedure is ready when parent and children are ready.<a name="line.638"></a>
+<span class="sourceLineNo">639</span>     * "ready" means that we all the information that we need in-memory.<a name="line.639"></a>
+<span class="sourceLineNo">640</span>     *<a name="line.640"></a>
+<span class="sourceLineNo">641</span>     * Example-1:<a name="line.641"></a>
+<span class="sourceLineNo">642</span>     * We have two WALs, we start reading fronm the newest (wal-2)<a name="line.642"></a>
+<span class="sourceLineNo">643</span>     *    wal-2 | C B |<a name="line.643"></a>
+<span class="sourceLineNo">644</span>     *    wal-1 | A B C |<a name="line.644"></a>
+<span class="sourceLineNo">645</span>     *<a name="line.645"></a>
+<span class="sourceLineNo">646</span>     * If C and B don't depend on A (A is not the parent), we can start them<a name="line.646"></a>
+<span class="sourceLineNo">647</span>     * before reading wal-1. If B is the only one with parent A we can start C<a name="line.647"></a>
+<span class="sourceLineNo">648</span>     * and read one more WAL before being able to start B.<a name="line.648"></a>
+<span class="sourceLineNo">649</span>     *<a name="line.649"></a>
+<span class="sourceLineNo">650</span>     * How do we know with the only information in B that we are not ready.<a name="line.650"></a>
+<span class="sourceLineNo">651</span>     *  - easy case, the parent is missing from the global map<a name="line.651"></a>
+<span class="sourceLineNo">652</span>     *  - more complex case we look at the Stack IDs<a name="line.652"></a>
+<span class="sourceLineNo">653</span>     *<a name="line.653"></a>
+<span class="sourceLineNo">654</span>     * The Stack-IDs are added to the procedure order as incremental index<a name="line.654"></a>
+<span class="sourceLineNo">655</span>     * tracking how many times that procedure was executed, which is equivalent<a name="line.655"></a>
+<span class="sourceLineNo">656</span>     * at the number of times we wrote the procedure to the WAL.<a name="line.656"></a>
+<span class="sourceLineNo">657</span>     * In the example above:<a name="line.657"></a>
+<span class="sourceLineNo">658</span>     *   wal-2: B has stackId = [1, 2]<a name="line.658"></a>
+<span class="sourceLineNo">659</span>     *   wal-1: B has stackId = [1]<a name="line.659"></a>
+<span class="sourceLineNo">660</span>     *   wal-1: A has stackId = [0]<a name="line.660"></a>
+<span class="sourceLineNo">661</span>     *<a name="line.661"></a>
+<span class="sourceLineNo">662</span>     * Since we know that the Stack-IDs are incremental for a Procedure,<a name="line.662"></a>
+<span class="sourceLineNo">663</span>     * we notice that there is a gap in the stackIds of B, so something was<a name="line.663"></a>
+<span class="sourceLineNo">664</span>     * executed before.<a name="line.664"></a>
+<span class="sourceLineNo">665</span>     * To identify when a Procedure is ready we do the sum of the stackIds of<a name="line.665"></a>
+<span class="sourceLineNo">666</span>     * the procedure and the parent. if the stackIdSum is equals to the<a name="line.666"></a>
+<span class="sourceLineNo">667</span>     * sum of {1..maxStackId} then everything we need is avaiable.<a name="line.667"></a>
+<span class="sourceLineNo">668</span>     *<a name="line.668"></a>
+<span class="sourceLineNo">669</span>     * Example-2<a name="line.669"></a>
+<span class="sourceLineNo">670</span>     *    wal-2 | A |              A stackIds = [0, 2]<a name="line.670"></a>
+<span class="sourceLineNo">671</span>     *    wal-1 | A B |            B stackIds = [1]<a name="line.671"></a>
+<span class="sourceLineNo">672</span>     *<a name="line.672"></a>
+<span class="sourceLineNo">673</span>     * There is a gap between A stackIds so something was executed in between.<a name="line.673"></a>
+<span class="sourceLineNo">674</span>     */<a name="line.674"></a>
+<span class="sourceLineNo">675</span>    private boolean checkReadyToRun(Entry rootEntry) {<a name="line.675"></a>
+<span class="sourceLineNo">676</span>      assert !rootEntry.hasParent() : "expected root procedure, got " + rootEntry;<a name="line.676"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span>      if (rootEntry.isFinished()) {<a name="line.678"></a>
+<span class="sourceLineNo">679</span>        // if the root procedure is finished, sub-procedures should be gone<a name="line.679"></a>
+<span class="sourceLineNo">680</span>        if (rootEntry.childHead != null) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span>          LOG.error("unexpected active children for root-procedure: " + rootEntry);<a name="line.681"></a>
+<span class="sourceLineNo">682</span>          for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>            LOG.error("unexpected active children: " + p);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>          }<a name="line.684"></a>
+<span class="sourceLineNo">685</span>        }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span>        assert rootEntry.childHead == null : "unexpected children on root completion. " + rootEntry;<a name="line.687"></a>
+<span class="sourceLineNo">688</span>        rootEntry.ready = true;<a name="line.688"></a>
+<span class="sourceLineNo">689</span>        return true;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>      }<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span>      int stackIdSum = 0;<a name="line.692"></a>
+<span class="sourceLineNo">693</span>      int maxStackId = 0;<a name="line.693"></a>
+<span class="sourceLineNo">694</span>      for (int i = 0; i &lt; rootEntry.proto.getStackIdCount(); ++i) {<a name="line.694"></a>
+<span class="sourceLineNo">695</span>        int stackId = 1 + rootEntry.proto.getStackId(i);<a name="line.695"></a>
+<span class="sourceLineNo">696</span>        maxStackId  = Math.max(maxStackId, stackId);<a name="line.696"></a>
+<span class="sourceLineNo">697</span>        stackIdSum += stackId;<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>      for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.700"></a>
+<span class="sourceLineNo">701</span>        for (int i = 0; i &lt; p.proto.getStackIdCount(); ++i) {<a name="line.701"></a>
+<span class="sourceLineNo">702</span>          int stackId = 1 + p.proto.getStackId(i);<a name="line.702"></a>
+<span class="sourceLineNo">703</span>          maxStackId  = Math.max(maxStackId, stackId);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>          stackIdSum += stackId;<a name="line.704"></a>
+<span class="sourceLineNo">705</span>        }<a name="line.705"></a>
+<span class="sourceLineNo">706</span>      }<a name="line.706"></a>
+<span class="sourceLineNo">707</span>      final int cmpStackIdSum = (maxStackId * (maxStackId + 1) / 2);<a name="line.707"></a>
+<span class="sourceLineNo">708</span>      if (cmpStackIdSum == stackIdSum) {<a name="line.708"></a>
+<span class="sourceLineNo">709</span>        rootEntry.ready = true;<a name="line.709"></a>
+<span class="sourceLineNo">710</span>        for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span>          p.ready = true;<a name="line.711"></a>
+<span class="sourceLineNo">712</span>        }<a name="line.712"></a>
+<span class="sourceLineNo">713</span>        return true;<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      }<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      return false;<a name="line.715"></a>
+<span class="sourceLineNo">716</span>    }<a name="line.716"></a>
+<span class="sourceLineNo">717</span><a name="line.717"></a>
+<span class="sourceLineNo">718</span>    private void unlinkFromReplayList(Entry entry) {<a name="line.718"></a>
+<span class="sourceLineNo">719</span>      if (replayOrderHead == entry) {<a name="line.719"></a>
+<span class="sourceLineNo">720</span>        replayOrderHead = entry.replayNext;<a name="line.720"></a>
+<span class="sourceLineNo">721</span>      }<a name="line.721"></a>
+<span class="sourceLineNo">722</span>      if (replayOrderTail == entry) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>        replayOrderTail = entry.replayPrev;<a name="line.723"></a>
+<span class="sourceLineNo">724</span>      }<a name="line.724"></a>
+<span class="sourceLineNo">725</span>      if (entry.replayPrev != null) {<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        entry.replayPrev.replayNext = entry.replayNext;<a name="line.726"></a>
+<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
+<span class="sourceLineNo">728</span>      if (entry.replayNext != null) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span>        entry.replayNext.replayPrev = entry.replayPrev;<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
+<span class="sourceLineNo">731</span>    }<a name="line.731"></a>
+<span class="sourceLineNo">732</span><a name="line.732"></a>
+<span class="sourceLineNo">733</span>    private void addToReplayList(final Entry entry) {<a name="line.733"></a>
+<span class="sourceLineNo">734</span>      unlinkFromReplayList(entry);<a name="line.734"></a>
+<span class="sourceLineNo">735</span>      entry.replayNext = replayOrderHead;<a name="line.735"></a>
+<span class="sourceLineNo">736</span>      entry.replayPrev = null;<a name="line.736"></a>
+<span class="sourceLineNo">737</span>      if (replayOrderHead != null) {<a name="line.737"></a>
+<span class="sourceLineNo">738</span>        replayOrderHead.replayPrev = entry;<a name="line.738"></a>
+<span class="sourceLineNo">739</span>      } else {<a name="line.739"></a>
+<span class="sourceLineNo">740</span>        replayOrderTail = entry;<a name="line.740"></a>
+<span class="sourceLineNo">741</span>      }<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      replayOrderHead = entry;<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    }<a name="line.743"></a>
+<span class="sourceLineNo">744</span><a name="line.744"></a>
+<span class="sourceLineNo">745</span>    private void unlinkFromLinkList(Entry entry) {<a name="line.745"></a>
+<span class="sourceLineNo">746</span>      if (entry == rootHead) {<a name="line.746"></a>
+<span class="sourceLineNo">747</span>        rootHead = entry.linkNext;<a name="line.747"></a>
+<span class="sourceLineNo">748</span>      } else if (entry == childUnlinkedHead) {<a name="line.748"></a>
+<span class="sourceLineNo">749</span>        childUnlinkedHead = entry.linkNext;<a name="line.749"></a>
+<span class="sourceLineNo">750</span>      }<a name="line.750"></a>
+<span class="sourceLineNo">751</span>      if (entry.linkPrev != null) {<a name="line.751"></a>
+<span class="sourceLineNo">752</span>        entry.linkPrev.linkNext = entry.linkNext;<a name="line.752"></a>
+<span class="sourceLineNo">753</span>      }<a name="line.753"></a>
+<span class="sourceLineNo">754</span>      if (entry.linkNext != null) {<a name="line.754"></a>
+<span class="sourceLineNo">755</span>        entry.linkNext.linkPrev = entry.linkPrev;<a name="line.755"></a>
+<span class="sourceLineNo">756</span>      }<a name="line.756"></a>
+<span class="sourceLineNo">757</span>    }<a name="line.757"></a>
+<span class="sourceLineNo">758</span><a name="line.758"></a>
+<span class="sourceLineNo">759</span>    private Entry addToLinkList(Entry entry, Entry linkHead) {<a name="line.759"></a>
+<span class="sourceLineNo">760</span>      unlinkFromLinkList(entry);<a name="line.760"></a>
+<span class="sourceLineNo">761</span>      entry.linkNext = linkHead;<a name="line.761"></a>
+<span class="sourceLineNo">762</span>      entry.linkPrev = null;<a name="line.762"></a>
+<span class="sourceLineNo">763</span>      if (linkHead != null) {<a name="line.763"></a>
+<span class="sourceLineNo">764</span>        linkHead.linkPrev = entry;<a name="line.764"></a>
+<span class="sourceLineNo">765</span>      }<a name="line.765"></a>
+<span class="sourceLineNo">766</span>      return entry;<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    }<a name="line.767"></a>
+<span class="sourceLineNo">768</span><a name="line.768"></a>
+<span class="sourceLineNo">769</span>    private Entry findLinkListTail(Entry linkHead) {<a name="line.769"></a>
+<span class="sourceLineNo">770</span>      Entry tail = linkHead;<a name="line.770"></a>
+<span class="sourceLineNo">771</span>      while (tail.linkNext != null) {<a name="line.771"></a>
+<span class="sourceLineNo">772</span>        tail = tail.linkNext;<a name="line.772"></a>
+<span class="sourceLineNo">773</span>      }<a name="line.773"></a>
+<span class="sourceLineNo">774</span>      return tail;<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    }<a name="line.775"></a>
+<span class="sourceLineNo">776</span><a name="line.776"></a>
+<span class="sourceLineNo">777</span>    private Entry addToMap(final long procId, final boolean hasParent) {<a name="line.777"></a>
+<span class="sourceLineNo">778</span>      int slotIndex = getMapSlot(procId);<a name="line.778"></a>
+<span class="sourceLineNo">779</span>      Entry entry = getProcedure(slotIndex, procId);<a name="line.779"></a>
+<span class="sourceLineNo">780</span>      if (entry != null) return entry;<a name="line.780"></a>
+<span class="sourceLineNo">781</span><a name="line.781"></a>
+<span class="sourceLineNo">782</span>      entry = new Entry(procedureMap[slotIndex]);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>      procedureMap[slotIndex] = entry;<a name="line.783"></a>
+<span class="sourceLineNo">784</span>      return entry;<a name="line.784"></a>
+<span class="sourceLineNo">785</span>    }<a name="line.785"></a>
+<span class="sourceLineNo">786</span><a name="line.786"></a>
+<span class="sourceLineNo">787</span>    private Entry removeFromMap(final long procId) {<a name="line.787">

<TRUNCATED>

[03/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
index 86a3c71..4188261 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
@@ -69,15 +69,15 @@
 <span class="sourceLineNo">061</span>  requiredArguments = {<a name="line.61"></a>
 <span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "master", type = "HMaster")},<a name="line.62"></a>
 <span class="sourceLineNo">063</span>  optionalArguments = {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.67"></a>
+<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.67"></a>
 <span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    @org.jamon.annotations.Argument(name = "filter", type = "String")})<a name="line.72"></a>
+<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager")})<a name="line.72"></a>
 <span class="sourceLineNo">073</span>public class MasterStatusTmpl<a name="line.73"></a>
 <span class="sourceLineNo">074</span>  extends org.jamon.AbstractTemplateProxy<a name="line.74"></a>
 <span class="sourceLineNo">075</span>{<a name="line.75"></a>
@@ -118,74 +118,74 @@
 <span class="sourceLineNo">110</span>      return m_master;<a name="line.110"></a>
 <span class="sourceLineNo">111</span>    }<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    private HMaster m_master;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    // 29, 1<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.114"></a>
+<span class="sourceLineNo">113</span>    // 23, 1<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.114"></a>
 <span class="sourceLineNo">115</span>    {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      // 29, 1<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      m_assignmentManager = assignmentManager;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      m_assignmentManager__IsNotDefault = true;<a name="line.118"></a>
+<span class="sourceLineNo">116</span>      // 23, 1<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      m_servers = servers;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      m_servers__IsNotDefault = true;<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    }<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    public AssignmentManager getAssignmentManager()<a name="line.120"></a>
+<span class="sourceLineNo">120</span>    public List&lt;ServerName&gt; getServers()<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      return m_assignmentManager;<a name="line.122"></a>
+<span class="sourceLineNo">122</span>      return m_servers;<a name="line.122"></a>
 <span class="sourceLineNo">123</span>    }<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    private AssignmentManager m_assignmentManager;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.125"></a>
+<span class="sourceLineNo">124</span>    private List&lt;ServerName&gt; m_servers;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    public boolean getServers__IsNotDefault()<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      return m_assignmentManager__IsNotDefault;<a name="line.127"></a>
+<span class="sourceLineNo">127</span>      return m_servers__IsNotDefault;<a name="line.127"></a>
 <span class="sourceLineNo">128</span>    }<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    // 22, 1<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.131"></a>
+<span class="sourceLineNo">129</span>    private boolean m_servers__IsNotDefault;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    // 27, 1<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    public void setFormat(String format)<a name="line.131"></a>
 <span class="sourceLineNo">132</span>    {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      // 22, 1<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      m_metaLocation = metaLocation;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      m_metaLocation__IsNotDefault = true;<a name="line.135"></a>
+<span class="sourceLineNo">133</span>      // 27, 1<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      m_format = format;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      m_format__IsNotDefault = true;<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    }<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    public ServerName getMetaLocation()<a name="line.137"></a>
+<span class="sourceLineNo">137</span>    public String getFormat()<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      return m_metaLocation;<a name="line.139"></a>
+<span class="sourceLineNo">139</span>      return m_format;<a name="line.139"></a>
 <span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    private ServerName m_metaLocation;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.142"></a>
+<span class="sourceLineNo">141</span>    private String m_format;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    public boolean getFormat__IsNotDefault()<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      return m_metaLocation__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">144</span>      return m_format__IsNotDefault;<a name="line.144"></a>
 <span class="sourceLineNo">145</span>    }<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    // 28, 1<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    public void setServerManager(ServerManager serverManager)<a name="line.148"></a>
+<span class="sourceLineNo">146</span>    private boolean m_format__IsNotDefault;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    // 25, 1<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.148"></a>
 <span class="sourceLineNo">149</span>    {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      // 28, 1<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      m_serverManager = serverManager;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      m_serverManager__IsNotDefault = true;<a name="line.152"></a>
+<span class="sourceLineNo">150</span>      // 25, 1<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.152"></a>
 <span class="sourceLineNo">153</span>    }<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    public ServerManager getServerManager()<a name="line.154"></a>
+<span class="sourceLineNo">154</span>    public boolean getCatalogJanitorEnabled()<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      return m_serverManager;<a name="line.156"></a>
+<span class="sourceLineNo">156</span>      return m_catalogJanitorEnabled;<a name="line.156"></a>
 <span class="sourceLineNo">157</span>    }<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    private ServerManager m_serverManager;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    public boolean getServerManager__IsNotDefault()<a name="line.159"></a>
+<span class="sourceLineNo">158</span>    private boolean m_catalogJanitorEnabled;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.159"></a>
 <span class="sourceLineNo">160</span>    {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      return m_serverManager__IsNotDefault;<a name="line.161"></a>
+<span class="sourceLineNo">161</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    private boolean m_serverManager__IsNotDefault;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    // 27, 1<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    public void setFormat(String format)<a name="line.165"></a>
+<span class="sourceLineNo">163</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    // 21, 1<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.165"></a>
 <span class="sourceLineNo">166</span>    {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      // 27, 1<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      m_format = format;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      m_format__IsNotDefault = true;<a name="line.169"></a>
+<span class="sourceLineNo">167</span>      // 21, 1<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      m_frags = frags;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      m_frags__IsNotDefault = true;<a name="line.169"></a>
 <span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    public String getFormat()<a name="line.171"></a>
+<span class="sourceLineNo">171</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.171"></a>
 <span class="sourceLineNo">172</span>    {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      return m_format;<a name="line.173"></a>
+<span class="sourceLineNo">173</span>      return m_frags;<a name="line.173"></a>
 <span class="sourceLineNo">174</span>    }<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    private String m_format;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    public boolean getFormat__IsNotDefault()<a name="line.176"></a>
+<span class="sourceLineNo">175</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    public boolean getFrags__IsNotDefault()<a name="line.176"></a>
 <span class="sourceLineNo">177</span>    {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      return m_format__IsNotDefault;<a name="line.178"></a>
+<span class="sourceLineNo">178</span>      return m_frags__IsNotDefault;<a name="line.178"></a>
 <span class="sourceLineNo">179</span>    }<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    private boolean m_format__IsNotDefault;<a name="line.180"></a>
+<span class="sourceLineNo">180</span>    private boolean m_frags__IsNotDefault;<a name="line.180"></a>
 <span class="sourceLineNo">181</span>    // 24, 1<a name="line.181"></a>
 <span class="sourceLineNo">182</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.182"></a>
 <span class="sourceLineNo">183</span>    {<a name="line.183"></a>
@@ -203,74 +203,74 @@
 <span class="sourceLineNo">195</span>      return m_deadServers__IsNotDefault;<a name="line.195"></a>
 <span class="sourceLineNo">196</span>    }<a name="line.196"></a>
 <span class="sourceLineNo">197</span>    private boolean m_deadServers__IsNotDefault;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // 21, 1<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.199"></a>
+<span class="sourceLineNo">198</span>    // 29, 1<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.199"></a>
 <span class="sourceLineNo">200</span>    {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      // 21, 1<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      m_frags = frags;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      m_frags__IsNotDefault = true;<a name="line.203"></a>
+<span class="sourceLineNo">201</span>      // 29, 1<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      m_assignmentManager = assignmentManager;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      m_assignmentManager__IsNotDefault = true;<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.205"></a>
+<span class="sourceLineNo">205</span>    public AssignmentManager getAssignmentManager()<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      return m_frags;<a name="line.207"></a>
+<span class="sourceLineNo">207</span>      return m_assignmentManager;<a name="line.207"></a>
 <span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    public boolean getFrags__IsNotDefault()<a name="line.210"></a>
+<span class="sourceLineNo">209</span>    private AssignmentManager m_assignmentManager;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      return m_frags__IsNotDefault;<a name="line.212"></a>
+<span class="sourceLineNo">212</span>      return m_assignmentManager__IsNotDefault;<a name="line.212"></a>
 <span class="sourceLineNo">213</span>    }<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    private boolean m_frags__IsNotDefault;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    // 23, 1<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.216"></a>
+<span class="sourceLineNo">214</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    // 22, 1<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.216"></a>
 <span class="sourceLineNo">217</span>    {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      // 23, 1<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      m_servers = servers;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      m_servers__IsNotDefault = true;<a name="line.220"></a>
+<span class="sourceLineNo">218</span>      // 22, 1<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      m_metaLocation = metaLocation;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      m_metaLocation__IsNotDefault = true;<a name="line.220"></a>
 <span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    public List&lt;ServerName&gt; getServers()<a name="line.222"></a>
+<span class="sourceLineNo">222</span>    public ServerName getMetaLocation()<a name="line.222"></a>
 <span class="sourceLineNo">223</span>    {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      return m_servers;<a name="line.224"></a>
+<span class="sourceLineNo">224</span>      return m_metaLocation;<a name="line.224"></a>
 <span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    private List&lt;ServerName&gt; m_servers;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    public boolean getServers__IsNotDefault()<a name="line.227"></a>
+<span class="sourceLineNo">226</span>    private ServerName m_metaLocation;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      return m_servers__IsNotDefault;<a name="line.229"></a>
+<span class="sourceLineNo">229</span>      return m_metaLocation__IsNotDefault;<a name="line.229"></a>
 <span class="sourceLineNo">230</span>    }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    private boolean m_servers__IsNotDefault;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    // 25, 1<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.233"></a>
+<span class="sourceLineNo">231</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    // 26, 1<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    public void setFilter(String filter)<a name="line.233"></a>
 <span class="sourceLineNo">234</span>    {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      // 25, 1<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.237"></a>
+<span class="sourceLineNo">235</span>      // 26, 1<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      m_filter = filter;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      m_filter__IsNotDefault = true;<a name="line.237"></a>
 <span class="sourceLineNo">238</span>    }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    public boolean getCatalogJanitorEnabled()<a name="line.239"></a>
+<span class="sourceLineNo">239</span>    public String getFilter()<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      return m_catalogJanitorEnabled;<a name="line.241"></a>
+<span class="sourceLineNo">241</span>      return m_filter;<a name="line.241"></a>
 <span class="sourceLineNo">242</span>    }<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    private boolean m_catalogJanitorEnabled;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.244"></a>
+<span class="sourceLineNo">243</span>    private String m_filter;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    public boolean getFilter__IsNotDefault()<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.246"></a>
+<span class="sourceLineNo">246</span>      return m_filter__IsNotDefault;<a name="line.246"></a>
 <span class="sourceLineNo">247</span>    }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    // 26, 1<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    public void setFilter(String filter)<a name="line.250"></a>
+<span class="sourceLineNo">248</span>    private boolean m_filter__IsNotDefault;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    // 28, 1<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    public void setServerManager(ServerManager serverManager)<a name="line.250"></a>
 <span class="sourceLineNo">251</span>    {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      // 26, 1<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      m_filter = filter;<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      m_filter__IsNotDefault = true;<a name="line.254"></a>
+<span class="sourceLineNo">252</span>      // 28, 1<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      m_serverManager = serverManager;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      m_serverManager__IsNotDefault = true;<a name="line.254"></a>
 <span class="sourceLineNo">255</span>    }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    public String getFilter()<a name="line.256"></a>
+<span class="sourceLineNo">256</span>    public ServerManager getServerManager()<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      return m_filter;<a name="line.258"></a>
+<span class="sourceLineNo">258</span>      return m_serverManager;<a name="line.258"></a>
 <span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    private String m_filter;<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    public boolean getFilter__IsNotDefault()<a name="line.261"></a>
+<span class="sourceLineNo">260</span>    private ServerManager m_serverManager;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    public boolean getServerManager__IsNotDefault()<a name="line.261"></a>
 <span class="sourceLineNo">262</span>    {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      return m_filter__IsNotDefault;<a name="line.263"></a>
+<span class="sourceLineNo">263</span>      return m_serverManager__IsNotDefault;<a name="line.263"></a>
 <span class="sourceLineNo">264</span>    }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    private boolean m_filter__IsNotDefault;<a name="line.265"></a>
+<span class="sourceLineNo">265</span>    private boolean m_serverManager__IsNotDefault;<a name="line.265"></a>
 <span class="sourceLineNo">266</span>  }<a name="line.266"></a>
 <span class="sourceLineNo">267</span>  @Override<a name="line.267"></a>
 <span class="sourceLineNo">268</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.268"></a>
@@ -282,31 +282,31 @@
 <span class="sourceLineNo">274</span>    return (ImplData) super.getImplData();<a name="line.274"></a>
 <span class="sourceLineNo">275</span>  }<a name="line.275"></a>
 <span class="sourceLineNo">276</span>  <a name="line.276"></a>
-<span class="sourceLineNo">277</span>  protected AssignmentManager assignmentManager;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.278"></a>
+<span class="sourceLineNo">277</span>  protected List&lt;ServerName&gt; servers;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.278"></a>
 <span class="sourceLineNo">279</span>  {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.280"></a>
+<span class="sourceLineNo">280</span>    (getImplData()).setServers(p_servers);<a name="line.280"></a>
 <span class="sourceLineNo">281</span>    return this;<a name="line.281"></a>
 <span class="sourceLineNo">282</span>  }<a name="line.282"></a>
 <span class="sourceLineNo">283</span>  <a name="line.283"></a>
-<span class="sourceLineNo">284</span>  protected ServerName metaLocation;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.285"></a>
+<span class="sourceLineNo">284</span>  protected String format;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.285"></a>
 <span class="sourceLineNo">286</span>  {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.287"></a>
+<span class="sourceLineNo">287</span>    (getImplData()).setFormat(p_format);<a name="line.287"></a>
 <span class="sourceLineNo">288</span>    return this;<a name="line.288"></a>
 <span class="sourceLineNo">289</span>  }<a name="line.289"></a>
 <span class="sourceLineNo">290</span>  <a name="line.290"></a>
-<span class="sourceLineNo">291</span>  protected ServerManager serverManager;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.292"></a>
+<span class="sourceLineNo">291</span>  protected boolean catalogJanitorEnabled;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.292"></a>
 <span class="sourceLineNo">293</span>  {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.294"></a>
+<span class="sourceLineNo">294</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.294"></a>
 <span class="sourceLineNo">295</span>    return this;<a name="line.295"></a>
 <span class="sourceLineNo">296</span>  }<a name="line.296"></a>
 <span class="sourceLineNo">297</span>  <a name="line.297"></a>
-<span class="sourceLineNo">298</span>  protected String format;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.299"></a>
+<span class="sourceLineNo">298</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.298"></a>
+<span class="sourceLineNo">299</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.299"></a>
 <span class="sourceLineNo">300</span>  {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    (getImplData()).setFormat(p_format);<a name="line.301"></a>
+<span class="sourceLineNo">301</span>    (getImplData()).setFrags(p_frags);<a name="line.301"></a>
 <span class="sourceLineNo">302</span>    return this;<a name="line.302"></a>
 <span class="sourceLineNo">303</span>  }<a name="line.303"></a>
 <span class="sourceLineNo">304</span>  <a name="line.304"></a>
@@ -317,31 +317,31 @@
 <span class="sourceLineNo">309</span>    return this;<a name="line.309"></a>
 <span class="sourceLineNo">310</span>  }<a name="line.310"></a>
 <span class="sourceLineNo">311</span>  <a name="line.311"></a>
-<span class="sourceLineNo">312</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.313"></a>
+<span class="sourceLineNo">312</span>  protected AssignmentManager assignmentManager;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.313"></a>
 <span class="sourceLineNo">314</span>  {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    (getImplData()).setFrags(p_frags);<a name="line.315"></a>
+<span class="sourceLineNo">315</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.315"></a>
 <span class="sourceLineNo">316</span>    return this;<a name="line.316"></a>
 <span class="sourceLineNo">317</span>  }<a name="line.317"></a>
 <span class="sourceLineNo">318</span>  <a name="line.318"></a>
-<span class="sourceLineNo">319</span>  protected List&lt;ServerName&gt; servers;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.320"></a>
+<span class="sourceLineNo">319</span>  protected ServerName metaLocation;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.320"></a>
 <span class="sourceLineNo">321</span>  {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    (getImplData()).setServers(p_servers);<a name="line.322"></a>
+<span class="sourceLineNo">322</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.322"></a>
 <span class="sourceLineNo">323</span>    return this;<a name="line.323"></a>
 <span class="sourceLineNo">324</span>  }<a name="line.324"></a>
 <span class="sourceLineNo">325</span>  <a name="line.325"></a>
-<span class="sourceLineNo">326</span>  protected boolean catalogJanitorEnabled;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.327"></a>
+<span class="sourceLineNo">326</span>  protected String filter;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.327"></a>
 <span class="sourceLineNo">328</span>  {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.329"></a>
+<span class="sourceLineNo">329</span>    (getImplData()).setFilter(p_filter);<a name="line.329"></a>
 <span class="sourceLineNo">330</span>    return this;<a name="line.330"></a>
 <span class="sourceLineNo">331</span>  }<a name="line.331"></a>
 <span class="sourceLineNo">332</span>  <a name="line.332"></a>
-<span class="sourceLineNo">333</span>  protected String filter;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.334"></a>
+<span class="sourceLineNo">333</span>  protected ServerManager serverManager;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.334"></a>
 <span class="sourceLineNo">335</span>  {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    (getImplData()).setFilter(p_filter);<a name="line.336"></a>
+<span class="sourceLineNo">336</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.336"></a>
 <span class="sourceLineNo">337</span>    return this;<a name="line.337"></a>
 <span class="sourceLineNo">338</span>  }<a name="line.338"></a>
 <span class="sourceLineNo">339</span>  <a name="line.339"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html
index 86a3c71..4188261 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html
@@ -69,15 +69,15 @@
 <span class="sourceLineNo">061</span>  requiredArguments = {<a name="line.61"></a>
 <span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "master", type = "HMaster")},<a name="line.62"></a>
 <span class="sourceLineNo">063</span>  optionalArguments = {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.67"></a>
+<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.67"></a>
 <span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    @org.jamon.annotations.Argument(name = "filter", type = "String")})<a name="line.72"></a>
+<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager")})<a name="line.72"></a>
 <span class="sourceLineNo">073</span>public class MasterStatusTmpl<a name="line.73"></a>
 <span class="sourceLineNo">074</span>  extends org.jamon.AbstractTemplateProxy<a name="line.74"></a>
 <span class="sourceLineNo">075</span>{<a name="line.75"></a>
@@ -118,74 +118,74 @@
 <span class="sourceLineNo">110</span>      return m_master;<a name="line.110"></a>
 <span class="sourceLineNo">111</span>    }<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    private HMaster m_master;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    // 29, 1<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.114"></a>
+<span class="sourceLineNo">113</span>    // 23, 1<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.114"></a>
 <span class="sourceLineNo">115</span>    {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      // 29, 1<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      m_assignmentManager = assignmentManager;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      m_assignmentManager__IsNotDefault = true;<a name="line.118"></a>
+<span class="sourceLineNo">116</span>      // 23, 1<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      m_servers = servers;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      m_servers__IsNotDefault = true;<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    }<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    public AssignmentManager getAssignmentManager()<a name="line.120"></a>
+<span class="sourceLineNo">120</span>    public List&lt;ServerName&gt; getServers()<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      return m_assignmentManager;<a name="line.122"></a>
+<span class="sourceLineNo">122</span>      return m_servers;<a name="line.122"></a>
 <span class="sourceLineNo">123</span>    }<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    private AssignmentManager m_assignmentManager;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.125"></a>
+<span class="sourceLineNo">124</span>    private List&lt;ServerName&gt; m_servers;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    public boolean getServers__IsNotDefault()<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      return m_assignmentManager__IsNotDefault;<a name="line.127"></a>
+<span class="sourceLineNo">127</span>      return m_servers__IsNotDefault;<a name="line.127"></a>
 <span class="sourceLineNo">128</span>    }<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    // 22, 1<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.131"></a>
+<span class="sourceLineNo">129</span>    private boolean m_servers__IsNotDefault;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    // 27, 1<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    public void setFormat(String format)<a name="line.131"></a>
 <span class="sourceLineNo">132</span>    {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      // 22, 1<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      m_metaLocation = metaLocation;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      m_metaLocation__IsNotDefault = true;<a name="line.135"></a>
+<span class="sourceLineNo">133</span>      // 27, 1<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      m_format = format;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      m_format__IsNotDefault = true;<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    }<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    public ServerName getMetaLocation()<a name="line.137"></a>
+<span class="sourceLineNo">137</span>    public String getFormat()<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      return m_metaLocation;<a name="line.139"></a>
+<span class="sourceLineNo">139</span>      return m_format;<a name="line.139"></a>
 <span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    private ServerName m_metaLocation;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.142"></a>
+<span class="sourceLineNo">141</span>    private String m_format;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    public boolean getFormat__IsNotDefault()<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      return m_metaLocation__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">144</span>      return m_format__IsNotDefault;<a name="line.144"></a>
 <span class="sourceLineNo">145</span>    }<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    // 28, 1<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    public void setServerManager(ServerManager serverManager)<a name="line.148"></a>
+<span class="sourceLineNo">146</span>    private boolean m_format__IsNotDefault;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    // 25, 1<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.148"></a>
 <span class="sourceLineNo">149</span>    {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      // 28, 1<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      m_serverManager = serverManager;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      m_serverManager__IsNotDefault = true;<a name="line.152"></a>
+<span class="sourceLineNo">150</span>      // 25, 1<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.152"></a>
 <span class="sourceLineNo">153</span>    }<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    public ServerManager getServerManager()<a name="line.154"></a>
+<span class="sourceLineNo">154</span>    public boolean getCatalogJanitorEnabled()<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      return m_serverManager;<a name="line.156"></a>
+<span class="sourceLineNo">156</span>      return m_catalogJanitorEnabled;<a name="line.156"></a>
 <span class="sourceLineNo">157</span>    }<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    private ServerManager m_serverManager;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    public boolean getServerManager__IsNotDefault()<a name="line.159"></a>
+<span class="sourceLineNo">158</span>    private boolean m_catalogJanitorEnabled;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.159"></a>
 <span class="sourceLineNo">160</span>    {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      return m_serverManager__IsNotDefault;<a name="line.161"></a>
+<span class="sourceLineNo">161</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    private boolean m_serverManager__IsNotDefault;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    // 27, 1<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    public void setFormat(String format)<a name="line.165"></a>
+<span class="sourceLineNo">163</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    // 21, 1<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.165"></a>
 <span class="sourceLineNo">166</span>    {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      // 27, 1<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      m_format = format;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      m_format__IsNotDefault = true;<a name="line.169"></a>
+<span class="sourceLineNo">167</span>      // 21, 1<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      m_frags = frags;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      m_frags__IsNotDefault = true;<a name="line.169"></a>
 <span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    public String getFormat()<a name="line.171"></a>
+<span class="sourceLineNo">171</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.171"></a>
 <span class="sourceLineNo">172</span>    {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      return m_format;<a name="line.173"></a>
+<span class="sourceLineNo">173</span>      return m_frags;<a name="line.173"></a>
 <span class="sourceLineNo">174</span>    }<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    private String m_format;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    public boolean getFormat__IsNotDefault()<a name="line.176"></a>
+<span class="sourceLineNo">175</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    public boolean getFrags__IsNotDefault()<a name="line.176"></a>
 <span class="sourceLineNo">177</span>    {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      return m_format__IsNotDefault;<a name="line.178"></a>
+<span class="sourceLineNo">178</span>      return m_frags__IsNotDefault;<a name="line.178"></a>
 <span class="sourceLineNo">179</span>    }<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    private boolean m_format__IsNotDefault;<a name="line.180"></a>
+<span class="sourceLineNo">180</span>    private boolean m_frags__IsNotDefault;<a name="line.180"></a>
 <span class="sourceLineNo">181</span>    // 24, 1<a name="line.181"></a>
 <span class="sourceLineNo">182</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.182"></a>
 <span class="sourceLineNo">183</span>    {<a name="line.183"></a>
@@ -203,74 +203,74 @@
 <span class="sourceLineNo">195</span>      return m_deadServers__IsNotDefault;<a name="line.195"></a>
 <span class="sourceLineNo">196</span>    }<a name="line.196"></a>
 <span class="sourceLineNo">197</span>    private boolean m_deadServers__IsNotDefault;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // 21, 1<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.199"></a>
+<span class="sourceLineNo">198</span>    // 29, 1<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.199"></a>
 <span class="sourceLineNo">200</span>    {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      // 21, 1<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      m_frags = frags;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      m_frags__IsNotDefault = true;<a name="line.203"></a>
+<span class="sourceLineNo">201</span>      // 29, 1<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      m_assignmentManager = assignmentManager;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      m_assignmentManager__IsNotDefault = true;<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.205"></a>
+<span class="sourceLineNo">205</span>    public AssignmentManager getAssignmentManager()<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      return m_frags;<a name="line.207"></a>
+<span class="sourceLineNo">207</span>      return m_assignmentManager;<a name="line.207"></a>
 <span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    public boolean getFrags__IsNotDefault()<a name="line.210"></a>
+<span class="sourceLineNo">209</span>    private AssignmentManager m_assignmentManager;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      return m_frags__IsNotDefault;<a name="line.212"></a>
+<span class="sourceLineNo">212</span>      return m_assignmentManager__IsNotDefault;<a name="line.212"></a>
 <span class="sourceLineNo">213</span>    }<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    private boolean m_frags__IsNotDefault;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    // 23, 1<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.216"></a>
+<span class="sourceLineNo">214</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    // 22, 1<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.216"></a>
 <span class="sourceLineNo">217</span>    {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      // 23, 1<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      m_servers = servers;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      m_servers__IsNotDefault = true;<a name="line.220"></a>
+<span class="sourceLineNo">218</span>      // 22, 1<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      m_metaLocation = metaLocation;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      m_metaLocation__IsNotDefault = true;<a name="line.220"></a>
 <span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    public List&lt;ServerName&gt; getServers()<a name="line.222"></a>
+<span class="sourceLineNo">222</span>    public ServerName getMetaLocation()<a name="line.222"></a>
 <span class="sourceLineNo">223</span>    {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      return m_servers;<a name="line.224"></a>
+<span class="sourceLineNo">224</span>      return m_metaLocation;<a name="line.224"></a>
 <span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    private List&lt;ServerName&gt; m_servers;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    public boolean getServers__IsNotDefault()<a name="line.227"></a>
+<span class="sourceLineNo">226</span>    private ServerName m_metaLocation;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      return m_servers__IsNotDefault;<a name="line.229"></a>
+<span class="sourceLineNo">229</span>      return m_metaLocation__IsNotDefault;<a name="line.229"></a>
 <span class="sourceLineNo">230</span>    }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    private boolean m_servers__IsNotDefault;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    // 25, 1<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.233"></a>
+<span class="sourceLineNo">231</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    // 26, 1<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    public void setFilter(String filter)<a name="line.233"></a>
 <span class="sourceLineNo">234</span>    {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      // 25, 1<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.237"></a>
+<span class="sourceLineNo">235</span>      // 26, 1<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      m_filter = filter;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      m_filter__IsNotDefault = true;<a name="line.237"></a>
 <span class="sourceLineNo">238</span>    }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    public boolean getCatalogJanitorEnabled()<a name="line.239"></a>
+<span class="sourceLineNo">239</span>    public String getFilter()<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      return m_catalogJanitorEnabled;<a name="line.241"></a>
+<span class="sourceLineNo">241</span>      return m_filter;<a name="line.241"></a>
 <span class="sourceLineNo">242</span>    }<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    private boolean m_catalogJanitorEnabled;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.244"></a>
+<span class="sourceLineNo">243</span>    private String m_filter;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    public boolean getFilter__IsNotDefault()<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.246"></a>
+<span class="sourceLineNo">246</span>      return m_filter__IsNotDefault;<a name="line.246"></a>
 <span class="sourceLineNo">247</span>    }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    // 26, 1<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    public void setFilter(String filter)<a name="line.250"></a>
+<span class="sourceLineNo">248</span>    private boolean m_filter__IsNotDefault;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    // 28, 1<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    public void setServerManager(ServerManager serverManager)<a name="line.250"></a>
 <span class="sourceLineNo">251</span>    {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      // 26, 1<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      m_filter = filter;<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      m_filter__IsNotDefault = true;<a name="line.254"></a>
+<span class="sourceLineNo">252</span>      // 28, 1<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      m_serverManager = serverManager;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      m_serverManager__IsNotDefault = true;<a name="line.254"></a>
 <span class="sourceLineNo">255</span>    }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    public String getFilter()<a name="line.256"></a>
+<span class="sourceLineNo">256</span>    public ServerManager getServerManager()<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      return m_filter;<a name="line.258"></a>
+<span class="sourceLineNo">258</span>      return m_serverManager;<a name="line.258"></a>
 <span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    private String m_filter;<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    public boolean getFilter__IsNotDefault()<a name="line.261"></a>
+<span class="sourceLineNo">260</span>    private ServerManager m_serverManager;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    public boolean getServerManager__IsNotDefault()<a name="line.261"></a>
 <span class="sourceLineNo">262</span>    {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      return m_filter__IsNotDefault;<a name="line.263"></a>
+<span class="sourceLineNo">263</span>      return m_serverManager__IsNotDefault;<a name="line.263"></a>
 <span class="sourceLineNo">264</span>    }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    private boolean m_filter__IsNotDefault;<a name="line.265"></a>
+<span class="sourceLineNo">265</span>    private boolean m_serverManager__IsNotDefault;<a name="line.265"></a>
 <span class="sourceLineNo">266</span>  }<a name="line.266"></a>
 <span class="sourceLineNo">267</span>  @Override<a name="line.267"></a>
 <span class="sourceLineNo">268</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.268"></a>
@@ -282,31 +282,31 @@
 <span class="sourceLineNo">274</span>    return (ImplData) super.getImplData();<a name="line.274"></a>
 <span class="sourceLineNo">275</span>  }<a name="line.275"></a>
 <span class="sourceLineNo">276</span>  <a name="line.276"></a>
-<span class="sourceLineNo">277</span>  protected AssignmentManager assignmentManager;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.278"></a>
+<span class="sourceLineNo">277</span>  protected List&lt;ServerName&gt; servers;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.278"></a>
 <span class="sourceLineNo">279</span>  {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.280"></a>
+<span class="sourceLineNo">280</span>    (getImplData()).setServers(p_servers);<a name="line.280"></a>
 <span class="sourceLineNo">281</span>    return this;<a name="line.281"></a>
 <span class="sourceLineNo">282</span>  }<a name="line.282"></a>
 <span class="sourceLineNo">283</span>  <a name="line.283"></a>
-<span class="sourceLineNo">284</span>  protected ServerName metaLocation;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.285"></a>
+<span class="sourceLineNo">284</span>  protected String format;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.285"></a>
 <span class="sourceLineNo">286</span>  {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.287"></a>
+<span class="sourceLineNo">287</span>    (getImplData()).setFormat(p_format);<a name="line.287"></a>
 <span class="sourceLineNo">288</span>    return this;<a name="line.288"></a>
 <span class="sourceLineNo">289</span>  }<a name="line.289"></a>
 <span class="sourceLineNo">290</span>  <a name="line.290"></a>
-<span class="sourceLineNo">291</span>  protected ServerManager serverManager;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.292"></a>
+<span class="sourceLineNo">291</span>  protected boolean catalogJanitorEnabled;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.292"></a>
 <span class="sourceLineNo">293</span>  {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.294"></a>
+<span class="sourceLineNo">294</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.294"></a>
 <span class="sourceLineNo">295</span>    return this;<a name="line.295"></a>
 <span class="sourceLineNo">296</span>  }<a name="line.296"></a>
 <span class="sourceLineNo">297</span>  <a name="line.297"></a>
-<span class="sourceLineNo">298</span>  protected String format;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.299"></a>
+<span class="sourceLineNo">298</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.298"></a>
+<span class="sourceLineNo">299</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.299"></a>
 <span class="sourceLineNo">300</span>  {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    (getImplData()).setFormat(p_format);<a name="line.301"></a>
+<span class="sourceLineNo">301</span>    (getImplData()).setFrags(p_frags);<a name="line.301"></a>
 <span class="sourceLineNo">302</span>    return this;<a name="line.302"></a>
 <span class="sourceLineNo">303</span>  }<a name="line.303"></a>
 <span class="sourceLineNo">304</span>  <a name="line.304"></a>
@@ -317,31 +317,31 @@
 <span class="sourceLineNo">309</span>    return this;<a name="line.309"></a>
 <span class="sourceLineNo">310</span>  }<a name="line.310"></a>
 <span class="sourceLineNo">311</span>  <a name="line.311"></a>
-<span class="sourceLineNo">312</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.313"></a>
+<span class="sourceLineNo">312</span>  protected AssignmentManager assignmentManager;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.313"></a>
 <span class="sourceLineNo">314</span>  {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    (getImplData()).setFrags(p_frags);<a name="line.315"></a>
+<span class="sourceLineNo">315</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.315"></a>
 <span class="sourceLineNo">316</span>    return this;<a name="line.316"></a>
 <span class="sourceLineNo">317</span>  }<a name="line.317"></a>
 <span class="sourceLineNo">318</span>  <a name="line.318"></a>
-<span class="sourceLineNo">319</span>  protected List&lt;ServerName&gt; servers;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.320"></a>
+<span class="sourceLineNo">319</span>  protected ServerName metaLocation;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.320"></a>
 <span class="sourceLineNo">321</span>  {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    (getImplData()).setServers(p_servers);<a name="line.322"></a>
+<span class="sourceLineNo">322</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.322"></a>
 <span class="sourceLineNo">323</span>    return this;<a name="line.323"></a>
 <span class="sourceLineNo">324</span>  }<a name="line.324"></a>
 <span class="sourceLineNo">325</span>  <a name="line.325"></a>
-<span class="sourceLineNo">326</span>  protected boolean catalogJanitorEnabled;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.327"></a>
+<span class="sourceLineNo">326</span>  protected String filter;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.327"></a>
 <span class="sourceLineNo">328</span>  {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.329"></a>
+<span class="sourceLineNo">329</span>    (getImplData()).setFilter(p_filter);<a name="line.329"></a>
 <span class="sourceLineNo">330</span>    return this;<a name="line.330"></a>
 <span class="sourceLineNo">331</span>  }<a name="line.331"></a>
 <span class="sourceLineNo">332</span>  <a name="line.332"></a>
-<span class="sourceLineNo">333</span>  protected String filter;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.334"></a>
+<span class="sourceLineNo">333</span>  protected ServerManager serverManager;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.334"></a>
 <span class="sourceLineNo">335</span>  {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    (getImplData()).setFilter(p_filter);<a name="line.336"></a>
+<span class="sourceLineNo">336</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.336"></a>
 <span class="sourceLineNo">337</span>    return this;<a name="line.337"></a>
 <span class="sourceLineNo">338</span>  }<a name="line.338"></a>
 <span class="sourceLineNo">339</span>  <a name="line.339"></a>


[21/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index ef42cc2..ddc1f12 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -189,8 +189,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html
index 83debd1..d8b30f6 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html
@@ -137,7 +137,7 @@ var activeTableTab = "activeTableTab";
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#isNextCompleted--">isNextCompleted</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#isNextFinished--">isNextFinished</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></code></td>
@@ -202,13 +202,13 @@ var activeTableTab = "activeTableTab";
 </dl>
 </li>
 </ul>
-<a name="isNextCompleted--">
+<a name="isNextFinished--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>isNextCompleted</h4>
-<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#line.73">isNextCompleted</a>()</pre>
+<h4>isNextFinished</h4>
+<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#line.73">isNextFinished</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if the iterator next element is a completed procedure.</dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html
index 463d95d..1be72a5 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html
@@ -223,7 +223,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 </tr>
 <tr id="i5" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#isCompleted--">isCompleted</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#isFinished--">isFinished</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i6" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
@@ -397,13 +397,13 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.327">isReady</a>()</pre>
 </li>
 </ul>
-<a name="isCompleted--">
+<a name="isFinished--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>isCompleted</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.329">isCompleted</a>()</pre>
+<h4>isFinished</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.329">isFinished</a>()</pre>
 </li>
 </ul>
 <a name="convert--">
@@ -412,7 +412,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>convert</h4>
-<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.345">convert</a>()
+<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.344">convert</a>()
                   throws <a href="http://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>
@@ -426,7 +426,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>convertToInfo</h4>
-<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.352">convertToInfo</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.351">convertToInfo</a>()</pre>
 </li>
 </ul>
 <a name="toString--">
@@ -435,7 +435,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.357">toString</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#line.356">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html
index 9c30aff..1554255 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.370">ProcedureWALFormatReader.EntryIterator</a>
+<pre>private static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.369">ProcedureWALFormatReader.EntryIterator</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></pre>
 </li>
@@ -186,7 +186,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/stor
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#isNextCompleted--">isNextCompleted</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#isNextFinished--">isNextFinished</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></code></td>
@@ -238,7 +238,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/stor
 <ul class="blockList">
 <li class="blockList">
 <h4>replayHead</h4>
-<pre>private final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.371">replayHead</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.370">replayHead</a></pre>
 </li>
 </ul>
 <a name="current">
@@ -247,7 +247,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/stor
 <ul class="blockListLast">
 <li class="blockList">
 <h4>current</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.372">current</a></pre>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.371">current</a></pre>
 </li>
 </ul>
 </li>
@@ -264,7 +264,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/stor
 <ul class="blockListLast">
 <li class="blockList">
 <h4>EntryIterator</h4>
-<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.374">EntryIterator</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;replayHead)</pre>
+<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.373">EntryIterator</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;replayHead)</pre>
 </li>
 </ul>
 </li>
@@ -281,7 +281,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/stor
 <ul class="blockList">
 <li class="blockList">
 <h4>reset</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.380">reset</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.379">reset</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#reset--">ProcedureStore.ProcedureIterator</a></code></span></div>
 <div class="block">Reset the Iterator by seeking to the beginning of the list.</div>
 <dl>
@@ -296,7 +296,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/stor
 <ul class="blockList">
 <li class="blockList">
 <h4>hasNext</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.385">hasNext</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.384">hasNext</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#hasNext--">ProcedureStore.ProcedureIterator</a></code></span></div>
 <div class="block">Returns true if the iterator has more elements.
  (In other words, returns true if next() would return a Procedure
@@ -309,16 +309,16 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/stor
 </dl>
 </li>
 </ul>
-<a name="isNextCompleted--">
+<a name="isNextFinished--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>isNextCompleted</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.390">isNextCompleted</a>()</pre>
+<h4>isNextFinished</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.389">isNextFinished</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#isNextCompleted--">isNextCompleted</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></code></dd>
+<dd><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#isNextFinished--">isNextFinished</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></code></dd>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if the iterator next element is a completed procedure.</dd>
 </dl>
@@ -330,7 +330,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/stor
 <ul class="blockList">
 <li class="blockList">
 <h4>skipNext</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.395">skipNext</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.394">skipNext</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#skipNext--">ProcedureStore.ProcedureIterator</a></code></span></div>
 <div class="block">Skip the next procedure</div>
 <dl>
@@ -345,7 +345,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/stor
 <ul class="blockList">
 <li class="blockList">
 <h4>nextAsProcedure</h4>
-<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.400">nextAsProcedure</a>()
+<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.399">nextAsProcedure</a>()
                           throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#nextAsProcedure--">ProcedureStore.ProcedureIterator</a></code></span></div>
 <div class="block">Returns the next procedure in the iteration.</div>
@@ -365,7 +365,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/stor
 <ul class="blockListLast">
 <li class="blockList">
 <h4>nextAsProcedureInfo</h4>
-<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.409">nextAsProcedureInfo</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#line.408">nextAsProcedureInfo</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#nextAsProcedureInfo--">nextAsProcedureInfo</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html
index a860c33..fe4a5f4 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.418">ProcedureWALFormatReader.WalProcedureMap</a>
+<pre>private static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html#line.417">ProcedureWALFormatReader.WalProcedureMap</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -320,7 +320,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>procedureMap</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>[] <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.420">procedureMap</a></pre>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>[] <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.419">procedureMap</a></pre>
 </li>
 </ul>
 <a name="replayOrderHead">
@@ -329,7 +329,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>replayOrderHead</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.423">replayOrderHead</a></pre>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.422">replayOrderHead</a></pre>
 </li>
 </ul>
 <a name="replayOrderTail">
@@ -338,7 +338,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>replayOrderTail</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.424">replayOrderTail</a></pre>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.423">replayOrderTail</a></pre>
 </li>
 </ul>
 <a name="rootHead">
@@ -347,7 +347,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>rootHead</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.427">rootHead</a></pre>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.426">rootHead</a></pre>
 </li>
 </ul>
 <a name="childUnlinkedHead">
@@ -356,7 +356,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>childUnlinkedHead</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.430">childUnlinkedHead</a></pre>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.429">childUnlinkedHead</a></pre>
 </li>
 </ul>
 <a name="minProcId">
@@ -365,7 +365,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>minProcId</h4>
-<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.433">minProcId</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.432">minProcId</a></pre>
 </li>
 </ul>
 <a name="maxProcId">
@@ -374,7 +374,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>maxProcId</h4>
-<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.434">maxProcId</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.433">maxProcId</a></pre>
 </li>
 </ul>
 </li>
@@ -391,7 +391,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WalProcedureMap</h4>
-<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.436">WalProcedureMap</a>(int&nbsp;size)</pre>
+<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.435">WalProcedureMap</a>(int&nbsp;size)</pre>
 </li>
 </ul>
 </li>
@@ -408,7 +408,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>add</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.444">add</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure&nbsp;procProto)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.443">add</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure&nbsp;procProto)</pre>
 </li>
 </ul>
 <a name="remove-long-">
@@ -417,7 +417,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>remove</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.460">remove</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.459">remove</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="trackProcIds-long-">
@@ -426,7 +426,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>trackProcIds</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.471">trackProcIds</a>(long&nbsp;procId)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.470">trackProcIds</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="getMinProcId--">
@@ -435,7 +435,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getMinProcId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.476">getMinProcId</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.475">getMinProcId</a>()</pre>
 </li>
 </ul>
 <a name="getMaxProcId--">
@@ -444,7 +444,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxProcId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.480">getMaxProcId</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.479">getMaxProcId</a>()</pre>
 </li>
 </ul>
 <a name="contains-long-">
@@ -453,7 +453,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>contains</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.484">contains</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.483">contains</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="isEmpty--">
@@ -462,7 +462,7 @@ extends <a href="http://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/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.488">isEmpty</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.487">isEmpty</a>()</pre>
 </li>
 </ul>
 <a name="clear--">
@@ -471,7 +471,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>clear</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.492">clear</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.491">clear</a>()</pre>
 </li>
 </ul>
 <a name="mergeTail-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.WalProcedureMap-">
@@ -480,7 +480,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>mergeTail</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.514">mergeTail</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a>&nbsp;other)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.513">mergeTail</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a>&nbsp;other)</pre>
 </li>
 </ul>
 <a name="fetchReady--">
@@ -489,7 +489,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>fetchReady</h4>
-<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.565">fetchReady</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.564">fetchReady</a>()</pre>
 </li>
 </ul>
 <a name="fetchAll--">
@@ -498,7 +498,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>fetchAll</h4>
-<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.599">fetchAll</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.598">fetchAll</a>()</pre>
 </li>
 </ul>
 <a name="buildGraph--">
@@ -507,7 +507,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>buildGraph</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.614">buildGraph</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.613">buildGraph</a>()</pre>
 </li>
 </ul>
 <a name="getRootProcedure-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">
@@ -516,7 +516,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getRootProcedure</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.630">getRootProcedure</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry)</pre>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.629">getRootProcedure</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry)</pre>
 </li>
 </ul>
 <a name="checkReadyToRun-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">
@@ -525,7 +525,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>checkReadyToRun</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.676">checkReadyToRun</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;rootEntry)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.675">checkReadyToRun</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;rootEntry)</pre>
 </li>
 </ul>
 <a name="unlinkFromReplayList-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">
@@ -534,7 +534,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>unlinkFromReplayList</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.719">unlinkFromReplayList</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.718">unlinkFromReplayList</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry)</pre>
 </li>
 </ul>
 <a name="addToReplayList-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">
@@ -543,7 +543,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>addToReplayList</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.734">addToReplayList</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.733">addToReplayList</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry)</pre>
 </li>
 </ul>
 <a name="unlinkFromLinkList-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">
@@ -552,7 +552,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>unlinkFromLinkList</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.746">unlinkFromLinkList</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.745">unlinkFromLinkList</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry)</pre>
 </li>
 </ul>
 <a name="addToLinkList-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.Entry-">
@@ -561,7 +561,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>addToLinkList</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.760">addToLinkList</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry,
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.759">addToLinkList</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;entry,
                                                      <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;linkHead)</pre>
 </li>
 </ul>
@@ -571,7 +571,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>findLinkListTail</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.770">findLinkListTail</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;linkHead)</pre>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.769">findLinkListTail</a>(<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;linkHead)</pre>
 </li>
 </ul>
 <a name="addToMap-long-boolean-">
@@ -580,7 +580,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>addToMap</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.778">addToMap</a>(long&nbsp;procId,
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.777">addToMap</a>(long&nbsp;procId,
                                                 boolean&nbsp;hasParent)</pre>
 </li>
 </ul>
@@ -590,7 +590,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>removeFromMap</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.788">removeFromMap</a>(long&nbsp;procId)</pre>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.787">removeFromMap</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="getProcedure-long-">
@@ -599,7 +599,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcedure</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.808">getProcedure</a>(long&nbsp;procId)</pre>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.807">getProcedure</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="getProcedure-int-long-">
@@ -608,7 +608,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcedure</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.812">getProcedure</a>(int&nbsp;slotIndex,
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.811">getProcedure</a>(int&nbsp;slotIndex,
                                                     long&nbsp;procId)</pre>
 </li>
 </ul>
@@ -618,7 +618,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getMapSlot</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.823">getMapSlot</a>(long&nbsp;procId)</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#line.822">getMapSlot</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index 3653666..e9c5161 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -179,10 +179,10 @@
 <li type="circle">java.lang.<a href="http://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="http://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="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottlingException.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottlingException.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index 096d509..921bca0 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -668,20 +668,20 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://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/MemStoreCompactor.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactor.Action</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ImmutableSegment.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ImmutableSegment.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionOpeningState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">RegionOpeningState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactor.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactor.Action</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.FlushResult.Result</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">StoreScanner.StoreScannerCompactionRace</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.FlushResult.Result</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionOpeningState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">RegionOpeningState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
index b4cd04c..d4c8f41 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -127,8 +127,8 @@
 <ul>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteCompare.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteCompare</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
index f7d6190..1d8853b 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -135,9 +135,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index 59a46a4..1c19e45 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -191,9 +191,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
index 1fd7e56..6637fe6 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -198,9 +198,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftServerRunner.ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftServerRunner.ImplType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
 </ul>
 </li>
 </ul>


[16/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html
index 35cebd9..b6b4cb6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html
@@ -321,7 +321,7 @@
 <span class="sourceLineNo">313</span>      final NonceKey nonceKey;<a name="line.313"></a>
 <span class="sourceLineNo">314</span>      final long procId;<a name="line.314"></a>
 <span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>      if (procIter.isNextCompleted()) {<a name="line.316"></a>
+<span class="sourceLineNo">316</span>      if (procIter.isNextFinished()) {<a name="line.316"></a>
 <span class="sourceLineNo">317</span>        ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.317"></a>
 <span class="sourceLineNo">318</span>        nonceKey = proc.getNonceKey();<a name="line.318"></a>
 <span class="sourceLineNo">319</span>        procId = proc.getProcId();<a name="line.319"></a>
@@ -359,7 +359,7 @@
 <span class="sourceLineNo">351</span>    HashSet&lt;Procedure&gt; waitingSet = null;<a name="line.351"></a>
 <span class="sourceLineNo">352</span>    procIter.reset();<a name="line.352"></a>
 <span class="sourceLineNo">353</span>    while (procIter.hasNext()) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (procIter.isNextCompleted()) {<a name="line.354"></a>
+<span class="sourceLineNo">354</span>      if (procIter.isNextFinished()) {<a name="line.354"></a>
 <span class="sourceLineNo">355</span>        procIter.skipNext();<a name="line.355"></a>
 <span class="sourceLineNo">356</span>        continue;<a name="line.356"></a>
 <span class="sourceLineNo">357</span>      }<a name="line.357"></a>
@@ -405,1450 +405,1448 @@
 <span class="sourceLineNo">397</span>          }<a name="line.397"></a>
 <span class="sourceLineNo">398</span>          waitingSet.add(proc);<a name="line.398"></a>
 <span class="sourceLineNo">399</span>          break;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        case FINISHED:<a name="line.400"></a>
-<span class="sourceLineNo">401</span>          if (proc.hasException()) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>            // add the proc to the scheduler to perform the rollback<a name="line.402"></a>
-<span class="sourceLineNo">403</span>            scheduler.addBack(proc);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          }<a name="line.404"></a>
-<span class="sourceLineNo">405</span>          break;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        case ROLLEDBACK:<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        case INITIALIZING:<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          LOG.error(msg);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          throw new UnsupportedOperationException(msg);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        default:<a name="line.411"></a>
-<span class="sourceLineNo">412</span>          break;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      }<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    // 3. Validate the stacks<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    int corruptedCount = 0;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    while (itStack.hasNext()) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      RootProcedureState procStack = entry.getValue();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      if (procStack.isValid()) continue;<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>      for (Procedure proc: procStack.getSubproceduresStack()) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        LOG.error("Corrupted " + proc);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        procedures.remove(proc.getProcId());<a name="line.426"></a>
-<span class="sourceLineNo">427</span>        runnableList.remove(proc);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        corruptedCount++;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      }<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      itStack.remove();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    // 4. Push the procedures to the timeout executor<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    if (waitingSet != null &amp;&amp; !waitingSet.isEmpty()) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      for (Procedure proc: waitingSet) {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        proc.afterReplay(getEnvironment());<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        timeoutExecutor.add(proc);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      }<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    }<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>    // 5. Push the procedure to the scheduler<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    if (!runnableList.isEmpty()) {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      // some procedure may be started way before this stuff.<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        Procedure proc = runnableList.get(i);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        proc.afterReplay(getEnvironment());<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        if (!proc.hasParent()) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        }<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        if (proc.wasExecuted()) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>          scheduler.addFront(proc);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        } else {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          // if it was not in execution, it can wait.<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          scheduler.addBack(proc);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        }<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    }<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>   * Start the procedure executor.<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   *<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * @param numThreads number of threads available for procedure execution.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   */<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    if (running.getAndSet(true)) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      LOG.warn("Already running");<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      return;<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>    // We have numThreads executor + one timer thread used for timing out<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    // procedures and triggering periodic procedures.<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    this.corePoolSize = numThreads;<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    LOG.info("Starting executor worker threads=" + corePoolSize);<a name="line.485"></a>
-<span class="sourceLineNo">486</span><a name="line.486"></a>
-<span class="sourceLineNo">487</span>    // Create the Thread Group for the executors<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    threadGroup = new ThreadGroup("ProcedureExecutor");<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>    // Create the timeout executor<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    timeoutExecutor = new TimeoutExecutorThread(threadGroup);<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>    // Create the workers<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    workerId.set(0);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    workerThreads = new CopyOnWriteArrayList&lt;&gt;();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    for (int i = 0; i &lt; corePoolSize; ++i) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      workerThreads.add(new WorkerThread(threadGroup));<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
+<span class="sourceLineNo">400</span>        case FAILED:<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          // add the proc to the scheduler to perform the rollback<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          scheduler.addBack(proc);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          break;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        case ROLLEDBACK:<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        case INITIALIZING:<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.406"></a>
+<span class="sourceLineNo">407</span>          LOG.error(msg);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>          throw new UnsupportedOperationException(msg);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        default:<a name="line.409"></a>
+<span class="sourceLineNo">410</span>          break;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    // 3. Validate the stacks<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    int corruptedCount = 0;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    while (itStack.hasNext()) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      RootProcedureState procStack = entry.getValue();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      if (procStack.isValid()) continue;<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span>      for (Procedure proc: procStack.getSubproceduresStack()) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        LOG.error("Corrupted " + proc);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        procedures.remove(proc.getProcId());<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        runnableList.remove(proc);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        corruptedCount++;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>      }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      itStack.remove();<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    }<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<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>    // 4. Push the procedures to the timeout executor<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    if (waitingSet != null &amp;&amp; !waitingSet.isEmpty()) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      for (Procedure proc: waitingSet) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        proc.afterReplay(getEnvironment());<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        timeoutExecutor.add(proc);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      }<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span>    // 5. Push the procedure to the scheduler<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    if (!runnableList.isEmpty()) {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      // some procedure may be started way before this stuff.<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>        Procedure proc = runnableList.get(i);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        proc.afterReplay(getEnvironment());<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        if (!proc.hasParent()) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        }<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        if (proc.wasExecuted()) {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          scheduler.addFront(proc);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>        } else {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          // if it was not in execution, it can wait.<a name="line.457"></a>
+<span class="sourceLineNo">458</span>          scheduler.addBack(proc);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      }<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  }<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>   * Start the procedure executor.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   *<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @param numThreads number of threads available for procedure execution.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   */<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    if (running.getAndSet(true)) {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      LOG.warn("Already running");<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      return;<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span><a name="line.479"></a>
+<span class="sourceLineNo">480</span>    // We have numThreads executor + one timer thread used for timing out<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    // procedures and triggering periodic procedures.<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    this.corePoolSize = numThreads;<a name="line.482"></a>
+<span class="sourceLineNo">483</span>    LOG.info("Starting executor worker threads=" + corePoolSize);<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // Create the Thread Group for the executors<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    threadGroup = new ThreadGroup("ProcedureExecutor");<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>    // Create the timeout executor<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    timeoutExecutor = new TimeoutExecutorThread(threadGroup);<a name="line.489"></a>
+<span class="sourceLineNo">490</span><a name="line.490"></a>
+<span class="sourceLineNo">491</span>    // Create the workers<a name="line.491"></a>
+<span class="sourceLineNo">492</span>    workerId.set(0);<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    workerThreads = new CopyOnWriteArrayList&lt;&gt;();<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    for (int i = 0; i &lt; corePoolSize; ++i) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      workerThreads.add(new WorkerThread(threadGroup));<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    }<a name="line.496"></a>
+<span class="sourceLineNo">497</span><a name="line.497"></a>
+<span class="sourceLineNo">498</span>    long st, et;<a name="line.498"></a>
 <span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>    long st, et;<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>    // Acquire the store lease.<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    store.recoverLease();<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    LOG.info(String.format("Recover store (%s) lease: %s",<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.507"></a>
-<span class="sourceLineNo">508</span><a name="line.508"></a>
-<span class="sourceLineNo">509</span>    // start the procedure scheduler<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    scheduler.start();<a name="line.510"></a>
-<span class="sourceLineNo">511</span><a name="line.511"></a>
-<span class="sourceLineNo">512</span>    // TODO: Split in two steps.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    // The first one will make sure that we have the latest id,<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    // so we can start the threads and accept new procedures.<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    // The second step will do the actual load of old procedures.<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    load(abortOnCorruption);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    LOG.info(String.format("Load store (%s): %s",<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (LOG.isTraceEnabled()) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.trace("Start workers " + workerThreads.size());<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    timeoutExecutor.start();<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    for (WorkerThread worker: workerThreads) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      worker.start();<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    // Internal chores<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    timeoutExecutor.add(new WorkerMonitor());<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>    // Add completed cleaner chore<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    addChore(new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  public void stop() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    if (!running.getAndSet(false)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>      return;<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>    LOG.info("Stopping");<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    scheduler.stop();<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    timeoutExecutor.sendStopSignal();<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  @VisibleForTesting<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  public void join() {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    assert !isRunning() : "expected not running";<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>    // stop the timeout executor<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    timeoutExecutor.awaitTermination();<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    timeoutExecutor = null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>    // stop the worker threads<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    for (WorkerThread worker: workerThreads) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      worker.awaitTermination();<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    workerThreads = null;<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    // Destroy the Thread Group for the executors<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    try {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      threadGroup.destroy();<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    } catch (IllegalThreadStateException e) {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      LOG.error("Thread group " + threadGroup + " contains running threads");<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      threadGroup.list();<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    } finally {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      threadGroup = null;<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>    // reset the in-memory state for testing<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    completed.clear();<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    rollbackStack.clear();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    procedures.clear();<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    nonceKeysToProcIdsMap.clear();<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    scheduler.clear();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    lastProcId.set(-1);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  }<a name="line.580"></a>
-<span class="sourceLineNo">581</span><a name="line.581"></a>
-<span class="sourceLineNo">582</span>  public void refreshConfiguration(final Configuration conf) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    this.conf = conf;<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  }<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
+<span class="sourceLineNo">500</span>    // Acquire the store lease.<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    store.recoverLease();<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    LOG.info(String.format("Recover store (%s) lease: %s",<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.505"></a>
+<span class="sourceLineNo">506</span><a name="line.506"></a>
+<span class="sourceLineNo">507</span>    // start the procedure scheduler<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    scheduler.start();<a name="line.508"></a>
+<span class="sourceLineNo">509</span><a name="line.509"></a>
+<span class="sourceLineNo">510</span>    // TODO: Split in two steps.<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    // The first one will make sure that we have the latest id,<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    // so we can start the threads and accept new procedures.<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    // The second step will do the actual load of old procedures.<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    load(abortOnCorruption);<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.517"></a>
+<span class="sourceLineNo">518</span>    LOG.info(String.format("Load store (%s): %s",<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    if (LOG.isTraceEnabled()) {<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      LOG.trace("Start workers " + workerThreads.size());<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    timeoutExecutor.start();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    for (WorkerThread worker: workerThreads) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      worker.start();<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
+<span class="sourceLineNo">529</span><a name="line.529"></a>
+<span class="sourceLineNo">530</span>    // Internal chores<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    timeoutExecutor.add(new WorkerMonitor());<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    // Add completed cleaner chore<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    addChore(new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.534"></a>
+<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>  public void stop() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    if (!running.getAndSet(false)) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      return;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    }<a name="line.540"></a>
+<span class="sourceLineNo">541</span><a name="line.541"></a>
+<span class="sourceLineNo">542</span>    LOG.info("Stopping");<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    scheduler.stop();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    timeoutExecutor.sendStopSignal();<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>  @VisibleForTesting<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  public void join() {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    assert !isRunning() : "expected not running";<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span>    // stop the timeout executor<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    timeoutExecutor.awaitTermination();<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    timeoutExecutor = null;<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    // stop the worker threads<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    for (WorkerThread worker: workerThreads) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      worker.awaitTermination();<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    workerThreads = null;<a name="line.559"></a>
+<span class="sourceLineNo">560</span><a name="line.560"></a>
+<span class="sourceLineNo">561</span>    // Destroy the Thread Group for the executors<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    try {<a name="line.562"></a>
+<span class="sourceLineNo">563</span>      threadGroup.destroy();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    } catch (IllegalThreadStateException e) {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      LOG.error("Thread group " + threadGroup + " contains running threads");<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      threadGroup.list();<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    } finally {<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      threadGroup = null;<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
+<span class="sourceLineNo">570</span><a name="line.570"></a>
+<span class="sourceLineNo">571</span>    // reset the in-memory state for testing<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    completed.clear();<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    rollbackStack.clear();<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    procedures.clear();<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    nonceKeysToProcIdsMap.clear();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    scheduler.clear();<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    lastProcId.set(-1);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
+<span class="sourceLineNo">579</span><a name="line.579"></a>
+<span class="sourceLineNo">580</span>  public void refreshConfiguration(final Configuration conf) {<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    this.conf = conf;<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.582"></a>
+<span class="sourceLineNo">583</span>        DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<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>  // ==========================================================================<a name="line.586"></a>
+<span class="sourceLineNo">587</span>  //  Accessors<a name="line.587"></a>
 <span class="sourceLineNo">588</span>  // ==========================================================================<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  //  Accessors<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  // ==========================================================================<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  public boolean isRunning() {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return running.get();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return the current number of worker threads.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   */<a name="line.597"></a>
-<span class="sourceLineNo">598</span>  public int getWorkerThreadCount() {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    return workerThreads.size();<a name="line.599"></a>
-<span class="sourceLineNo">600</span>  }<a name="line.600"></a>
-<span class="sourceLineNo">601</span><a name="line.601"></a>
-<span class="sourceLineNo">602</span>  /**<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   * @return the core pool size settings.<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   */<a name="line.604"></a>
-<span class="sourceLineNo">605</span>  public int getCorePoolSize() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    return corePoolSize;<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>  public int getActiveExecutorCount() {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    return activeExecutorCount.get();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  public TEnvironment getEnvironment() {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    return this.environment;<a name="line.614"></a>
-<span class="sourceLineNo">615</span>  }<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>  public ProcedureStore getStore() {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    return this.store;<a name="line.618"></a>
-<span class="sourceLineNo">619</span>  }<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>  protected ProcedureScheduler getScheduler() {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    return scheduler;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>  }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>  public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    this.scheduler.signalAll();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>  }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>  public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<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">589</span>  public boolean isRunning() {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    return running.get();<a name="line.590"></a>
+<span class="sourceLineNo">591</span>  }<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span>  /**<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @return the current number of worker threads.<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
+<span class="sourceLineNo">596</span>  public int getWorkerThreadCount() {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    return workerThreads.size();<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  }<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span>  /**<a name="line.600"></a>
+<span class="sourceLineNo">601</span>   * @return the core pool size settings.<a name="line.601"></a>
+<span class="sourceLineNo">602</span>   */<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  public int getCorePoolSize() {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    return corePoolSize;<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  }<a name="line.605"></a>
+<span class="sourceLineNo">606</span><a name="line.606"></a>
+<span class="sourceLineNo">607</span>  public int getActiveExecutorCount() {<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    return activeExecutorCount.get();<a name="line.608"></a>
+<span class="sourceLineNo">609</span>  }<a name="line.609"></a>
+<span class="sourceLineNo">610</span><a name="line.610"></a>
+<span class="sourceLineNo">611</span>  public TEnvironment getEnvironment() {<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    return this.environment;<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>  public ProcedureStore getStore() {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    return this.store;<a name="line.616"></a>
+<span class="sourceLineNo">617</span>  }<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>  protected ProcedureScheduler getScheduler() {<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    return scheduler;<a name="line.620"></a>
+<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>  public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    this.scheduler.signalAll();<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>  public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
+<span class="sourceLineNo">631</span><a name="line.631"></a>
+<span class="sourceLineNo">632</span>  // ==========================================================================<a name="line.632"></a>
+<span class="sourceLineNo">633</span>  //  Submit/Remove Chores<a name="line.633"></a>
 <span class="sourceLineNo">634</span>  // ==========================================================================<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  //  Submit/Remove Chores<a name="line.635"></a>
-<span class="sourceLineNo">636</span>  // ==========================================================================<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span>  /**<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * Add a chore procedure to the executor<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   * @param chore the chore to add<a name="line.640"></a>
-<span class="sourceLineNo">641</span>   */<a name="line.641"></a>
-<span class="sourceLineNo">642</span>  public void addChore(final ProcedureInMemoryChore chore) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    timeoutExecutor.add(chore);<a name="line.644"></a>
-<span class="sourceLineNo">645</span>  }<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>  /**<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   * Remove a chore procedure from the executor<a name="line.648"></a>
-<span class="sourceLineNo">649</span>   * @param chore the chore to remove<a name="line.649"></a>
-<span class="sourceLineNo">650</span>   * @return whether the chore is removed, or it will be removed later<a name="line.650"></a>
-<span class="sourceLineNo">651</span>   */<a name="line.651"></a>
-<span class="sourceLineNo">652</span>  public boolean removeChore(final ProcedureInMemoryChore chore) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    chore.setState(ProcedureState.FINISHED);<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    return timeoutExecutor.remove(chore);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>  }<a name="line.655"></a>
-<span class="sourceLineNo">656</span><a name="line.656"></a>
+<span class="sourceLineNo">635</span><a name="line.635"></a>
+<span class="sourceLineNo">636</span>  /**<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   * Add a chore procedure to the executor<a name="line.637"></a>
+<span class="sourceLineNo">638</span>   * @param chore the chore to add<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   */<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  public void addChore(final ProcedureInMemoryChore chore) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    timeoutExecutor.add(chore);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>  }<a name="line.643"></a>
+<span class="sourceLineNo">644</span><a name="line.644"></a>
+<span class="sourceLineNo">645</span>  /**<a name="line.645"></a>
+<span class="sourceLineNo">646</span>   * Remove a chore procedure from the executor<a name="line.646"></a>
+<span class="sourceLineNo">647</span>   * @param chore the chore to remove<a name="line.647"></a>
+<span class="sourceLineNo">648</span>   * @return whether the chore is removed, or it will be removed later<a name="line.648"></a>
+<span class="sourceLineNo">649</span>   */<a name="line.649"></a>
+<span class="sourceLineNo">650</span>  public boolean removeChore(final ProcedureInMemoryChore chore) {<a name="line.650"></a>
+<span class="sourceLineNo">651</span>    chore.setState(ProcedureState.SUCCESS);<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    return timeoutExecutor.remove(chore);<a name="line.652"></a>
+<span class="sourceLineNo">653</span>  }<a name="line.653"></a>
+<span class="sourceLineNo">654</span><a name="line.654"></a>
+<span class="sourceLineNo">655</span>  // ==========================================================================<a name="line.655"></a>
+<span class="sourceLineNo">656</span>  //  Nonce Procedure helpers<a name="line.656"></a>
 <span class="sourceLineNo">657</span>  // ==========================================================================<a name="line.657"></a>
-<span class="sourceLineNo">658</span>  //  Nonce Procedure helpers<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  // ==========================================================================<a name="line.659"></a>
-<span class="sourceLineNo">660</span>  /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * @param nonceGroup<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * @param nonce<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * @return the generated NonceKey<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>  }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>  /**<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   * Register a nonce for a procedure that is going to be submitted.<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   * A procId will be reserved and on submitProcedure(),<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   * the procedure with the specified nonce will take the reserved ProcId.<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   * otherwise an invalid procId will be returned. and the caller should procede<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   * and submit the procedure.<a name="line.676"></a>
-<span class="sourceLineNo">677</span>   *<a name="line.677"></a>
-<span class="sourceLineNo">678</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.678"></a>
-<span class="sourceLineNo">679</span>   * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.679"></a>
-<span class="sourceLineNo">680</span>   */<a name="line.680"></a>
-<span class="sourceLineNo">681</span>  public long registerNonce(final NonceKey nonceKey) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    if (nonceKey == null) return -1;<a name="line.682"></a>
-<span class="sourceLineNo">683</span><a name="line.683"></a>
-<span class="sourceLineNo">684</span>    // check if we have already a Reserved ID for the nonce<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    if (oldProcId == null) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      // reserve a new Procedure ID, this will be associated with the nonce<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      // and the procedure submitted with the specified nonce will use this ID.<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      final long newProcId = nextProcId();<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.690"></a>
-<span class="sourceLineNo">691</span>      if (oldProcId == null) return -1;<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>    // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    // since the client expect the procedure to be submitted, spin here until it is.<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    while (isRunning() &amp;&amp;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>           !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &amp;&amp;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>           nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      if (traceEnabled) {<a name="line.700"></a>
-<span class="sourceLineNo">701</span>        LOG.trace("Waiting for procId=" + oldProcId.longValue() + " to be submitted");<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      }<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      Threads.sleep(100);<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    }<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    return oldProcId.longValue();<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  }<a name="line.706"></a>
-<span class="sourceLineNo">707</span><a name="line.707"></a>
-<span class="sourceLineNo">708</span>  /**<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    if (nonceKey == null) return;<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    if (procId == null) return;<a name="line.716"></a>
-<span class="sourceLineNo">717</span><a name="line.717"></a>
-<span class="sourceLineNo">718</span>    // if the procedure was not submitted, remove the nonce<a name="line.718"></a>
-<span class="sourceLineNo">719</span>    if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    }<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  }<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>  /**<a name="line.724"></a>
-<span class="sourceLineNo">725</span>   * If the failure failed before submitting it, we may want to give back the<a name="line.725"></a>
-<span class="sourceLineNo">726</span>   * same error to the requests with the same nonceKey.<a name="line.726"></a>
-<span class="sourceLineNo">727</span>   *<a name="line.727"></a>
-<span class="sourceLineNo">728</span>   * @param nonceKey A unique identifier for this operation from the client or process<a name="line.728"></a>
-<span class="sourceLineNo">729</span>   * @param procName name of the procedure, used to inform the user<a name="line.729"></a>
-<span class="sourceLineNo">730</span>   * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * @param exception the failure to report to the user<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   */<a name="line.732"></a>
-<span class="sourceLineNo">733</span>  public void setFailureResultForNonce(final NonceKey nonceKey, final String procName,<a name="line.733"></a>
-<span class="sourceLineNo">734</span>      final User procOwner, final IOException exception) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    if (nonceKey == null) return;<a name="line.735"></a>
-<span class="sourceLineNo">736</span><a name="line.736"></a>
-<span class="sourceLineNo">737</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    if (procId == null || completed.containsKey(procId)) return;<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>    final long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    final ProcedureInfo result = new ProcedureInfo(procId.longValue(),<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      procName, procOwner != null ? procOwner.getShortName() : null,<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      ProcedureUtil.convertToProcedureState(ProcedureState.ROLLEDBACK),<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      -1, nonceKey, exception, currentTime, currentTime, null);<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    completed.putIfAbsent(procId, result);<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
-<span class="sourceLineNo">747</span><a name="line.747"></a>
+<span class="sourceLineNo">658</span>  /**<a name="line.658"></a>
+<span class="sourceLineNo">659</span>   * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.659"></a>
+<span class="sourceLineNo">660</span>   * @param nonceGroup<a name="line.660"></a>
+<span class="sourceLineNo">661</span>   * @param nonce<a name="line.661"></a>
+<span class="sourceLineNo">662</span>   * @return the generated NonceKey<a name="line.662"></a>
+<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
+<span class="sourceLineNo">664</span>  public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.665"></a>
+<span class="sourceLineNo">666</span>  }<a name="line.666"></a>
+<span class="sourceLineNo">667</span><a name="line.667"></a>
+<span class="sourceLineNo">668</span>  /**<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * Register a nonce for a procedure that is going to be submitted.<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * A procId will be reserved and on submitProcedure(),<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   * the procedure with the specified nonce will take the reserved ProcId.<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   * otherwise an invalid procId will be returned. and the caller should procede<a name="line.673"></a>
+<span class="sourceLineNo">674</span>   * and submit the procedure.<a name="line.674"></a>
+<span class="sourceLineNo">675</span>   *<a name="line.675"></a>
+<span class="sourceLineNo">676</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.676"></a>
+<span class="sourceLineNo">677</span>   * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.677"></a>
+<span class="sourceLineNo">678</span>   */<a name="line.678"></a>
+<span class="sourceLineNo">679</span>  public long registerNonce(final NonceKey nonceKey) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span>    if (nonceKey == null) return -1;<a name="line.680"></a>
+<span class="sourceLineNo">681</span><a name="line.681"></a>
+<span class="sourceLineNo">682</span>    // check if we have already a Reserved ID for the nonce<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>    if (oldProcId == null) {<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      // reserve a new Procedure ID, this will be associated with the nonce<a name="line.685"></a>
+<span class="sourceLineNo">686</span>      // and the procedure submitted with the specified nonce will use this ID.<a name="line.686"></a>
+<span class="sourceLineNo">687</span>      final long newProcId = nextProcId();<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      if (oldProcId == null) return -1;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>    }<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span>    // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    // since the client expect the procedure to be submitted, spin here until it is.<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    while (isRunning() &amp;&amp;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>           !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &amp;&amp;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>           nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.697"></a>
+<span class="sourceLineNo">698</span>      if (traceEnabled) {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>        LOG.trace("Waiting for procId=" + oldProcId.longValue() + " to be submitted");<a name="line.699"></a>
+<span class="sourceLineNo">700</span>      }<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      Threads.sleep(100);<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    }<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    return oldProcId.longValue();<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>  /**<a name="line.706"></a>
+<span class="sourceLineNo">707</span>   * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.707"></a>
+<span class="sourceLineNo">708</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.708"></a>
+<span class="sourceLineNo">709</span>   */<a name="line.709"></a>
+<span class="sourceLineNo">710</span>  public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    if (nonceKey == null) return;<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.713"></a>
+<span class="sourceLineNo">714</span>    if (procId == null) return;<a name="line.714"></a>
+<span class="sourceLineNo">715</span><a name="line.715"></a>
+<span class="sourceLineNo">716</span>    // if the procedure was not submitted, remove the nonce<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    }<a name="line.719"></a>
+<span class="sourceLineNo">720</span>  }<a name="line.720"></a>
+<span class="sourceLineNo">721</span><a name="line.721"></a>
+<span class="sourceLineNo">722</span>  /**<a name="line.722"></a>
+<span class="sourceLineNo">723</span>   * If the failure failed before submitting it, we may want to give back the<a name="line.723"></a>
+<span class="sourceLineNo">724</span>   * same error to the requests with the same nonceKey.<a name="line.724"></a>
+<span class="sourceLineNo">725</span>   *<a name="line.725"></a>
+<span class="sourceLineNo">726</span>   * @param nonceKey A unique identifier for this operation from the client or process<a name="line.726"></a>
+<span class="sourceLineNo">727</span>   * @param procName name of the procedure, used to inform the user<a name="line.727"></a>
+<span class="sourceLineNo">728</span>   * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.728"></a>
+<span class="sourceLineNo">729</span>   * @param exception the failure to report to the user<a name="line.729"></a>
+<span class="sourceLineNo">730</span>   */<a name="line.730"></a>
+<span class="sourceLineNo">731</span>  public void setFailureResultForNonce(final NonceKey nonceKey, final String procName,<a name="line.731"></a>
+<span class="sourceLineNo">732</span>      final User procOwner, final IOException exception) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    if (nonceKey == null) return;<a name="line.733"></a>
+<span class="sourceLineNo">734</span><a name="line.734"></a>
+<span class="sourceLineNo">735</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    if (procId == null || completed.containsKey(procId)) return;<a name="line.736"></a>
+<span class="sourceLineNo">737</span><a name="line.737"></a>
+<span class="sourceLineNo">738</span>    final long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.738"></a>
+<span class="sourceLineNo">739</span>    final ProcedureInfo result = new ProcedureInfo(procId.longValue(),<a name="line.739"></a>
+<span class="sourceLineNo">740</span>      procName, procOwner != null ? procOwner.getShortName() : null,<a name="line.740"></a>
+<span class="sourceLineNo">741</span>      ProcedureUtil.convertToProcedureState(ProcedureState.ROLLEDBACK),<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      -1, nonceKey, exception, currentTime, currentTime, null);<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    completed.putIfAbsent(procId, result);<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>  // ==========================================================================<a name="line.746"></a>
+<span class="sourceLineNo">747</span>  //  Submit/Abort Procedure<a name="line.747"></a>
 <span class="sourceLineNo">748</span>  // ==========================================================================<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  //  Submit/Abort Procedure<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>   * Add a new root-procedure to the executor.<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   * @param proc the new procedure to execute.<a name="line.753"></a>
-<span class="sourceLineNo">754</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.754"></a>
-<span class="sourceLineNo">755</span>   */<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  public long submitProcedure(final Procedure proc) {<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    return submitProcedure(proc, null);<a name="line.757"></a>
-<span class="sourceLineNo">758</span>  }<a name="line.758"></a>
-<span class="sourceLineNo">759</span><a name="line.759"></a>
-<span class="sourceLineNo">760</span>  /**<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   * Add a new root-procedure to the executor.<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * @param proc the new procedure to execute.<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   * @param nonceKey the registered unique identifier for this operation from the client or process.<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   */<a name="line.765"></a>
-<span class="sourceLineNo">766</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NP_NULL_ON_SOME_PATH",<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      justification = "FindBugs is blind to the check-for-null")<a name="line.767"></a>
-<span class="sourceLineNo">768</span>  public long submitProcedure(final Procedure proc, final NonceKey nonceKey) {<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.770"></a>
+<span class="sourceLineNo">749</span>  /**<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * Add a new root-procedure to the executor.<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   * @param proc the new procedure to execute.<a name="line.751"></a>
+<span class="sourceLineNo">752</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.752"></a>
+<span class="sourceLineNo">753</span>   */<a name="line.753"></a>
+<span class="sourceLineNo">754</span>  public long submitProcedure(final Procedure proc) {<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    return submitProcedure(proc, null);<a name="line.755"></a>
+<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
+<span class="sourceLineNo">757</span><a name="line.757"></a>
+<span class="sourceLineNo">758</span>  /**<a name="line.758"></a>
+<span class="sourceLineNo">759</span>   * Add a new root-procedure to the executor.<a name="line.759"></a>
+<span class="sourceLineNo">760</span>   * @param proc the new procedure to execute.<a name="line.760"></a>
+<span class="sourceLineNo">761</span>   * @param nonceKey the registered unique identifier for this operation from the client or process.<a name="line.761"></a>
+<span class="sourceLineNo">762</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.762"></a>
+<span class="sourceLineNo">763</span>   */<a name="line.763"></a>
+<span class="sourceLineNo">764</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NP_NULL_ON_SOME_PATH",<a name="line.764"></a>
+<span class="sourceLineNo">765</span>      justification = "FindBugs is blind to the check-for-null")<a name="line.765"></a>
+<span class="sourceLineNo">766</span>  public long submitProcedure(final Procedure proc, final NonceKey nonceKey) {<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.767"></a>
+<span class="sourceLineNo">768</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.768"></a>
+<span class="sourceLineNo">769</span><a name="line.769"></a>
+<span class="sourceLineNo">770</span>    prepareProcedure(proc);<a name="line.770"></a>
 <span class="sourceLineNo">771</span><a name="line.771"></a>
-<span class="sourceLineNo">772</span>    prepareProcedure(proc);<a name="line.772"></a>
-<span class="sourceLineNo">773</span><a name="line.773"></a>
-<span class="sourceLineNo">774</span>    final Long currentProcId;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    if (nonceKey != null) {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>      currentProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      Preconditions.checkArgument(currentProcId != null,<a name="line.777"></a>
-<span class="sourceLineNo">778</span>        "Expected nonceKey=" + nonceKey + " to be reserved, use registerNonce(); proc=" + proc);<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    } else {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      currentProcId = nextProcId();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>    // Initialize the procedure<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    proc.setNonceKey(nonceKey);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    proc.setProcId(currentProcId.longValue());<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span>    // Commit the transaction<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    store.insert(proc, null);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    if (LOG.isDebugEnabled()) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      LOG.debug("Stored " + proc);<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>    // Add the procedure to the executor<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    return pushProcedure(proc);<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>  /**<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * Add a set of new root-procedure to the executor.<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * @param procs the new procedures to execute.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   */<a name="line.800"></a>
-<span class="sourceLineNo">801</span>  // TODO: Do we need to take nonces here?<a name="line.801"></a>
-<span class="sourceLineNo">802</span>  public void submitProcedures(final Procedure[] procs) {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.804"></a>
-<span class="sourceLineNo">805</span><a name="line.805"></a>
-<span class="sourceLineNo">806</span>    // Prepare procedure<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.807"></a>
-<span class="sourceLineNo">808</span>      prepareProcedure(procs[i]).setProcId(nextProcId());<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    }<a name="line.809"></a>
-<span class="sourceLineNo">810</span><a name="line.810"></a>
-<span class="sourceLineNo">811</span>    // Commit the transaction<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    store.insert(procs);<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    if (LOG.isDebugEnabled()) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>      LOG.debug("Stored " + Arrays.toString(procs));<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>    // Add the procedure to the executor<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.818"></a>
-<span class="sourceLineNo">819</span>      pushProcedure(procs[i]);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    }<a name="line.820"></a>
-<span class="sourceLineNo">821</span>  }<a name="line.821"></a>
-<span class="sourceLineNo">822</span><a name="line.822"></a>
-<span class="sourceLineNo">823</span>  private Procedure prepareProcedure(final Procedure proc) {<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    Preconditions.checkArgument(!proc.hasParent(), "unexpected parent", proc);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    if (this.checkOwnerSet) {<a name="line.827"></a>
-<span class="sourceLineNo">828</span>      Preconditions.checkArgument(proc.hasOwner(), "missing owner");<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    }<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    return proc;<a name="line.830"></a>
-<span class="sourceLineNo">831</span>  }<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span>  private long pushProcedure(final Procedure proc) {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    final long currentProcId = proc.getProcId();<a name="line.834"></a>
-<span class="sourceLineNo">835</span><a name="line.835"></a>
-<span class="sourceLineNo">836</span>    // Create the rollback stack for the procedure<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    RootProcedureState stack = new RootProcedureState();<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    rollbackStack.put(currentProcId, stack);<a name="line.838"></a>
-<span class="sourceLineNo">839</span><a name="line.839"></a>
-<span class="sourceLineNo">840</span>    // Submit the new subprocedures<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    assert !procedures.containsKey(currentProcId);<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    procedures.put(currentProcId, proc);<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    sendProcedureAddedNotification(currentProcId);<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    scheduler.addBack(proc);<a name="line.844"></a>
-<span class="sourceLineNo">845</span>    return proc.getProcId();<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>  /**<a name="line.848"></a>
-<span class="sourceLineNo">849</span>   * Send an abort notification the specified procedure.<a name="line.849"></a>
-<span class="sourceLineNo">850</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.850"></a>
-<span class="sourceLineNo">851</span>   * @param procId the procedure to abort<a name="line.851"></a>
-<span class="sourceLineNo">852</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.852"></a>
-<span class="sourceLineNo">853</span>   */<a name="line.853"></a>
-<span class="sourceLineNo">854</span>  public boolean abort(final long procId) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    return abort(procId, true);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>  }<a name="line.856"></a>
-<span class="sourceLineNo">857</span><a name="line.857"></a>
-<span class="sourceLineNo">858</span>  /**<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * Send an abort notification the specified procedure.<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   * @param procId the procedure to abort<a name="line.861"></a>
-<span class="sourceLineNo">862</span>   * @param mayInterruptIfRunning if the proc completed at least one step, should it be aborted?<a name="line.862"></a>
-<span class="sourceLineNo">863</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.863"></a>
-<span class="sourceLineNo">864</span>   */<a name="line.864"></a>
-<span class="sourceLineNo">865</span>  public boolean abort(final long procId, final boolean mayInterruptIfRunning) {<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    final Procedure proc = procedures.get(procId);<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    if (proc != null) {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>      if (!mayInterruptIfRunning &amp;&amp; proc.wasExecuted()) {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        return false;<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      }<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      return proc.abort(getEnvironment());<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    }<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    return false;<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">772</span>    final Long currentProcId;<a name="line.772"></a>
+<span class="sourceLineNo">773</span>    if (nonceKey != null) {<a name="line.773"></a>
+<span class="sourceLineNo">774</span>      currentProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.774"></a>
+<span class="sourceLineNo">775</span>      Preconditions.checkArgument(currentProcId != null,<a name="line.775"></a>
+<span class="sourceLineNo">776</span>        "Expected nonceKey=" + nonceKey + " to be reserved, use registerNonce(); proc=" + proc);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    } else {<a name="line.777"></a>
+<span class="sourceLineNo">778</span>      currentProcId = nextProcId();<a name="line.778"></a>
+<span class="sourceLineNo">779</span>    }<a name="line.779"></a>
+<span class="sourceLineNo">780</span><a name="line.780"></a>
+<span class="sourceLineNo">781</span>    // Initialize the procedure<a name="line.781"></a>
+<span class="sourceLineNo">782</span>    proc.setNonceKey(nonceKey);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>    proc.setProcId(currentProcId.longValue());<a name="line.783"></a>
+<span class="sourceLineNo">784</span><a name="line.784"></a>
+<span class="sourceLineNo">785</span>    // Commit the transaction<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    store.insert(proc, null);<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    if (LOG.isDebugEnabled()) {<a name="line.787"></a>
+<span class="sourceLineNo">788</span>      LOG.debug("Stored " + proc);<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
+<span class="sourceLineNo">790</span><a name="line.790"></a>
+<span class="sourceLineNo">791</span>    // Add the procedure to the executor<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    return pushProcedure(proc);<a name="line.792"></a>
+<span class="sourceLineNo">793</span>  }<a name="line.793"></a>
+<span class="sourceLineNo">794</span><a name="line.794"></a>
+<span class="sourceLineNo">795</span>  /**<a name="line.795"></a>
+<span class="sourceLineNo">796</span>   * Add a set of new root-procedure to the executor.<a name="line.796"></a>
+<span class="sourceLineNo">797</span>   * @param procs the new procedures to execute.<a name="line.797"></a>
+<span class="sourceLineNo">798</span>   */<a name="line.798"></a>
+<span class="sourceLineNo">799</span>  // TODO: Do we need to take nonces here?<a name="line.799"></a>
+<span class="sourceLineNo">800</span>  public void submitProcedures(final Procedure[] procs) {<a name="line.800"></a>
+<span class="sourceLineNo">801</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.801"></a>
+<span class="sourceLineNo">802</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.802"></a>
+<span class="sourceLineNo">803</span><a name="line.803"></a>
+<span class="sourceLineNo">804</span>    // Prepare procedure<a name="line.804"></a>
+<span class="sourceLineNo">805</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.805"></a>
+<span class="sourceLineNo">806</span>      prepareProcedure(procs[i]).setProcId(nextProcId());<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    }<a name="line.807"></a>
+<span class="sourceLineNo">808</span><a name="line.808"></a>
+<span class="sourceLineNo">809</span>    // Commit the transaction<a name="line.809"></a>
+<span class="sourceLineNo">810</span>    store.insert(procs);<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    if (LOG.isDebugEnabled()) {<a name="line.811"></a>
+<span class="sourceLineNo">812</span>      LOG.debug("Stored " + Arrays.toString(procs));<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    }<a name="line.813"></a>
+<span class="sourceLineNo">814</span><a name="line.814"></a>
+<span class="sourceLineNo">815</span>    // Add the procedure to the executor<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.816"></a>
+<span class="sourceLineNo">817</span>      pushProcedure(procs[i]);<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
+<span class="sourceLineNo">819</span>  }<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span>  private Procedure prepareProcedure(final Procedure proc) {<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.822"></a>
+<span class="sourceLineNo">823</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.823"></a>
+<span class="sourceLineNo">824</span>    Preconditions.checkArgument(!proc.hasParent(), "unexpected parent", proc);<a name="line.824"></a>
+<span class="sourceLineNo">825</span>    if (this.checkOwnerSet) {<a name="line.825"></a>
+<span class="sourceLineNo">826</span>      Preconditions.checkArgument(proc.hasOwner(), "missing owner");<a name="line.826"></a>
+<span class="sourceLineNo">827</span>    }<a name="line.827"></a>
+<span class="sourceLineNo">828</span>    return proc;<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>  private long pushProcedure(final Procedure proc) {<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    final long currentProcId = proc.getProcId();<a name="line.832"></a>
+<span class="sourceLineNo">833</span><a name="line.833"></a>
+<span class="sourceLineNo">834</span>    // Create the rollback stack for the procedure<a name="line.834"></a>
+<span class="sourceLineNo">835</span>    RootProcedureState stack = new RootProcedureState();<a name="line.835"></a>
+<span class="sourceLineNo">836</span>    rollbackStack.put(currentProcId, stack);<a name="line.836"></a>
+<span class="sourceLineNo">837</span><a name="line.837"></a>
+<span class="sourceLineNo">838</span>    // Submit the new subprocedures<a name="line.838"></a>
+<span class="sourceLineNo">839</span>    assert !procedures.containsKey(currentProcId);<a name="line.839"></a>
+<span class="sourceLineNo">840</span>    procedures.put(currentProcId, proc);<a 

<TRUNCATED>

[22/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html
index 4da9cb6..b119ecc 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html
@@ -126,7 +126,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1717">ProcedureExecutor.StoppableThread</a>
+<pre>private abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1715">ProcedureExecutor.StoppableThread</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a></pre>
 </li>
 </ul>
@@ -237,7 +237,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>StoppableThread</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html#line.1718">StoppableThread</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html?is-external=true" title="class or interface in java.lang">ThreadGroup</a>&nbsp;group,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html#line.1716">StoppableThread</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html?is-external=true" title="class or interface in java.lang">ThreadGroup</a>&nbsp;group,
                        <a href="http://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>
@@ -255,7 +255,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>sendStopSignal</h4>
-<pre>public abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html#line.1722">sendStopSignal</a>()</pre>
+<pre>public abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html#line.1720">sendStopSignal</a>()</pre>
 </li>
 </ul>
 <a name="awaitTermination--">
@@ -264,7 +264,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>awaitTermination</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html#line.1724">awaitTermination</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html#line.1722">awaitTermination</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html
index dba60c3..0bb19cf 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1609">ProcedureExecutor.TimeoutExecutorThread</a>
+<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1607">ProcedureExecutor.TimeoutExecutorThread</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.StoppableThread</a></pre>
 </li>
 </ul>
@@ -283,7 +283,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockListLast">
 <li class="blockList">
 <h4>queue</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/DelayQueue.html?is-external=true" title="class or interface in java.util.concurrent">DelayQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/util/DelayedUtil.DelayedWithTimeout.html" title="interface in org.apache.hadoop.hbase.procedure2.util">DelayedUtil.DelayedWithTimeout</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1610">queue</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/DelayQueue.html?is-external=true" title="class or interface in java.util.concurrent">DelayQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/util/DelayedUtil.DelayedWithTimeout.html" title="interface in org.apache.hadoop.hbase.procedure2.util">DelayedUtil.DelayedWithTimeout</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1608">queue</a></pre>
 </li>
 </ul>
 </li>
@@ -300,7 +300,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TimeoutExecutorThread</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1612">TimeoutExecutorThread</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html?is-external=true" title="class or interface in java.lang">ThreadGroup</a>&nbsp;group)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1610">TimeoutExecutorThread</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html?is-external=true" title="class or interface in java.lang">ThreadGroup</a>&nbsp;group)</pre>
 </li>
 </ul>
 </li>
@@ -317,7 +317,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockList">
 <li class="blockList">
 <h4>sendStopSignal</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1617">sendStopSignal</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1615">sendStopSignal</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html#sendStopSignal--">sendStopSignal</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.StoppableThread</a></code></dd>
@@ -330,7 +330,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1622">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1620">run</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true#run--" title="class or interface in java.lang">run</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>
@@ -345,7 +345,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockList">
 <li class="blockList">
 <h4>add</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1647">add</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.InlineChore</a>&nbsp;chore)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1645">add</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.InlineChore</a>&nbsp;chore)</pre>
 </li>
 </ul>
 <a name="add-org.apache.hadoop.hbase.procedure2.Procedure-">
@@ -354,7 +354,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockList">
 <li class="blockList">
 <h4>add</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1652">add</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;procedure)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1650">add</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;procedure)</pre>
 </li>
 </ul>
 <a name="remove-org.apache.hadoop.hbase.procedure2.Procedure-">
@@ -363,7 +363,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockList">
 <li class="blockList">
 <h4>remove</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1657">remove</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;procedure)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1655">remove</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;procedure)</pre>
 </li>
 </ul>
 <a name="execInlineChore-org.apache.hadoop.hbase.procedure2.ProcedureExecutor.InlineChore-">
@@ -372,7 +372,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockList">
 <li class="blockList">
 <h4>execInlineChore</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1661">execInlineChore</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.InlineChore</a>&nbsp;chore)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1659">execInlineChore</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.InlineChore</a>&nbsp;chore)</pre>
 </li>
 </ul>
 <a name="execDelayedProcedure-org.apache.hadoop.hbase.procedure2.ProcedureExecutor.DelayedProcedure-">
@@ -381,7 +381,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockList">
 <li class="blockList">
 <h4>execDelayedProcedure</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1666">execDelayedProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.DelayedProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.DelayedProcedure</a>&nbsp;delayed)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1664">execDelayedProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.DelayedProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.DelayedProcedure</a>&nbsp;delayed)</pre>
 </li>
 </ul>
 <a name="executeInMemoryChore-org.apache.hadoop.hbase.procedure2.ProcedureInMemoryChore-">
@@ -390,7 +390,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockList">
 <li class="blockList">
 <h4>executeInMemoryChore</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1684">executeInMemoryChore</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureInMemoryChore.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureInMemoryChore</a>&nbsp;chore)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1682">executeInMemoryChore</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureInMemoryChore.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureInMemoryChore</a>&nbsp;chore)</pre>
 </li>
 </ul>
 <a name="executeTimedoutProcedure-org.apache.hadoop.hbase.procedure2.Procedure-">
@@ -399,7 +399,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockListLast">
 <li class="blockList">
 <h4>executeTimedoutProcedure</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1697">executeTimedoutProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1695">executeTimedoutProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
index 9150a67..2f28a93 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1767">ProcedureExecutor.WorkerMonitor</a>
+<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1765">ProcedureExecutor.WorkerMonitor</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.InlineChore</a></pre>
 </li>
 </ul>
@@ -277,7 +277,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockList">
 <li class="blockList">
 <h4>WORKER_MONITOR_INTERVAL_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1768">WORKER_MONITOR_INTERVAL_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1766">WORKER_MONITOR_INTERVAL_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.WorkerMonitor.WORKER_MONITOR_INTERVAL_CONF_KEY">Constant Field Values</a></dd>
@@ -290,7 +290,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_WORKER_MONITOR_INTERVAL</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1770">DEFAULT_WORKER_MONITOR_INTERVAL</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1768">DEFAULT_WORKER_MONITOR_INTERVAL</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.WorkerMonitor.DEFAULT_WORKER_MONITOR_INTERVAL">Constant Field Values</a></dd>
@@ -303,7 +303,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockList">
 <li class="blockList">
 <h4>WORKER_STUCK_THRESHOLD_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1772">WORKER_STUCK_THRESHOLD_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1770">WORKER_STUCK_THRESHOLD_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.WorkerMonitor.WORKER_STUCK_THRESHOLD_CONF_KEY">Constant Field Values</a></dd>
@@ -316,7 +316,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_WORKER_STUCK_THRESHOLD</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1774">DEFAULT_WORKER_STUCK_THRESHOLD</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1772">DEFAULT_WORKER_STUCK_THRESHOLD</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.WorkerMonitor.DEFAULT_WORKER_STUCK_THRESHOLD">Constant Field Values</a></dd>
@@ -329,7 +329,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockList">
 <li class="blockList">
 <h4>WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1776">WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1774">WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.WorkerMonitor.WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY">Constant Field Values</a></dd>
@@ -342,7 +342,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_WORKER_ADD_STUCK_PERCENTAGE</h4>
-<pre>private static final&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1778">DEFAULT_WORKER_ADD_STUCK_PERCENTAGE</a></pre>
+<pre>private static final&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1776">DEFAULT_WORKER_ADD_STUCK_PERCENTAGE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.WorkerMonitor.DEFAULT_WORKER_ADD_STUCK_PERCENTAGE">Constant Field Values</a></dd>
@@ -355,7 +355,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockList">
 <li class="blockList">
 <h4>addWorkerStuckPercentage</h4>
-<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1780">addWorkerStuckPercentage</a></pre>
+<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1778">addWorkerStuckPercentage</a></pre>
 </li>
 </ul>
 <a name="timeoutInterval">
@@ -364,7 +364,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockList">
 <li class="blockList">
 <h4>timeoutInterval</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1781">timeoutInterval</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1779">timeoutInterval</a></pre>
 </li>
 </ul>
 <a name="stuckThreshold">
@@ -373,7 +373,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockListLast">
 <li class="blockList">
 <h4>stuckThreshold</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1782">stuckThreshold</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1780">stuckThreshold</a></pre>
 </li>
 </ul>
 </li>
@@ -390,7 +390,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WorkerMonitor</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1784">WorkerMonitor</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1782">WorkerMonitor</a>()</pre>
 </li>
 </ul>
 </li>
@@ -407,7 +407,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1789">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1787">run</a>()</pre>
 </li>
 </ul>
 <a name="checkForStuckWorkers--">
@@ -416,7 +416,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockList">
 <li class="blockList">
 <h4>checkForStuckWorkers</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1797">checkForStuckWorkers</a>()</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1795">checkForStuckWorkers</a>()</pre>
 </li>
 </ul>
 <a name="checkThreadCount-int-">
@@ -425,7 +425,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockList">
 <li class="blockList">
 <h4>checkThreadCount</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1813">checkThreadCount</a>(int&nbsp;stuckCount)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1811">checkThreadCount</a>(int&nbsp;stuckCount)</pre>
 </li>
 </ul>
 <a name="refreshConfig--">
@@ -434,7 +434,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshConfig</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1829">refreshConfig</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1827">refreshConfig</a>()</pre>
 </li>
 </ul>
 <a name="getTimeoutInterval--">
@@ -443,7 +443,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getTimeoutInterval</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1839">getTimeoutInterval</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1837">getTimeoutInterval</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html#getTimeoutInterval--">getTimeoutInterval</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.InlineChore</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
index 79a515a..779d23c 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1556">ProcedureExecutor.WorkerThread</a>
+<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1554">ProcedureExecutor.WorkerThread</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.StoppableThread</a></pre>
 </li>
 </ul>
@@ -263,7 +263,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockListLast">
 <li class="blockList">
 <h4>executionStartTime</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1557">executionStartTime</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1555">executionStartTime</a></pre>
 </li>
 </ul>
 </li>
@@ -280,7 +280,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WorkerThread</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1559">WorkerThread</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html?is-external=true" title="class or interface in java.lang">ThreadGroup</a>&nbsp;group)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1557">WorkerThread</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/ThreadGroup.html?is-external=true" title="class or interface in java.lang">ThreadGroup</a>&nbsp;group)</pre>
 </li>
 </ul>
 </li>
@@ -297,7 +297,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockList">
 <li class="blockList">
 <h4>sendStopSignal</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1564">sendStopSignal</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1562">sendStopSignal</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html#sendStopSignal--">sendStopSignal</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.StoppableThread</a></code></dd>
@@ -310,7 +310,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1569">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1567">run</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true#run--" title="class or interface in java.lang">run</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>
@@ -325,7 +325,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentRunTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1596">getCurrentRunTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1594">getCurrentRunTime</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the time since the current procedure is running</dd>
@@ -338,7 +338,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExec
 <ul class="blockListLast">
 <li class="blockList">
 <h4>keepAlive</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1600">keepAlive</a>(long&nbsp;lastUpdate)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1598">keepAlive</a>(long&nbsp;lastUpdate)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
index c1f1373..01d5913 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
@@ -996,7 +996,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>start</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.476">start</a>(int&nbsp;numThreads,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.474">start</a>(int&nbsp;numThreads,
                   boolean&nbsp;abortOnCorruption)
            throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Start the procedure executor.
@@ -1019,7 +1019,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.539">stop</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.537">stop</a>()</pre>
 </li>
 </ul>
 <a name="join--">
@@ -1028,7 +1028,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>join</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.550">join</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.548">join</a>()</pre>
 </li>
 </ul>
 <a name="refreshConfiguration-org.apache.hadoop.conf.Configuration-">
@@ -1037,7 +1037,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshConfiguration</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.582">refreshConfiguration</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.580">refreshConfiguration</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
 <a name="isRunning--">
@@ -1046,7 +1046,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isRunning</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.591">isRunning</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.589">isRunning</a>()</pre>
 </li>
 </ul>
 <a name="getWorkerThreadCount--">
@@ -1055,7 +1055,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getWorkerThreadCount</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.598">getWorkerThreadCount</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.596">getWorkerThreadCount</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the current number of worker threads.</dd>
@@ -1068,7 +1068,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getCorePoolSize</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.605">getCorePoolSize</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.603">getCorePoolSize</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the core pool size settings.</dd>
@@ -1081,7 +1081,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getActiveExecutorCount</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.609">getActiveExecutorCount</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.607">getActiveExecutorCount</a>()</pre>
 </li>
 </ul>
 <a name="getEnvironment--">
@@ -1090,7 +1090,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getEnvironment</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.613">getEnvironment</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html" title="type parameter in ProcedureExecutor">TEnvironment</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.611">getEnvironment</a>()</pre>
 </li>
 </ul>
 <a name="getStore--">
@@ -1099,7 +1099,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getStore</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.617">getStore</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.615">getStore</a>()</pre>
 </li>
 </ul>
 <a name="getScheduler--">
@@ -1108,7 +1108,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getScheduler</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureScheduler.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureScheduler</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.621">getScheduler</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureScheduler.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureScheduler</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.619">getScheduler</a>()</pre>
 </li>
 </ul>
 <a name="setKeepAliveTime-long-java.util.concurrent.TimeUnit-">
@@ -1117,7 +1117,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setKeepAliveTime</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.625">setKeepAliveTime</a>(long&nbsp;keepAliveTime,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.623">setKeepAliveTime</a>(long&nbsp;keepAliveTime,
                              <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;timeUnit)</pre>
 </li>
 </ul>
@@ -1127,7 +1127,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getKeepAliveTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.630">getKeepAliveTime</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;timeUnit)</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.628">getKeepAliveTime</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html?is-external=true" title="class or interface in java.util.concurrent">TimeUnit</a>&nbsp;timeUnit)</pre>
 </li>
 </ul>
 <a name="addChore-org.apache.hadoop.hbase.procedure2.ProcedureInMemoryChore-">
@@ -1136,7 +1136,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>addChore</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.642">addChore</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureInMemoryChore.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureInMemoryChore</a>&nbsp;chore)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.640">addChore</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureInMemoryChore.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureInMemoryChore</a>&nbsp;chore)</pre>
 <div class="block">Add a chore procedure to the executor</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1150,7 +1150,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>removeChore</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.652">removeChore</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureInMemoryChore.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureInMemoryChore</a>&nbsp;chore)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.650">removeChore</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureInMemoryChore.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureInMemoryChore</a>&nbsp;chore)</pre>
 <div class="block">Remove a chore procedure from the executor</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1166,7 +1166,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>createNonceKey</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.666">createNonceKey</a>(long&nbsp;nonceGroup,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.664">createNonceKey</a>(long&nbsp;nonceGroup,
                                long&nbsp;nonce)</pre>
 <div class="block">Create a NoneKey from the specified nonceGroup and nonce.</div>
 <dl>
@@ -1184,7 +1184,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>registerNonce</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.681">registerNonce</a>(<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;nonceKey)</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.679">registerNonce</a>(<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;nonceKey)</pre>
 <div class="block">Register a nonce for a procedure that is going to be submitted.
  A procId will be reserved and on submitProcedure(),
  the procedure with the specified nonce will take the reserved ProcId.
@@ -1205,7 +1205,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>unregisterNonceIfProcedureWasNotSubmitted</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.712">unregisterNonceIfProcedureWasNotSubmitted</a>(<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;nonceKey)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.710">unregisterNonceIfProcedureWasNotSubmitted</a>(<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;nonceKey)</pre>
 <div class="block">Remove the NonceKey if the procedure was not submitted to the executor.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1219,7 +1219,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setFailureResultForNonce</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.733">setFailureResultForNonce</a>(<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;nonceKey,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.731">setFailureResultForNonce</a>(<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;nonceKey,
                                      <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;procName,
                                      <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;procOwner,
                                      <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&nbsp;exception)</pre>
@@ -1240,7 +1240,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>submitProcedure</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.756">submitProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.754">submitProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
 <div class="block">Add a new root-procedure to the executor.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1256,7 +1256,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>submitProcedure</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.768">submitProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.766">submitProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
                             <a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>&nbsp;nonceKey)</pre>
 <div class="block">Add a new root-procedure to the executor.</div>
 <dl>
@@ -1274,7 +1274,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>submitProcedures</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.802">submitProcedures</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;procs)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.800">submitProcedures</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;procs)</pre>
 <div class="block">Add a set of new root-procedure to the executor.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1288,7 +1288,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareProcedure</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.823">prepareProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.821">prepareProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
 </li>
 </ul>
 <a name="pushProcedure-org.apache.hadoop.hbase.procedure2.Procedure-">
@@ -1297,7 +1297,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>pushProcedure</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.833">pushProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
+<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.831">pushProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
 </li>
 </ul>
 <a name="abort-long-">
@@ -1306,7 +1306,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.854">abort</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.852">abort</a>(long&nbsp;procId)</pre>
 <div class="block">Send an abort notification the specified procedure.
  Depending on the procedure implementation the abort can be considered or ignored.</div>
 <dl>
@@ -1323,7 +1323,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.865">abort</a>(long&nbsp;procId,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.863">abort</a>(long&nbsp;procId,
                      boolean&nbsp;mayInterruptIfRunning)</pre>
 <div class="block">Send an abort notification the specified procedure.
  Depending on the procedure implementation the abort can be considered or ignored.</div>
@@ -1342,7 +1342,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcedure</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.879">getProcedure</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.877">getProcedure</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="getProcedure-java.lang.Class-long-">
@@ -1351,7 +1351,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcedure</h4>
-<pre>public&nbsp;&lt;T extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&gt;&nbsp;T&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.883">getProcedure</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;clazz,
+<pre>public&nbsp;&lt;T extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&gt;&nbsp;T&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.881">getProcedure</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;clazz,
                                             long&nbsp;procId)</pre>
 </li>
 </ul>
@@ -1361,7 +1361,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getResult</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.891">getResult</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.889">getResult</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="isFinished-long-">
@@ -1370,7 +1370,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isFinished</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.902">isFinished</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.900">isFinished</a>(long&nbsp;procId)</pre>
 <div class="block">Return true if the procedure is finished.
  The state may be "completed successfully" or "failed and rolledback".
  Use getResult() to check the state or get the result data.</div>
@@ -1388,7 +1388,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isStarted</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.911">isStarted</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.909">isStarted</a>(long&nbsp;procId)</pre>
 <div class="block">Return true if the procedure is started.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1404,7 +1404,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>removeResult</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.923">removeResult</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.921">removeResult</a>(long&nbsp;procId)</pre>
 <div class="block">Mark the specified completed procedure, as ready to remove.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1418,7 +1418,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getResultOrProcedure</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.937">getResultOrProcedure</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.935">getResultOrProcedure</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="isProcedureOwner-long-org.apache.hadoop.hbase.security.User-">
@@ -1427,7 +1427,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isProcedureOwner</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.956">isProcedureOwner</a>(long&nbsp;procId,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.954">isProcedureOwner</a>(long&nbsp;procId,
                                 <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</pre>
 <div class="block">Check if the user is this procedure's owner</div>
 <dl>
@@ -1446,7 +1446,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>listProcedures</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.977">listProcedures</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ProcedureInfo.html" title="class in org.apache.hadoop.hbase">ProcedureInfo</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.975">listProcedures</a>()</pre>
 <div class="block">List procedures.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1460,7 +1460,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>registerListener</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.995">registerListener</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.ProcedureExecutorListener</a>&nbsp;listener)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.993">registerListener</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.ProcedureExecutorListener</a>&nbsp;listener)</pre>
 </li>
 </ul>
 <a name="unregisterListener-org.apache.hadoop.hbase.procedure2.ProcedureExecutor.ProcedureExecutorListener-">
@@ -1469,7 +1469,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>unregisterListener</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.999">unregisterListener</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.ProcedureExecutorListener</a>&nbsp;listener)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.997">unregisterListener</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureExecutor.ProcedureExecutorListener.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureExecutor.ProcedureExecutorListener</a>&nbsp;listener)</pre>
 </li>
 </ul>
 <a name="sendProcedureLoadedNotification-long-">
@@ -1478,7 +1478,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>sendProcedureLoadedNotification</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1003">sendProcedureLoadedNotification</a>(long&nbsp;procId)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1001">sendProcedureLoadedNotification</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="sendProcedureAddedNotification-long-">
@@ -1487,7 +1487,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>sendProcedureAddedNotification</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1015">sendProcedureAddedNotification</a>(long&nbsp;procId)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1013">sendProcedureAddedNotification</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="sendProcedureFinishedNotification-long-">
@@ -1496,7 +1496,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>sendProcedureFinishedNotification</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1027">sendProcedureFinishedNotification</a>(long&nbsp;procId)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1025">sendProcedureFinishedNotification</a>(long&nbsp;procId)</pre>
 </li>
 </ul>
 <a name="nextProcId--">
@@ -1505,7 +1505,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>nextProcId</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1042">nextProcId</a>()</pre>
+<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1040">nextProcId</a>()</pre>
 </li>
 </ul>
 <a name="getLastProcId--">
@@ -1514,7 +1514,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getLastProcId</h4>
-<pre>protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1059">getLastProcId</a>()</pre>
+<pre>protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1057">getLastProcId</a>()</pre>
 </li>
 </ul>
 <a name="getActiveProcIds--">
@@ -1523,7 +1523,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getActiveProcIds</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1064">getActiveProcIds</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1062">getActiveProcIds</a>()</pre>
 </li>
 </ul>
 <a name="getRootProcedureId-org.apache.hadoop.hbase.procedure2.Procedure-">
@@ -1532,7 +1532,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getRootProcedureId</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1068">getRootProcedureId</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1066">getRootProcedureId</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
 </li>
 </ul>
 <a name="executeProcedure-org.apache.hadoop.hbase.procedure2.Procedure-">
@@ -1541,7 +1541,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>executeProcedure</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1075">executeProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1073">executeProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
 </li>
 </ul>
 <a name="acquireLock-org.apache.hadoop.hbase.procedure2.Procedure-">
@@ -1550,7 +1550,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>acquireLock</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1164">acquireLock</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1162">acquireLock</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
 </li>
 </ul>
 <a name="releaseLock-org.apache.hadoop.hbase.procedure2.Procedure-boolean-">
@@ -1559,7 +1559,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>releaseLock</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1175">releaseLock</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1173">releaseLock</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
                          boolean&nbsp;force)</pre>
 </li>
 </ul>
@@ -1569,7 +1569,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>executeRollback</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1189">executeRollback</a>(long&nbsp;rootProcId,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1187">executeRollback</a>(long&nbsp;rootProcId,
                                             <a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&nbsp;procStack)</pre>
 <div class="block">Execute the rollback of the full procedure stack.
  Once the procedure is rolledback, the root-procedure will be visible as
@@ -1582,7 +1582,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>executeRollback</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1255">executeRollback</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1253">executeRollback</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
 <div class="block">Execute the rollback of the procedure step.
  It updates the store with the new state (stack index)
  or will remove completly the procedure in case it is a child.</div>
@@ -1594,7 +1594,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>execProcedure</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1316">execProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&nbsp;procStack,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1314">execProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&nbsp;procStack,
                            <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;procedure)</pre>
 <div class="block">Executes the specified procedure
   - calls the doExecute() of the procedure
@@ -1619,7 +1619,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeChildren</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1405">initializeChildren</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&nbsp;procStack,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1403">initializeChildren</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&nbsp;procStack,
                                        <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;procedure,
                                        <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</pre>
 </li>
@@ -1630,7 +1630,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>submitChildrenProcedures</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1441">submitChildrenProcedures</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1439">submitChildrenProcedures</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</pre>
 </li>
 </ul>
 <a name="countDownChildren-org.apache.hadoop.hbase.procedure2.RootProcedureState-org.apache.hadoop.hbase.procedure2.Procedure-">
@@ -1639,7 +1639,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>countDownChildren</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1450">countDownChildren</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&nbsp;procStack,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1448">countDownChildren</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&nbsp;procStack,
                                <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;procedure)</pre>
 </li>
 </ul>
@@ -1649,7 +1649,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>updateStoreOnExec</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1474">updateStoreOnExec</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&nbsp;procStack,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1472">updateStoreOnExec</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.html" title="class in org.apache.hadoop.hbase.procedure2">RootProcedureState</a>&nbsp;procStack,
                                <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;procedure,
                                <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;subprocs)</pre>
 </li>
@@ -1660,7 +1660,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>handleInterruptedException</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1502">handleInterruptedException</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1500">handleInterruptedException</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc,
                                         <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>&nbsp;e)</pre>
 </li>
 </ul>
@@ -1670,7 +1670,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>execCompletionCleanup</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1514">execCompletionCleanup</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1512">execCompletionCleanup</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
 </li>
 </ul>
 <a name="procedureFinished-org.apache.hadoop.hbase.procedure2.Procedure-">
@@ -1679,7 +1679,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>procedureFinished</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1527">procedureFinished</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1525">procedureFinished</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html b/devapidocs/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html
index eb9a012..0bb404e 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html
@@ -319,7 +319,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.htm
 <tr id="i12" class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#isYieldAfterExecutionStep-TEnvironment-">isYieldAfterExecutionStep</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="type parameter in StateMachineProcedure">TEnvironment</a>&nbsp;env)</code>
-<div class="block">By default, the executor will try ro run procedures start to finish.</div>
+<div class="block">By default, the executor will try to run procedures start to finish.</div>
 </td>
 </tr>
 <tr id="i13" class="rowColor">
@@ -754,9 +754,9 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.htm
 <h4>isYieldAfterExecutionStep</h4>
 <pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#line.214">isYieldAfterExecutionStep</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="type parameter in StateMachineProcedure">TEnvironment</a>&nbsp;env)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isYieldAfterExecutionStep-TEnvironment-">Procedure</a></code></span></div>
-<div class="block">By default, the executor will try ro run procedures start to finish.
+<div class="block">By default, the executor will try to run procedures start to finish.
  Return true to make the executor yield between each execution step to
- give other procedures time to run their steps.</div>
+ give other procedures a chance to run.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isYieldAfterExecutionStep-TEnvironment-">isYieldAfterExecutionStep</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="type parameter in StateMachineProcedure">TEnvironment</a>&gt;</code></dd>


[10/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
index 35cebd9..b6b4cb6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html
@@ -321,7 +321,7 @@
 <span class="sourceLineNo">313</span>      final NonceKey nonceKey;<a name="line.313"></a>
 <span class="sourceLineNo">314</span>      final long procId;<a name="line.314"></a>
 <span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>      if (procIter.isNextCompleted()) {<a name="line.316"></a>
+<span class="sourceLineNo">316</span>      if (procIter.isNextFinished()) {<a name="line.316"></a>
 <span class="sourceLineNo">317</span>        ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.317"></a>
 <span class="sourceLineNo">318</span>        nonceKey = proc.getNonceKey();<a name="line.318"></a>
 <span class="sourceLineNo">319</span>        procId = proc.getProcId();<a name="line.319"></a>
@@ -359,7 +359,7 @@
 <span class="sourceLineNo">351</span>    HashSet&lt;Procedure&gt; waitingSet = null;<a name="line.351"></a>
 <span class="sourceLineNo">352</span>    procIter.reset();<a name="line.352"></a>
 <span class="sourceLineNo">353</span>    while (procIter.hasNext()) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (procIter.isNextCompleted()) {<a name="line.354"></a>
+<span class="sourceLineNo">354</span>      if (procIter.isNextFinished()) {<a name="line.354"></a>
 <span class="sourceLineNo">355</span>        procIter.skipNext();<a name="line.355"></a>
 <span class="sourceLineNo">356</span>        continue;<a name="line.356"></a>
 <span class="sourceLineNo">357</span>      }<a name="line.357"></a>
@@ -405,1450 +405,1448 @@
 <span class="sourceLineNo">397</span>          }<a name="line.397"></a>
 <span class="sourceLineNo">398</span>          waitingSet.add(proc);<a name="line.398"></a>
 <span class="sourceLineNo">399</span>          break;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        case FINISHED:<a name="line.400"></a>
-<span class="sourceLineNo">401</span>          if (proc.hasException()) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>            // add the proc to the scheduler to perform the rollback<a name="line.402"></a>
-<span class="sourceLineNo">403</span>            scheduler.addBack(proc);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          }<a name="line.404"></a>
-<span class="sourceLineNo">405</span>          break;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        case ROLLEDBACK:<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        case INITIALIZING:<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          LOG.error(msg);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          throw new UnsupportedOperationException(msg);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        default:<a name="line.411"></a>
-<span class="sourceLineNo">412</span>          break;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      }<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    // 3. Validate the stacks<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    int corruptedCount = 0;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    while (itStack.hasNext()) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      RootProcedureState procStack = entry.getValue();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      if (procStack.isValid()) continue;<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>      for (Procedure proc: procStack.getSubproceduresStack()) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        LOG.error("Corrupted " + proc);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        procedures.remove(proc.getProcId());<a name="line.426"></a>
-<span class="sourceLineNo">427</span>        runnableList.remove(proc);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        corruptedCount++;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      }<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      itStack.remove();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    // 4. Push the procedures to the timeout executor<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    if (waitingSet != null &amp;&amp; !waitingSet.isEmpty()) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      for (Procedure proc: waitingSet) {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        proc.afterReplay(getEnvironment());<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        timeoutExecutor.add(proc);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      }<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    }<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>    // 5. Push the procedure to the scheduler<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    if (!runnableList.isEmpty()) {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      // some procedure may be started way before this stuff.<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        Procedure proc = runnableList.get(i);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        proc.afterReplay(getEnvironment());<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        if (!proc.hasParent()) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        }<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        if (proc.wasExecuted()) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>          scheduler.addFront(proc);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        } else {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          // if it was not in execution, it can wait.<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          scheduler.addBack(proc);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        }<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    }<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>   * Start the procedure executor.<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   *<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * @param numThreads number of threads available for procedure execution.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   */<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    if (running.getAndSet(true)) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      LOG.warn("Already running");<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      return;<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>    // We have numThreads executor + one timer thread used for timing out<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    // procedures and triggering periodic procedures.<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    this.corePoolSize = numThreads;<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    LOG.info("Starting executor worker threads=" + corePoolSize);<a name="line.485"></a>
-<span class="sourceLineNo">486</span><a name="line.486"></a>
-<span class="sourceLineNo">487</span>    // Create the Thread Group for the executors<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    threadGroup = new ThreadGroup("ProcedureExecutor");<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>    // Create the timeout executor<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    timeoutExecutor = new TimeoutExecutorThread(threadGroup);<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>    // Create the workers<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    workerId.set(0);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    workerThreads = new CopyOnWriteArrayList&lt;&gt;();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    for (int i = 0; i &lt; corePoolSize; ++i) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      workerThreads.add(new WorkerThread(threadGroup));<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
+<span class="sourceLineNo">400</span>        case FAILED:<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          // add the proc to the scheduler to perform the rollback<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          scheduler.addBack(proc);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          break;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        case ROLLEDBACK:<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        case INITIALIZING:<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.406"></a>
+<span class="sourceLineNo">407</span>          LOG.error(msg);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>          throw new UnsupportedOperationException(msg);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        default:<a name="line.409"></a>
+<span class="sourceLineNo">410</span>          break;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    // 3. Validate the stacks<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    int corruptedCount = 0;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    while (itStack.hasNext()) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      RootProcedureState procStack = entry.getValue();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      if (procStack.isValid()) continue;<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span>      for (Procedure proc: procStack.getSubproceduresStack()) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        LOG.error("Corrupted " + proc);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        procedures.remove(proc.getProcId());<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        runnableList.remove(proc);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        corruptedCount++;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>      }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      itStack.remove();<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    }<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<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>    // 4. Push the procedures to the timeout executor<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    if (waitingSet != null &amp;&amp; !waitingSet.isEmpty()) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      for (Procedure proc: waitingSet) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        proc.afterReplay(getEnvironment());<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        timeoutExecutor.add(proc);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      }<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span>    // 5. Push the procedure to the scheduler<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    if (!runnableList.isEmpty()) {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      // some procedure may be started way before this stuff.<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>        Procedure proc = runnableList.get(i);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        proc.afterReplay(getEnvironment());<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        if (!proc.hasParent()) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        }<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        if (proc.wasExecuted()) {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          scheduler.addFront(proc);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>        } else {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          // if it was not in execution, it can wait.<a name="line.457"></a>
+<span class="sourceLineNo">458</span>          scheduler.addBack(proc);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      }<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  }<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>   * Start the procedure executor.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   *<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @param numThreads number of threads available for procedure execution.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   */<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    if (running.getAndSet(true)) {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      LOG.warn("Already running");<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      return;<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span><a name="line.479"></a>
+<span class="sourceLineNo">480</span>    // We have numThreads executor + one timer thread used for timing out<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    // procedures and triggering periodic procedures.<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    this.corePoolSize = numThreads;<a name="line.482"></a>
+<span class="sourceLineNo">483</span>    LOG.info("Starting executor worker threads=" + corePoolSize);<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // Create the Thread Group for the executors<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    threadGroup = new ThreadGroup("ProcedureExecutor");<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>    // Create the timeout executor<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    timeoutExecutor = new TimeoutExecutorThread(threadGroup);<a name="line.489"></a>
+<span class="sourceLineNo">490</span><a name="line.490"></a>
+<span class="sourceLineNo">491</span>    // Create the workers<a name="line.491"></a>
+<span class="sourceLineNo">492</span>    workerId.set(0);<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    workerThreads = new CopyOnWriteArrayList&lt;&gt;();<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    for (int i = 0; i &lt; corePoolSize; ++i) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      workerThreads.add(new WorkerThread(threadGroup));<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    }<a name="line.496"></a>
+<span class="sourceLineNo">497</span><a name="line.497"></a>
+<span class="sourceLineNo">498</span>    long st, et;<a name="line.498"></a>
 <span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>    long st, et;<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>    // Acquire the store lease.<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    store.recoverLease();<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    LOG.info(String.format("Recover store (%s) lease: %s",<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.507"></a>
-<span class="sourceLineNo">508</span><a name="line.508"></a>
-<span class="sourceLineNo">509</span>    // start the procedure scheduler<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    scheduler.start();<a name="line.510"></a>
-<span class="sourceLineNo">511</span><a name="line.511"></a>
-<span class="sourceLineNo">512</span>    // TODO: Split in two steps.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    // The first one will make sure that we have the latest id,<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    // so we can start the threads and accept new procedures.<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    // The second step will do the actual load of old procedures.<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    load(abortOnCorruption);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    LOG.info(String.format("Load store (%s): %s",<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (LOG.isTraceEnabled()) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.trace("Start workers " + workerThreads.size());<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    timeoutExecutor.start();<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    for (WorkerThread worker: workerThreads) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      worker.start();<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    // Internal chores<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    timeoutExecutor.add(new WorkerMonitor());<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>    // Add completed cleaner chore<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    addChore(new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  public void stop() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    if (!running.getAndSet(false)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>      return;<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>    LOG.info("Stopping");<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    scheduler.stop();<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    timeoutExecutor.sendStopSignal();<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  @VisibleForTesting<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  public void join() {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    assert !isRunning() : "expected not running";<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>    // stop the timeout executor<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    timeoutExecutor.awaitTermination();<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    timeoutExecutor = null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>    // stop the worker threads<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    for (WorkerThread worker: workerThreads) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      worker.awaitTermination();<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    workerThreads = null;<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    // Destroy the Thread Group for the executors<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    try {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      threadGroup.destroy();<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    } catch (IllegalThreadStateException e) {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      LOG.error("Thread group " + threadGroup + " contains running threads");<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      threadGroup.list();<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    } finally {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      threadGroup = null;<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>    // reset the in-memory state for testing<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    completed.clear();<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    rollbackStack.clear();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    procedures.clear();<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    nonceKeysToProcIdsMap.clear();<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    scheduler.clear();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    lastProcId.set(-1);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  }<a name="line.580"></a>
-<span class="sourceLineNo">581</span><a name="line.581"></a>
-<span class="sourceLineNo">582</span>  public void refreshConfiguration(final Configuration conf) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    this.conf = conf;<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  }<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
+<span class="sourceLineNo">500</span>    // Acquire the store lease.<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    store.recoverLease();<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    LOG.info(String.format("Recover store (%s) lease: %s",<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.505"></a>
+<span class="sourceLineNo">506</span><a name="line.506"></a>
+<span class="sourceLineNo">507</span>    // start the procedure scheduler<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    scheduler.start();<a name="line.508"></a>
+<span class="sourceLineNo">509</span><a name="line.509"></a>
+<span class="sourceLineNo">510</span>    // TODO: Split in two steps.<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    // The first one will make sure that we have the latest id,<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    // so we can start the threads and accept new procedures.<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    // The second step will do the actual load of old procedures.<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    load(abortOnCorruption);<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.517"></a>
+<span class="sourceLineNo">518</span>    LOG.info(String.format("Load store (%s): %s",<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    if (LOG.isTraceEnabled()) {<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      LOG.trace("Start workers " + workerThreads.size());<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    timeoutExecutor.start();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    for (WorkerThread worker: workerThreads) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      worker.start();<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
+<span class="sourceLineNo">529</span><a name="line.529"></a>
+<span class="sourceLineNo">530</span>    // Internal chores<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    timeoutExecutor.add(new WorkerMonitor());<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    // Add completed cleaner chore<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    addChore(new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.534"></a>
+<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>  public void stop() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    if (!running.getAndSet(false)) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      return;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    }<a name="line.540"></a>
+<span class="sourceLineNo">541</span><a name="line.541"></a>
+<span class="sourceLineNo">542</span>    LOG.info("Stopping");<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    scheduler.stop();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    timeoutExecutor.sendStopSignal();<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>  @VisibleForTesting<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  public void join() {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    assert !isRunning() : "expected not running";<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span>    // stop the timeout executor<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    timeoutExecutor.awaitTermination();<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    timeoutExecutor = null;<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    // stop the worker threads<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    for (WorkerThread worker: workerThreads) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      worker.awaitTermination();<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    workerThreads = null;<a name="line.559"></a>
+<span class="sourceLineNo">560</span><a name="line.560"></a>
+<span class="sourceLineNo">561</span>    // Destroy the Thread Group for the executors<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    try {<a name="line.562"></a>
+<span class="sourceLineNo">563</span>      threadGroup.destroy();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    } catch (IllegalThreadStateException e) {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      LOG.error("Thread group " + threadGroup + " contains running threads");<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      threadGroup.list();<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    } finally {<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      threadGroup = null;<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
+<span class="sourceLineNo">570</span><a name="line.570"></a>
+<span class="sourceLineNo">571</span>    // reset the in-memory state for testing<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    completed.clear();<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    rollbackStack.clear();<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    procedures.clear();<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    nonceKeysToProcIdsMap.clear();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    scheduler.clear();<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    lastProcId.set(-1);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
+<span class="sourceLineNo">579</span><a name="line.579"></a>
+<span class="sourceLineNo">580</span>  public void refreshConfiguration(final Configuration conf) {<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    this.conf = conf;<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.582"></a>
+<span class="sourceLineNo">583</span>        DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<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>  // ==========================================================================<a name="line.586"></a>
+<span class="sourceLineNo">587</span>  //  Accessors<a name="line.587"></a>
 <span class="sourceLineNo">588</span>  // ==========================================================================<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  //  Accessors<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  // ==========================================================================<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  public boolean isRunning() {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return running.get();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return the current number of worker threads.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   */<a name="line.597"></a>
-<span class="sourceLineNo">598</span>  public int getWorkerThreadCount() {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    return workerThreads.size();<a name="line.599"></a>
-<span class="sourceLineNo">600</span>  }<a name="line.600"></a>
-<span class="sourceLineNo">601</span><a name="line.601"></a>
-<span class="sourceLineNo">602</span>  /**<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   * @return the core pool size settings.<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   */<a name="line.604"></a>
-<span class="sourceLineNo">605</span>  public int getCorePoolSize() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    return corePoolSize;<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>  public int getActiveExecutorCount() {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    return activeExecutorCount.get();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  public TEnvironment getEnvironment() {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    return this.environment;<a name="line.614"></a>
-<span class="sourceLineNo">615</span>  }<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>  public ProcedureStore getStore() {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    return this.store;<a name="line.618"></a>
-<span class="sourceLineNo">619</span>  }<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>  protected ProcedureScheduler getScheduler() {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    return scheduler;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>  }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>  public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    this.scheduler.signalAll();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>  }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>  public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<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">589</span>  public boolean isRunning() {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    return running.get();<a name="line.590"></a>
+<span class="sourceLineNo">591</span>  }<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span>  /**<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @return the current number of worker threads.<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
+<span class="sourceLineNo">596</span>  public int getWorkerThreadCount() {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    return workerThreads.size();<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  }<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span>  /**<a name="line.600"></a>
+<span class="sourceLineNo">601</span>   * @return the core pool size settings.<a name="line.601"></a>
+<span class="sourceLineNo">602</span>   */<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  public int getCorePoolSize() {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    return corePoolSize;<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  }<a name="line.605"></a>
+<span class="sourceLineNo">606</span><a name="line.606"></a>
+<span class="sourceLineNo">607</span>  public int getActiveExecutorCount() {<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    return activeExecutorCount.get();<a name="line.608"></a>
+<span class="sourceLineNo">609</span>  }<a name="line.609"></a>
+<span class="sourceLineNo">610</span><a name="line.610"></a>
+<span class="sourceLineNo">611</span>  public TEnvironment getEnvironment() {<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    return this.environment;<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>  public ProcedureStore getStore() {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    return this.store;<a name="line.616"></a>
+<span class="sourceLineNo">617</span>  }<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>  protected ProcedureScheduler getScheduler() {<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    return scheduler;<a name="line.620"></a>
+<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>  public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    this.scheduler.signalAll();<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>  public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
+<span class="sourceLineNo">631</span><a name="line.631"></a>
+<span class="sourceLineNo">632</span>  // ==========================================================================<a name="line.632"></a>
+<span class="sourceLineNo">633</span>  //  Submit/Remove Chores<a name="line.633"></a>
 <span class="sourceLineNo">634</span>  // ==========================================================================<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  //  Submit/Remove Chores<a name="line.635"></a>
-<span class="sourceLineNo">636</span>  // ==========================================================================<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span>  /**<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * Add a chore procedure to the executor<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   * @param chore the chore to add<a name="line.640"></a>
-<span class="sourceLineNo">641</span>   */<a name="line.641"></a>
-<span class="sourceLineNo">642</span>  public void addChore(final ProcedureInMemoryChore chore) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    timeoutExecutor.add(chore);<a name="line.644"></a>
-<span class="sourceLineNo">645</span>  }<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>  /**<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   * Remove a chore procedure from the executor<a name="line.648"></a>
-<span class="sourceLineNo">649</span>   * @param chore the chore to remove<a name="line.649"></a>
-<span class="sourceLineNo">650</span>   * @return whether the chore is removed, or it will be removed later<a name="line.650"></a>
-<span class="sourceLineNo">651</span>   */<a name="line.651"></a>
-<span class="sourceLineNo">652</span>  public boolean removeChore(final ProcedureInMemoryChore chore) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    chore.setState(ProcedureState.FINISHED);<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    return timeoutExecutor.remove(chore);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>  }<a name="line.655"></a>
-<span class="sourceLineNo">656</span><a name="line.656"></a>
+<span class="sourceLineNo">635</span><a name="line.635"></a>
+<span class="sourceLineNo">636</span>  /**<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   * Add a chore procedure to the executor<a name="line.637"></a>
+<span class="sourceLineNo">638</span>   * @param chore the chore to add<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   */<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  public void addChore(final ProcedureInMemoryChore chore) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    timeoutExecutor.add(chore);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>  }<a name="line.643"></a>
+<span class="sourceLineNo">644</span><a name="line.644"></a>
+<span class="sourceLineNo">645</span>  /**<a name="line.645"></a>
+<span class="sourceLineNo">646</span>   * Remove a chore procedure from the executor<a name="line.646"></a>
+<span class="sourceLineNo">647</span>   * @param chore the chore to remove<a name="line.647"></a>
+<span class="sourceLineNo">648</span>   * @return whether the chore is removed, or it will be removed later<a name="line.648"></a>
+<span class="sourceLineNo">649</span>   */<a name="line.649"></a>
+<span class="sourceLineNo">650</span>  public boolean removeChore(final ProcedureInMemoryChore chore) {<a name="line.650"></a>
+<span class="sourceLineNo">651</span>    chore.setState(ProcedureState.SUCCESS);<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    return timeoutExecutor.remove(chore);<a name="line.652"></a>
+<span class="sourceLineNo">653</span>  }<a name="line.653"></a>
+<span class="sourceLineNo">654</span><a name="line.654"></a>
+<span class="sourceLineNo">655</span>  // ==========================================================================<a name="line.655"></a>
+<span class="sourceLineNo">656</span>  //  Nonce Procedure helpers<a name="line.656"></a>
 <span class="sourceLineNo">657</span>  // ==========================================================================<a name="line.657"></a>
-<span class="sourceLineNo">658</span>  //  Nonce Procedure helpers<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  // ==========================================================================<a name="line.659"></a>
-<span class="sourceLineNo">660</span>  /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * @param nonceGroup<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * @param nonce<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * @return the generated NonceKey<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>  }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>  /**<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   * Register a nonce for a procedure that is going to be submitted.<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   * A procId will be reserved and on submitProcedure(),<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   * the procedure with the specified nonce will take the reserved ProcId.<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   * otherwise an invalid procId will be returned. and the caller should procede<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   * and submit the procedure.<a name="line.676"></a>
-<span class="sourceLineNo">677</span>   *<a name="line.677"></a>
-<span class="sourceLineNo">678</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.678"></a>
-<span class="sourceLineNo">679</span>   * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.679"></a>
-<span class="sourceLineNo">680</span>   */<a name="line.680"></a>
-<span class="sourceLineNo">681</span>  public long registerNonce(final NonceKey nonceKey) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    if (nonceKey == null) return -1;<a name="line.682"></a>
-<span class="sourceLineNo">683</span><a name="line.683"></a>
-<span class="sourceLineNo">684</span>    // check if we have already a Reserved ID for the nonce<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    if (oldProcId == null) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      // reserve a new Procedure ID, this will be associated with the nonce<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      // and the procedure submitted with the specified nonce will use this ID.<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      final long newProcId = nextProcId();<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.690"></a>
-<span class="sourceLineNo">691</span>      if (oldProcId == null) return -1;<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>    // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    // since the client expect the procedure to be submitted, spin here until it is.<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    while (isRunning() &amp;&amp;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>           !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &amp;&amp;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>           nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      if (traceEnabled) {<a name="line.700"></a>
-<span class="sourceLineNo">701</span>        LOG.trace("Waiting for procId=" + oldProcId.longValue() + " to be submitted");<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      }<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      Threads.sleep(100);<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    }<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    return oldProcId.longValue();<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  }<a name="line.706"></a>
-<span class="sourceLineNo">707</span><a name="line.707"></a>
-<span class="sourceLineNo">708</span>  /**<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    if (nonceKey == null) return;<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    if (procId == null) return;<a name="line.716"></a>
-<span class="sourceLineNo">717</span><a name="line.717"></a>
-<span class="sourceLineNo">718</span>    // if the procedure was not submitted, remove the nonce<a name="line.718"></a>
-<span class="sourceLineNo">719</span>    if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    }<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  }<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>  /**<a name="line.724"></a>
-<span class="sourceLineNo">725</span>   * If the failure failed before submitting it, we may want to give back the<a name="line.725"></a>
-<span class="sourceLineNo">726</span>   * same error to the requests with the same nonceKey.<a name="line.726"></a>
-<span class="sourceLineNo">727</span>   *<a name="line.727"></a>
-<span class="sourceLineNo">728</span>   * @param nonceKey A unique identifier for this operation from the client or process<a name="line.728"></a>
-<span class="sourceLineNo">729</span>   * @param procName name of the procedure, used to inform the user<a name="line.729"></a>
-<span class="sourceLineNo">730</span>   * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * @param exception the failure to report to the user<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   */<a name="line.732"></a>
-<span class="sourceLineNo">733</span>  public void setFailureResultForNonce(final NonceKey nonceKey, final String procName,<a name="line.733"></a>
-<span class="sourceLineNo">734</span>      final User procOwner, final IOException exception) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    if (nonceKey == null) return;<a name="line.735"></a>
-<span class="sourceLineNo">736</span><a name="line.736"></a>
-<span class="sourceLineNo">737</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    if (procId == null || completed.containsKey(procId)) return;<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>    final long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    final ProcedureInfo result = new ProcedureInfo(procId.longValue(),<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      procName, procOwner != null ? procOwner.getShortName() : null,<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      ProcedureUtil.convertToProcedureState(ProcedureState.ROLLEDBACK),<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      -1, nonceKey, exception, currentTime, currentTime, null);<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    completed.putIfAbsent(procId, result);<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
-<span class="sourceLineNo">747</span><a name="line.747"></a>
+<span class="sourceLineNo">658</span>  /**<a name="line.658"></a>
+<span class="sourceLineNo">659</span>   * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.659"></a>
+<span class="sourceLineNo">660</span>   * @param nonceGroup<a name="line.660"></a>
+<span class="sourceLineNo">661</span>   * @param nonce<a name="line.661"></a>
+<span class="sourceLineNo">662</span>   * @return the generated NonceKey<a name="line.662"></a>
+<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
+<span class="sourceLineNo">664</span>  public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.665"></a>
+<span class="sourceLineNo">666</span>  }<a name="line.666"></a>
+<span class="sourceLineNo">667</span><a name="line.667"></a>
+<span class="sourceLineNo">668</span>  /**<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * Register a nonce for a procedure that is going to be submitted.<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * A procId will be reserved and on submitProcedure(),<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   * the procedure with the specified nonce will take the reserved ProcId.<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   * otherwise an invalid procId will be returned. and the caller should procede<a name="line.673"></a>
+<span class="sourceLineNo">674</span>   * and submit the procedure.<a name="line.674"></a>
+<span class="sourceLineNo">675</span>   *<a name="line.675"></a>
+<span class="sourceLineNo">676</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.676"></a>
+<span class="sourceLineNo">677</span>   * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.677"></a>
+<span class="sourceLineNo">678</span>   */<a name="line.678"></a>
+<span class="sourceLineNo">679</span>  public long registerNonce(final NonceKey nonceKey) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span>    if (nonceKey == null) return -1;<a name="line.680"></a>
+<span class="sourceLineNo">681</span><a name="line.681"></a>
+<span class="sourceLineNo">682</span>    // check if we have already a Reserved ID for the nonce<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>    if (oldProcId == null) {<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      // reserve a new Procedure ID, this will be associated with the nonce<a name="line.685"></a>
+<span class="sourceLineNo">686</span>      // and the procedure submitted with the specified nonce will use this ID.<a name="line.686"></a>
+<span class="sourceLineNo">687</span>      final long newProcId = nextProcId();<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      if (oldProcId == null) return -1;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>    }<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span>    // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    // since the client expect the procedure to be submitted, spin here until it is.<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    while (isRunning() &amp;&amp;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>           !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &amp;&amp;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>           nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.697"></a>
+<span class="sourceLineNo">698</span>      if (traceEnabled) {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>        LOG.trace("Waiting for procId=" + oldProcId.longValue() + " to be submitted");<a name="line.699"></a>
+<span class="sourceLineNo">700</span>      }<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      Threads.sleep(100);<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    }<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    return oldProcId.longValue();<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>  /**<a name="line.706"></a>
+<span class="sourceLineNo">707</span>   * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.707"></a>
+<span class="sourceLineNo">708</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.708"></a>
+<span class="sourceLineNo">709</span>   */<a name="line.709"></a>
+<span class="sourceLineNo">710</span>  public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    if (nonceKey == null) return;<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.713"></a>
+<span class="sourceLineNo">714</span>    if (procId == null) return;<a name="line.714"></a>
+<span class="sourceLineNo">715</span><a name="line.715"></a>
+<span class="sourceLineNo">716</span>    // if the procedure was not submitted, remove the nonce<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    }<a name="line.719"></a>
+<span class="sourceLineNo">720</span>  }<a name="line.720"></a>
+<span class="sourceLineNo">721</span><a name="line.721"></a>
+<span class="sourceLineNo">722</span>  /**<a name="line.722"></a>
+<span class="sourceLineNo">723</span>   * If the failure failed before submitting it, we may want to give back the<a name="line.723"></a>
+<span class="sourceLineNo">724</span>   * same error to the requests with the same nonceKey.<a name="line.724"></a>
+<span class="sourceLineNo">725</span>   *<a name="line.725"></a>
+<span class="sourceLineNo">726</span>   * @param nonceKey A unique identifier for this operation from the client or process<a name="line.726"></a>
+<span class="sourceLineNo">727</span>   * @param procName name of the procedure, used to inform the user<a name="line.727"></a>
+<span class="sourceLineNo">728</span>   * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.728"></a>
+<span class="sourceLineNo">729</span>   * @param exception the failure to report to the user<a name="line.729"></a>
+<span class="sourceLineNo">730</span>   */<a name="line.730"></a>
+<span class="sourceLineNo">731</span>  public void setFailureResultForNonce(final NonceKey nonceKey, final String procName,<a name="line.731"></a>
+<span class="sourceLineNo">732</span>      final User procOwner, final IOException exception) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    if (nonceKey == null) return;<a name="line.733"></a>
+<span class="sourceLineNo">734</span><a name="line.734"></a>
+<span class="sourceLineNo">735</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    if (procId == null || completed.containsKey(procId)) return;<a name="line.736"></a>
+<span class="sourceLineNo">737</span><a name="line.737"></a>
+<span class="sourceLineNo">738</span>    final long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.738"></a>
+<span class="sourceLineNo">739</span>    final ProcedureInfo result = new ProcedureInfo(procId.longValue(),<a name="line.739"></a>
+<span class="sourceLineNo">740</span>      procName, procOwner != null ? procOwner.getShortName() : null,<a name="line.740"></a>
+<span class="sourceLineNo">741</span>      ProcedureUtil.convertToProcedureState(ProcedureState.ROLLEDBACK),<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      -1, nonceKey, exception, currentTime, currentTime, null);<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    completed.putIfAbsent(procId, result);<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>  // ==========================================================================<a name="line.746"></a>
+<span class="sourceLineNo">747</span>  //  Submit/Abort Procedure<a name="line.747"></a>
 <span class="sourceLineNo">748</span>  // ==========================================================================<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  //  Submit/Abort Procedure<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>   * Add a new root-procedure to the executor.<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   * @param proc the new procedure to execute.<a name="line.753"></a>
-<span class="sourceLineNo">754</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.754"></a>
-<span class="sourceLineNo">755</span>   */<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  public long submitProcedure(final Procedure proc) {<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    return submitProcedure(proc, null);<a name="line.757"></a>
-<span class="sourceLineNo">758</span>  }<a name="line.758"></a>
-<span class="sourceLineNo">759</span><a name="line.759"></a>
-<span class="sourceLineNo">760</span>  /**<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   * Add a new root-procedure to the executor.<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * @param proc the new procedure to execute.<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   * @param nonceKey the registered unique identifier for this operation from the client or process.<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   */<a name="line.765"></a>
-<span class="sourceLineNo">766</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NP_NULL_ON_SOME_PATH",<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      justification = "FindBugs is blind to the check-for-null")<a name="line.767"></a>
-<span class="sourceLineNo">768</span>  public long submitProcedure(final Procedure proc, final NonceKey nonceKey) {<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.770"></a>
+<span class="sourceLineNo">749</span>  /**<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * Add a new root-procedure to the executor.<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   * @param proc the new procedure to execute.<a name="line.751"></a>
+<span class="sourceLineNo">752</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.752"></a>
+<span class="sourceLineNo">753</span>   */<a name="line.753"></a>
+<span class="sourceLineNo">754</span>  public long submitProcedure(final Procedure proc) {<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    return submitProcedure(proc, null);<a name="line.755"></a>
+<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
+<span class="sourceLineNo">757</span><a name="line.757"></a>
+<span class="sourceLineNo">758</span>  /**<a name="line.758"></a>
+<span class="sourceLineNo">759</span>   * Add a new root-procedure to the executor.<a name="line.759"></a>
+<span class="sourceLineNo">760</span>   * @param proc the new procedure to execute.<a name="line.760"></a>
+<span class="sourceLineNo">761</span>   * @param nonceKey the registered unique identifier for this operation from the client or process.<a name="line.761"></a>
+<span class="sourceLineNo">762</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.762"></a>
+<span class="sourceLineNo">763</span>   */<a name="line.763"></a>
+<span class="sourceLineNo">764</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NP_NULL_ON_SOME_PATH",<a name="line.764"></a>
+<span class="sourceLineNo">765</span>      justification = "FindBugs is blind to the check-for-null")<a name="line.765"></a>
+<span class="sourceLineNo">766</span>  public long submitProcedure(final Procedure proc, final NonceKey nonceKey) {<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.767"></a>
+<span class="sourceLineNo">768</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.768"></a>
+<span class="sourceLineNo">769</span><a name="line.769"></a>
+<span class="sourceLineNo">770</span>    prepareProcedure(proc);<a name="line.770"></a>
 <span class="sourceLineNo">771</span><a name="line.771"></a>
-<span class="sourceLineNo">772</span>    prepareProcedure(proc);<a name="line.772"></a>
-<span class="sourceLineNo">773</span><a name="line.773"></a>
-<span class="sourceLineNo">774</span>    final Long currentProcId;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    if (nonceKey != null) {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>      currentProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      Preconditions.checkArgument(currentProcId != null,<a name="line.777"></a>
-<span class="sourceLineNo">778</span>        "Expected nonceKey=" + nonceKey + " to be reserved, use registerNonce(); proc=" + proc);<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    } else {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      currentProcId = nextProcId();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>    // Initialize the procedure<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    proc.setNonceKey(nonceKey);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    proc.setProcId(currentProcId.longValue());<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span>    // Commit the transaction<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    store.insert(proc, null);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    if (LOG.isDebugEnabled()) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      LOG.debug("Stored " + proc);<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>    // Add the procedure to the executor<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    return pushProcedure(proc);<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>  /**<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * Add a set of new root-procedure to the executor.<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * @param procs the new procedures to execute.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   */<a name="line.800"></a>
-<span class="sourceLineNo">801</span>  // TODO: Do we need to take nonces here?<a name="line.801"></a>
-<span class="sourceLineNo">802</span>  public void submitProcedures(final Procedure[] procs) {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.804"></a>
-<span class="sourceLineNo">805</span><a name="line.805"></a>
-<span class="sourceLineNo">806</span>    // Prepare procedure<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.807"></a>
-<span class="sourceLineNo">808</span>      prepareProcedure(procs[i]).setProcId(nextProcId());<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    }<a name="line.809"></a>
-<span class="sourceLineNo">810</span><a name="line.810"></a>
-<span class="sourceLineNo">811</span>    // Commit the transaction<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    store.insert(procs);<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    if (LOG.isDebugEnabled()) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>      LOG.debug("Stored " + Arrays.toString(procs));<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>    // Add the procedure to the executor<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.818"></a>
-<span class="sourceLineNo">819</span>      pushProcedure(procs[i]);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    }<a name="line.820"></a>
-<span class="sourceLineNo">821</span>  }<a name="line.821"></a>
-<span class="sourceLineNo">822</span><a name="line.822"></a>
-<span class="sourceLineNo">823</span>  private Procedure prepareProcedure(final Procedure proc) {<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    Preconditions.checkArgument(!proc.hasParent(), "unexpected parent", proc);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    if (this.checkOwnerSet) {<a name="line.827"></a>
-<span class="sourceLineNo">828</span>      Preconditions.checkArgument(proc.hasOwner(), "missing owner");<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    }<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    return proc;<a name="line.830"></a>
-<span class="sourceLineNo">831</span>  }<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span>  private long pushProcedure(final Procedure proc) {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    final long currentProcId = proc.getProcId();<a name="line.834"></a>
-<span class="sourceLineNo">835</span><a name="line.835"></a>
-<span class="sourceLineNo">836</span>    // Create the rollback stack for the procedure<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    RootProcedureState stack = new RootProcedureState();<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    rollbackStack.put(currentProcId, stack);<a name="line.838"></a>
-<span class="sourceLineNo">839</span><a name="line.839"></a>
-<span class="sourceLineNo">840</span>    // Submit the new subprocedures<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    assert !procedures.containsKey(currentProcId);<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    procedures.put(currentProcId, proc);<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    sendProcedureAddedNotification(currentProcId);<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    scheduler.addBack(proc);<a name="line.844"></a>
-<span class="sourceLineNo">845</span>    return proc.getProcId();<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>  /**<a name="line.848"></a>
-<span class="sourceLineNo">849</span>   * Send an abort notification the specified procedure.<a name="line.849"></a>
-<span class="sourceLineNo">850</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.850"></a>
-<span class="sourceLineNo">851</span>   * @param procId the procedure to abort<a name="line.851"></a>
-<span class="sourceLineNo">852</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.852"></a>
-<span class="sourceLineNo">853</span>   */<a name="line.853"></a>
-<span class="sourceLineNo">854</span>  public boolean abort(final long procId) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    return abort(procId, true);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>  }<a name="line.856"></a>
-<span class="sourceLineNo">857</span><a name="line.857"></a>
-<span class="sourceLineNo">858</span>  /**<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * Send an abort notification the specified procedure.<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   * @param procId the procedure to abort<a name="line.861"></a>
-<span class="sourceLineNo">862</span>   * @param mayInterruptIfRunning if the proc completed at least one step, should it be aborted?<a name="line.862"></a>
-<span class="sourceLineNo">863</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.863"></a>
-<span class="sourceLineNo">864</span>   */<a name="line.864"></a>
-<span class="sourceLineNo">865</span>  public boolean abort(final long procId, final boolean mayInterruptIfRunning) {<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    final Procedure proc = procedures.get(procId);<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    if (proc != null) {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>      if (!mayInterruptIfRunning &amp;&amp; proc.wasExecuted()) {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        return false;<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      }<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      return proc.abort(getEnvironment());<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    }<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    return false;<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">772</span>    final Long currentProcId;<a name="line.772"></a>
+<span class="sourceLineNo">773</span>    if (nonceKey != null) {<a name="line.773"></a>
+<span class="sourceLineNo">774</span>      currentProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.774"></a>
+<span class="sourceLineNo">775</span>      Preconditions.checkArgument(currentProcId != null,<a name="line.775"></a>
+<span class="sourceLineNo">776</span>        "Expected nonceKey=" + nonceKey + " to be reserved, use registerNonce(); proc=" + proc);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    } else {<a name="line.777"></a>
+<span class="sourceLineNo">778</span>      currentProcId = nextProcId();<a name="line.778"></a>
+<span class="sourceLineNo">779</span>    }<a name="line.779"></a>
+<span class="sourceLineNo">780</span><a name="line.780"></a>
+<span class="sourceLineNo">781</span>    // Initialize the procedure<a name="line.781"></a>
+<span class="sourceLineNo">782</span>    proc.setNonceKey(nonceKey);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>    proc.setProcId(currentProcId.longValue());<a name="line.783"></a>
+<span class="sourceLineNo">784</span><a name="line.784"></a>
+<span class="sourceLineNo">785</span>    // Commit the transaction<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    store.insert(proc, null);<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    if (LOG.isDebugEnabled()) {<a name="line.787"></a>
+<span class="sourceLineNo">788</span>      LOG.debug("Stored " + proc);<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
+<span class="sourceLineNo">790</span><a name="line.790"></a>
+<span class="sourceLineNo">791</span>    // Add the procedure to the executor<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    return pushProcedure(proc);<a name="line.792"></a>
+<span class="sourceLineNo">793</span>  }<a name="line.793"></a>
+<span class="sourceLineNo">794</span><a name="line.794"></a>
+<span class="sourceLineNo">795</span>  /**<a name="line.795"></a>
+<span class="sourceLineNo">796</span>   * Add a set of new root-procedure to the executor.<a name="line.796"></a>
+<span class="sourceLineNo">797</span>   * @param procs the new procedures to execute.<a name="line.797"></a>
+<span class="sourceLineNo">798</span>   */<a name="line.798"></a>
+<span class="sourceLineNo">799</span>  // TODO: Do we need to take nonces here?<a name="line.799"></a>
+<span class="sourceLineNo">800</span>  public void submitProcedures(final Procedure[] procs) {<a name="line.800"></a>
+<span class="sourceLineNo">801</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.801"></a>
+<span class="sourceLineNo">802</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.802"></a>
+<span class="sourceLineNo">803</span><a name="line.803"></a>
+<span class="sourceLineNo">804</span>    // Prepare procedure<a name="line.804"></a>
+<span class="sourceLineNo">805</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.805"></a>
+<span class="sourceLineNo">806</span>      prepareProcedure(procs[i]).setProcId(nextProcId());<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    }<a name="line.807"></a>
+<span class="sourceLineNo">808</span><a name="line.808"></a>
+<span class="sourceLineNo">809</span>    // Commit the transaction<a name="line.809"></a>
+<span class="sourceLineNo">810</span>    store.insert(procs);<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    if (LOG.isDebugEnabled()) {<a name="line.811"></a>
+<span class="sourceLineNo">812</span>      LOG.debug("Stored " + Arrays.toString(procs));<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    }<a name="line.813"></a>
+<span class="sourceLineNo">814</span><a name="line.814"></a>
+<span class="sourceLineNo">815</span>    // Add the procedure to the executor<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.816"></a>
+<span class="sourceLineNo">817</span>      pushProcedure(procs[i]);<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
+<span class="sourceLineNo">819</span>  }<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span>  private Procedure prepareProcedure(final Procedure proc) {<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.822"></a>
+<span class="sourceLineNo">823</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.823"></a>
+<span class="sourceLineNo">824</span>    Preconditions.checkArgument(!proc.hasParent(), "unexpected parent", proc);<a name="line.824"></a>
+<span class="sourceLineNo">825</span>    if (this.checkOwnerSet) {<a name="line.825"></a>
+<span class="sourceLineNo">826</span>      Preconditions.checkArgument(proc.hasOwner(), "missing owner");<a name="line.826"></a>
+<span class="sourceLineNo">827</span>    }<a name="line.827"></a>
+<span class="sourceLineNo">828</span>    return proc;<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>  private long pushProcedure(final Procedure proc) {<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    final long currentProcId = proc.getProcId();<a name="line.832"></a>
+<span class="sourceLineNo">833</span><a name="line.833"></a>
+<span class="sourceLineNo">834</span>    // Create the rollback stack for the procedure<a name="line.834"></a>
+<span class="sourceLineNo">835</span>    RootProcedureState stack = new RootProcedureState();<a name="line.835"></a>
+<span class="sourceLineNo">836</span>    rollbackStack.put(currentProcId, stack);<a name="line.836"></a>
+<span class="sourceLineNo">837</span><a name="line.837"></a>
+<span class="sourceLineNo">838</span>    // Submit the new subprocedures<a name="line.838"></a>
+<span class="sourceLineNo">839</span>    assert !procedures.containsKey(currentProcId);<a name="line.839"></a>
+<span class="sourceLineNo">840</span>    procedures.put(currentProcId, proc

<TRUNCATED>

[08/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html
index 8b4d7f3..0b4a142 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html
@@ -192,7 +192,7 @@
 <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>    if (proto.hasException()) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      assert proc.getState() == ProcedureProtos.ProcedureState.FINISHED ||<a name="line.187"></a>
+<span class="sourceLineNo">187</span>      assert proc.getState() == ProcedureProtos.ProcedureState.FAILED ||<a name="line.187"></a>
 <span class="sourceLineNo">188</span>             proc.getState() == ProcedureProtos.ProcedureState.ROLLEDBACK :<a name="line.188"></a>
 <span class="sourceLineNo">189</span>             "The procedure must be failed (waiting to rollback) or rolledback";<a name="line.189"></a>
 <span class="sourceLineNo">190</span>      proc.setFailure(RemoteProcedureException.fromProto(proto.getException()));<a name="line.190"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html
index d795930..f018e93 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html
@@ -78,7 +78,7 @@
 <span class="sourceLineNo">070</span>    /**<a name="line.70"></a>
 <span class="sourceLineNo">071</span>     * @return true if the iterator next element is a completed procedure.<a name="line.71"></a>
 <span class="sourceLineNo">072</span>     */<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    boolean isNextCompleted();<a name="line.73"></a>
+<span class="sourceLineNo">073</span>    boolean isNextFinished();<a name="line.73"></a>
 <span class="sourceLineNo">074</span><a name="line.74"></a>
 <span class="sourceLineNo">075</span>    /**<a name="line.75"></a>
 <span class="sourceLineNo">076</span>     * Skip the next procedure<a name="line.76"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html
index d795930..f018e93 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureLoader.html
@@ -78,7 +78,7 @@
 <span class="sourceLineNo">070</span>    /**<a name="line.70"></a>
 <span class="sourceLineNo">071</span>     * @return true if the iterator next element is a completed procedure.<a name="line.71"></a>
 <span class="sourceLineNo">072</span>     */<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    boolean isNextCompleted();<a name="line.73"></a>
+<span class="sourceLineNo">073</span>    boolean isNextFinished();<a name="line.73"></a>
 <span class="sourceLineNo">074</span><a name="line.74"></a>
 <span class="sourceLineNo">075</span>    /**<a name="line.75"></a>
 <span class="sourceLineNo">076</span>     * Skip the next procedure<a name="line.76"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureStoreListener.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureStoreListener.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureStoreListener.html
index d795930..f018e93 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureStoreListener.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureStoreListener.html
@@ -78,7 +78,7 @@
 <span class="sourceLineNo">070</span>    /**<a name="line.70"></a>
 <span class="sourceLineNo">071</span>     * @return true if the iterator next element is a completed procedure.<a name="line.71"></a>
 <span class="sourceLineNo">072</span>     */<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    boolean isNextCompleted();<a name="line.73"></a>
+<span class="sourceLineNo">073</span>    boolean isNextFinished();<a name="line.73"></a>
 <span class="sourceLineNo">074</span><a name="line.74"></a>
 <span class="sourceLineNo">075</span>    /**<a name="line.75"></a>
 <span class="sourceLineNo">076</span>     * Skip the next procedure<a name="line.76"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html
index d795930..f018e93 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/ProcedureStore.html
@@ -78,7 +78,7 @@
 <span class="sourceLineNo">070</span>    /**<a name="line.70"></a>
 <span class="sourceLineNo">071</span>     * @return true if the iterator next element is a completed procedure.<a name="line.71"></a>
 <span class="sourceLineNo">072</span>     */<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    boolean isNextCompleted();<a name="line.73"></a>
+<span class="sourceLineNo">073</span>    boolean isNextFinished();<a name="line.73"></a>
 <span class="sourceLineNo">074</span><a name="line.74"></a>
 <span class="sourceLineNo">075</span>    /**<a name="line.75"></a>
 <span class="sourceLineNo">076</span>     * Skip the next procedure<a name="line.76"></a>


[25/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Posted by gi...@apache.org.
Published site at 9109803891e256f8c047af72572f07695e604a3f.


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

Branch: refs/heads/asf-site
Commit: ddcd3ebf22cc29594821c8382930a9fb30e8f903
Parents: 982c624
Author: jenkins <bu...@apache.org>
Authored: Thu Apr 6 20:00:47 2017 +0000
Committer: jenkins <bu...@apache.org>
Committed: Thu Apr 6 20:00:47 2017 +0000

----------------------------------------------------------------------
 apache_hbase_reference_guide.pdf                |     4 +-
 apache_hbase_reference_guide.pdfmarks           |     4 +-
 .../org/apache/hadoop/hbase/ProcedureState.html |    22 +-
 .../org/apache/hadoop/hbase/ProcedureState.html |     2 +-
 checkstyle-aggregate.html                       | 17306 +++++++++--------
 checkstyle.rss                                  |     4 +-
 devapidocs/constant-values.html                 |     6 +-
 devapidocs/index-all.html                       |    10 +-
 .../org/apache/hadoop/hbase/ProcedureState.html |    22 +-
 .../hadoop/hbase/backup/package-tree.html       |     4 +-
 .../hbase/classification/package-tree.html      |     8 +-
 .../hadoop/hbase/client/package-tree.html       |    22 +-
 .../hadoop/hbase/executor/package-tree.html     |     2 +-
 .../hadoop/hbase/filter/package-tree.html       |    10 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |     4 +-
 .../apache/hadoop/hbase/ipc/package-tree.html   |     2 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |     4 +-
 .../hadoop/hbase/master/package-tree.html       |     4 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    10 +-
 .../hadoop/hbase/procedure2/Procedure.html      |    77 +-
 .../ProcedureExecutor.DelayedProcedure.html     |     4 +-
 .../ProcedureExecutor.InlineChore.html          |    12 +-
 .../ProcedureExecutor.StoppableThread.html      |     8 +-
 ...ProcedureExecutor.TimeoutExecutorThread.html |    24 +-
 .../ProcedureExecutor.WorkerMonitor.html        |    32 +-
 .../ProcedureExecutor.WorkerThread.html         |    14 +-
 .../hbase/procedure2/ProcedureExecutor.html     |   114 +-
 .../hbase/procedure2/StateMachineProcedure.html |     6 +-
 .../hadoop/hbase/procedure2/package-tree.html   |     2 +-
 .../store/ProcedureStore.ProcedureIterator.html |     8 +-
 .../wal/ProcedureWALFormatReader.Entry.html     |    14 +-
 .../ProcedureWALFormatReader.EntryIterator.html |    28 +-
 ...rocedureWALFormatReader.WalProcedureMap.html |    66 +-
 .../hadoop/hbase/quotas/package-tree.html       |     4 +-
 .../hadoop/hbase/regionserver/package-tree.html |    14 +-
 .../regionserver/querymatcher/package-tree.html |     2 +-
 .../hadoop/hbase/rest/model/package-tree.html   |     2 +-
 .../hbase/security/access/package-tree.html     |     2 +-
 .../hadoop/hbase/security/package-tree.html     |     4 +-
 .../hadoop/hbase/thrift/package-tree.html       |     2 +-
 .../tmpl/master/MasterStatusTmpl.ImplData.html  |   240 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |    96 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |    48 +-
 .../regionserver/RSStatusTmpl.ImplData.html     |    60 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |    24 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |    12 +-
 .../apache/hadoop/hbase/util/package-tree.html  |     6 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |     2 +-
 .../org/apache/hadoop/hbase/ProcedureState.html |     2 +-
 .../org/apache/hadoop/hbase/Version.html        |     6 +-
 .../hadoop/hbase/procedure2/Procedure.html      |   566 +-
 ...edureExecutor.CompletedProcedureCleaner.html |  2854 ++-
 .../ProcedureExecutor.DelayedProcedure.html     |  2854 ++-
 .../ProcedureExecutor.InlineChore.html          |  2854 ++-
 ...edureExecutor.ProcedureExecutorListener.html |  2854 ++-
 .../ProcedureExecutor.StoppableThread.html      |  2854 ++-
 .../procedure2/ProcedureExecutor.Testing.html   |  2854 ++-
 ...ProcedureExecutor.TimeoutExecutorThread.html |  2854 ++-
 .../ProcedureExecutor.WorkerMonitor.html        |  2854 ++-
 .../ProcedureExecutor.WorkerThread.html         |  2854 ++-
 .../hbase/procedure2/ProcedureExecutor.html     |  2854 ++-
 .../hadoop/hbase/procedure2/ProcedureUtil.html  |     2 +-
 .../store/ProcedureStore.ProcedureIterator.html |     2 +-
 .../store/ProcedureStore.ProcedureLoader.html   |     2 +-
 .../ProcedureStore.ProcedureStoreListener.html  |     2 +-
 .../hbase/procedure2/store/ProcedureStore.html  |     2 +-
 .../wal/ProcedureWALFormatReader.Entry.html     |   993 +-
 .../ProcedureWALFormatReader.EntryIterator.html |   993 +-
 ...rocedureWALFormatReader.WalProcedureMap.html |   993 +-
 .../store/wal/ProcedureWALFormatReader.html     |   993 +-
 .../tmpl/master/MasterStatusTmpl.ImplData.html  |   240 +-
 .../tmpl/master/MasterStatusTmpl.Intf.html      |   240 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |   240 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |    68 +-
 .../regionserver/RSStatusTmpl.ImplData.html     |    60 +-
 .../tmpl/regionserver/RSStatusTmpl.Intf.html    |    60 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |    60 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |    20 +-
 .../master/procedure/TestProcedureAdmin.html    |    32 +-
 .../master/procedure/TestProcedureAdmin.html    |   411 +-
 .../ProcedureTestingUtility.LoadCounter.html    |     4 +-
 .../ProcedureTestingUtility.NoopProcedure.html  |     4 +-
 .../ProcedureTestingUtility.TestProcedure.html  |     4 +-
 .../procedure2/ProcedureTestingUtility.html     |     4 +-
 ...LoaderPerformanceEvaluation.LoadCounter.html |     2 +-
 ...ProcedureWALLoaderPerformanceEvaluation.html |     2 +-
 86 files changed, 26469 insertions(+), 26455 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 90fc127..7badcdd 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.6, based on Prawn 1.2.1)
 /Producer (Apache HBase Team)
-/CreationDate (D:20170406191810+00'00')
-/ModDate (D:20170406191810+00'00')
+/CreationDate (D:20170406194801+00'00')
+/ModDate (D:20170406194801+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/apache_hbase_reference_guide.pdfmarks
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdfmarks b/apache_hbase_reference_guide.pdfmarks
index 4d4a302..1b2f240 100644
--- a/apache_hbase_reference_guide.pdfmarks
+++ b/apache_hbase_reference_guide.pdfmarks
@@ -2,8 +2,8 @@
   /Author (Apache HBase Team)
   /Subject ()
   /Keywords ()
-  /ModDate (D:20170406191934)
-  /CreationDate (D:20170406191934)
+  /ModDate (D:20170406194927)
+  /CreationDate (D:20170406194927)
   /Creator (Asciidoctor PDF 1.5.0.alpha.6, based on Prawn 1.2.1)
   /Producer ()
   /DOCINFO pdfmark

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/apidocs/org/apache/hadoop/hbase/ProcedureState.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/ProcedureState.html b/apidocs/org/apache/hadoop/hbase/ProcedureState.html
index 26277a7..ee8af3d 100644
--- a/apidocs/org/apache/hadoop/hbase/ProcedureState.html
+++ b/apidocs/org/apache/hadoop/hbase/ProcedureState.html
@@ -140,7 +140,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is
 <th class="colOne" scope="col">Enum Constant and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ProcedureState.html#FINISHED">FINISHED</a></span></code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ProcedureState.html#FAILED">FAILED</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ProcedureState.html#INITIALIZING">INITIALIZING</a></span></code>&nbsp;</td>
@@ -152,9 +152,12 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ProcedureState.html#RUNNABLE">RUNNABLE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ProcedureState.html#WAITING">WAITING</a></span></code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ProcedureState.html#SUCCESS">SUCCESS</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ProcedureState.html#WAITING">WAITING</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ProcedureState.html#WAITING_TIMEOUT">WAITING_TIMEOUT</a></span></code>&nbsp;</td>
 </tr>
 </table>
@@ -259,13 +262,22 @@ the order they are declared.</div>
 <pre>public static final&nbsp;<a href="../../../../org/apache/hadoop/hbase/ProcedureState.html" title="enum in org.apache.hadoop.hbase">ProcedureState</a> <a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureState.html#line.27">ROLLEDBACK</a></pre>
 </li>
 </ul>
-<a name="FINISHED">
+<a name="SUCCESS">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>SUCCESS</h4>
+<pre>public static final&nbsp;<a href="../../../../org/apache/hadoop/hbase/ProcedureState.html" title="enum in org.apache.hadoop.hbase">ProcedureState</a> <a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureState.html#line.27">SUCCESS</a></pre>
+</li>
+</ul>
+<a name="FAILED">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>FINISHED</h4>
-<pre>public static final&nbsp;<a href="../../../../org/apache/hadoop/hbase/ProcedureState.html" title="enum in org.apache.hadoop.hbase">ProcedureState</a> <a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureState.html#line.27">FINISHED</a></pre>
+<h4>FAILED</h4>
+<pre>public static final&nbsp;<a href="../../../../org/apache/hadoop/hbase/ProcedureState.html" title="enum in org.apache.hadoop.hbase">ProcedureState</a> <a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureState.html#line.27">FAILED</a></pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/apidocs/src-html/org/apache/hadoop/hbase/ProcedureState.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/ProcedureState.html b/apidocs/src-html/org/apache/hadoop/hbase/ProcedureState.html
index d505bef..55d62e7 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/ProcedureState.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/ProcedureState.html
@@ -32,7 +32,7 @@
 <span class="sourceLineNo">024</span> */<a name="line.24"></a>
 <span class="sourceLineNo">025</span>@InterfaceAudience.Public<a name="line.25"></a>
 <span class="sourceLineNo">026</span>public enum ProcedureState {<a name="line.26"></a>
-<span class="sourceLineNo">027</span>  INITIALIZING, RUNNABLE, WAITING, WAITING_TIMEOUT, ROLLEDBACK, FINISHED;<a name="line.27"></a>
+<span class="sourceLineNo">027</span>  INITIALIZING, RUNNABLE, WAITING, WAITING_TIMEOUT, ROLLEDBACK, SUCCESS, FAILED;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>}<a name="line.28"></a>
 
 


[11/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
index 35cebd9..b6b4cb6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html
@@ -321,7 +321,7 @@
 <span class="sourceLineNo">313</span>      final NonceKey nonceKey;<a name="line.313"></a>
 <span class="sourceLineNo">314</span>      final long procId;<a name="line.314"></a>
 <span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>      if (procIter.isNextCompleted()) {<a name="line.316"></a>
+<span class="sourceLineNo">316</span>      if (procIter.isNextFinished()) {<a name="line.316"></a>
 <span class="sourceLineNo">317</span>        ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.317"></a>
 <span class="sourceLineNo">318</span>        nonceKey = proc.getNonceKey();<a name="line.318"></a>
 <span class="sourceLineNo">319</span>        procId = proc.getProcId();<a name="line.319"></a>
@@ -359,7 +359,7 @@
 <span class="sourceLineNo">351</span>    HashSet&lt;Procedure&gt; waitingSet = null;<a name="line.351"></a>
 <span class="sourceLineNo">352</span>    procIter.reset();<a name="line.352"></a>
 <span class="sourceLineNo">353</span>    while (procIter.hasNext()) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (procIter.isNextCompleted()) {<a name="line.354"></a>
+<span class="sourceLineNo">354</span>      if (procIter.isNextFinished()) {<a name="line.354"></a>
 <span class="sourceLineNo">355</span>        procIter.skipNext();<a name="line.355"></a>
 <span class="sourceLineNo">356</span>        continue;<a name="line.356"></a>
 <span class="sourceLineNo">357</span>      }<a name="line.357"></a>
@@ -405,1450 +405,1448 @@
 <span class="sourceLineNo">397</span>          }<a name="line.397"></a>
 <span class="sourceLineNo">398</span>          waitingSet.add(proc);<a name="line.398"></a>
 <span class="sourceLineNo">399</span>          break;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        case FINISHED:<a name="line.400"></a>
-<span class="sourceLineNo">401</span>          if (proc.hasException()) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>            // add the proc to the scheduler to perform the rollback<a name="line.402"></a>
-<span class="sourceLineNo">403</span>            scheduler.addBack(proc);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          }<a name="line.404"></a>
-<span class="sourceLineNo">405</span>          break;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        case ROLLEDBACK:<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        case INITIALIZING:<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          LOG.error(msg);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          throw new UnsupportedOperationException(msg);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        default:<a name="line.411"></a>
-<span class="sourceLineNo">412</span>          break;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      }<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    // 3. Validate the stacks<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    int corruptedCount = 0;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    while (itStack.hasNext()) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      RootProcedureState procStack = entry.getValue();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      if (procStack.isValid()) continue;<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>      for (Procedure proc: procStack.getSubproceduresStack()) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        LOG.error("Corrupted " + proc);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        procedures.remove(proc.getProcId());<a name="line.426"></a>
-<span class="sourceLineNo">427</span>        runnableList.remove(proc);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        corruptedCount++;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      }<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      itStack.remove();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    // 4. Push the procedures to the timeout executor<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    if (waitingSet != null &amp;&amp; !waitingSet.isEmpty()) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      for (Procedure proc: waitingSet) {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        proc.afterReplay(getEnvironment());<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        timeoutExecutor.add(proc);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      }<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    }<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>    // 5. Push the procedure to the scheduler<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    if (!runnableList.isEmpty()) {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      // some procedure may be started way before this stuff.<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        Procedure proc = runnableList.get(i);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        proc.afterReplay(getEnvironment());<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        if (!proc.hasParent()) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        }<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        if (proc.wasExecuted()) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>          scheduler.addFront(proc);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        } else {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          // if it was not in execution, it can wait.<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          scheduler.addBack(proc);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        }<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    }<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>   * Start the procedure executor.<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   *<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * @param numThreads number of threads available for procedure execution.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   */<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    if (running.getAndSet(true)) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      LOG.warn("Already running");<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      return;<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>    // We have numThreads executor + one timer thread used for timing out<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    // procedures and triggering periodic procedures.<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    this.corePoolSize = numThreads;<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    LOG.info("Starting executor worker threads=" + corePoolSize);<a name="line.485"></a>
-<span class="sourceLineNo">486</span><a name="line.486"></a>
-<span class="sourceLineNo">487</span>    // Create the Thread Group for the executors<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    threadGroup = new ThreadGroup("ProcedureExecutor");<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>    // Create the timeout executor<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    timeoutExecutor = new TimeoutExecutorThread(threadGroup);<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>    // Create the workers<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    workerId.set(0);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    workerThreads = new CopyOnWriteArrayList&lt;&gt;();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    for (int i = 0; i &lt; corePoolSize; ++i) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      workerThreads.add(new WorkerThread(threadGroup));<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
+<span class="sourceLineNo">400</span>        case FAILED:<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          // add the proc to the scheduler to perform the rollback<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          scheduler.addBack(proc);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          break;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        case ROLLEDBACK:<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        case INITIALIZING:<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.406"></a>
+<span class="sourceLineNo">407</span>          LOG.error(msg);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>          throw new UnsupportedOperationException(msg);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        default:<a name="line.409"></a>
+<span class="sourceLineNo">410</span>          break;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    // 3. Validate the stacks<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    int corruptedCount = 0;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    while (itStack.hasNext()) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      RootProcedureState procStack = entry.getValue();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      if (procStack.isValid()) continue;<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span>      for (Procedure proc: procStack.getSubproceduresStack()) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        LOG.error("Corrupted " + proc);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        procedures.remove(proc.getProcId());<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        runnableList.remove(proc);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        corruptedCount++;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>      }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      itStack.remove();<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    }<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<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>    // 4. Push the procedures to the timeout executor<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    if (waitingSet != null &amp;&amp; !waitingSet.isEmpty()) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      for (Procedure proc: waitingSet) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        proc.afterReplay(getEnvironment());<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        timeoutExecutor.add(proc);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      }<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span>    // 5. Push the procedure to the scheduler<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    if (!runnableList.isEmpty()) {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      // some procedure may be started way before this stuff.<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>        Procedure proc = runnableList.get(i);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        proc.afterReplay(getEnvironment());<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        if (!proc.hasParent()) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        }<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        if (proc.wasExecuted()) {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          scheduler.addFront(proc);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>        } else {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          // if it was not in execution, it can wait.<a name="line.457"></a>
+<span class="sourceLineNo">458</span>          scheduler.addBack(proc);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      }<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  }<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>   * Start the procedure executor.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   *<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @param numThreads number of threads available for procedure execution.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   */<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    if (running.getAndSet(true)) {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      LOG.warn("Already running");<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      return;<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span><a name="line.479"></a>
+<span class="sourceLineNo">480</span>    // We have numThreads executor + one timer thread used for timing out<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    // procedures and triggering periodic procedures.<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    this.corePoolSize = numThreads;<a name="line.482"></a>
+<span class="sourceLineNo">483</span>    LOG.info("Starting executor worker threads=" + corePoolSize);<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // Create the Thread Group for the executors<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    threadGroup = new ThreadGroup("ProcedureExecutor");<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>    // Create the timeout executor<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    timeoutExecutor = new TimeoutExecutorThread(threadGroup);<a name="line.489"></a>
+<span class="sourceLineNo">490</span><a name="line.490"></a>
+<span class="sourceLineNo">491</span>    // Create the workers<a name="line.491"></a>
+<span class="sourceLineNo">492</span>    workerId.set(0);<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    workerThreads = new CopyOnWriteArrayList&lt;&gt;();<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    for (int i = 0; i &lt; corePoolSize; ++i) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      workerThreads.add(new WorkerThread(threadGroup));<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    }<a name="line.496"></a>
+<span class="sourceLineNo">497</span><a name="line.497"></a>
+<span class="sourceLineNo">498</span>    long st, et;<a name="line.498"></a>
 <span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>    long st, et;<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>    // Acquire the store lease.<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    store.recoverLease();<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    LOG.info(String.format("Recover store (%s) lease: %s",<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.507"></a>
-<span class="sourceLineNo">508</span><a name="line.508"></a>
-<span class="sourceLineNo">509</span>    // start the procedure scheduler<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    scheduler.start();<a name="line.510"></a>
-<span class="sourceLineNo">511</span><a name="line.511"></a>
-<span class="sourceLineNo">512</span>    // TODO: Split in two steps.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    // The first one will make sure that we have the latest id,<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    // so we can start the threads and accept new procedures.<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    // The second step will do the actual load of old procedures.<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    load(abortOnCorruption);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    LOG.info(String.format("Load store (%s): %s",<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (LOG.isTraceEnabled()) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.trace("Start workers " + workerThreads.size());<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    timeoutExecutor.start();<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    for (WorkerThread worker: workerThreads) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      worker.start();<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    // Internal chores<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    timeoutExecutor.add(new WorkerMonitor());<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>    // Add completed cleaner chore<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    addChore(new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  public void stop() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    if (!running.getAndSet(false)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>      return;<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>    LOG.info("Stopping");<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    scheduler.stop();<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    timeoutExecutor.sendStopSignal();<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  @VisibleForTesting<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  public void join() {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    assert !isRunning() : "expected not running";<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>    // stop the timeout executor<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    timeoutExecutor.awaitTermination();<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    timeoutExecutor = null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>    // stop the worker threads<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    for (WorkerThread worker: workerThreads) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      worker.awaitTermination();<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    workerThreads = null;<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    // Destroy the Thread Group for the executors<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    try {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      threadGroup.destroy();<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    } catch (IllegalThreadStateException e) {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      LOG.error("Thread group " + threadGroup + " contains running threads");<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      threadGroup.list();<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    } finally {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      threadGroup = null;<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>    // reset the in-memory state for testing<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    completed.clear();<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    rollbackStack.clear();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    procedures.clear();<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    nonceKeysToProcIdsMap.clear();<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    scheduler.clear();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    lastProcId.set(-1);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  }<a name="line.580"></a>
-<span class="sourceLineNo">581</span><a name="line.581"></a>
-<span class="sourceLineNo">582</span>  public void refreshConfiguration(final Configuration conf) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    this.conf = conf;<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  }<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
+<span class="sourceLineNo">500</span>    // Acquire the store lease.<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    store.recoverLease();<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    LOG.info(String.format("Recover store (%s) lease: %s",<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.505"></a>
+<span class="sourceLineNo">506</span><a name="line.506"></a>
+<span class="sourceLineNo">507</span>    // start the procedure scheduler<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    scheduler.start();<a name="line.508"></a>
+<span class="sourceLineNo">509</span><a name="line.509"></a>
+<span class="sourceLineNo">510</span>    // TODO: Split in two steps.<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    // The first one will make sure that we have the latest id,<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    // so we can start the threads and accept new procedures.<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    // The second step will do the actual load of old procedures.<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    load(abortOnCorruption);<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.517"></a>
+<span class="sourceLineNo">518</span>    LOG.info(String.format("Load store (%s): %s",<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    if (LOG.isTraceEnabled()) {<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      LOG.trace("Start workers " + workerThreads.size());<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    timeoutExecutor.start();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    for (WorkerThread worker: workerThreads) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      worker.start();<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
+<span class="sourceLineNo">529</span><a name="line.529"></a>
+<span class="sourceLineNo">530</span>    // Internal chores<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    timeoutExecutor.add(new WorkerMonitor());<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    // Add completed cleaner chore<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    addChore(new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.534"></a>
+<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>  public void stop() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    if (!running.getAndSet(false)) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      return;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    }<a name="line.540"></a>
+<span class="sourceLineNo">541</span><a name="line.541"></a>
+<span class="sourceLineNo">542</span>    LOG.info("Stopping");<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    scheduler.stop();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    timeoutExecutor.sendStopSignal();<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>  @VisibleForTesting<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  public void join() {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    assert !isRunning() : "expected not running";<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span>    // stop the timeout executor<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    timeoutExecutor.awaitTermination();<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    timeoutExecutor = null;<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    // stop the worker threads<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    for (WorkerThread worker: workerThreads) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      worker.awaitTermination();<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    workerThreads = null;<a name="line.559"></a>
+<span class="sourceLineNo">560</span><a name="line.560"></a>
+<span class="sourceLineNo">561</span>    // Destroy the Thread Group for the executors<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    try {<a name="line.562"></a>
+<span class="sourceLineNo">563</span>      threadGroup.destroy();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    } catch (IllegalThreadStateException e) {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      LOG.error("Thread group " + threadGroup + " contains running threads");<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      threadGroup.list();<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    } finally {<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      threadGroup = null;<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
+<span class="sourceLineNo">570</span><a name="line.570"></a>
+<span class="sourceLineNo">571</span>    // reset the in-memory state for testing<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    completed.clear();<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    rollbackStack.clear();<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    procedures.clear();<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    nonceKeysToProcIdsMap.clear();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    scheduler.clear();<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    lastProcId.set(-1);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
+<span class="sourceLineNo">579</span><a name="line.579"></a>
+<span class="sourceLineNo">580</span>  public void refreshConfiguration(final Configuration conf) {<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    this.conf = conf;<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.582"></a>
+<span class="sourceLineNo">583</span>        DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<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>  // ==========================================================================<a name="line.586"></a>
+<span class="sourceLineNo">587</span>  //  Accessors<a name="line.587"></a>
 <span class="sourceLineNo">588</span>  // ==========================================================================<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  //  Accessors<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  // ==========================================================================<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  public boolean isRunning() {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return running.get();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return the current number of worker threads.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   */<a name="line.597"></a>
-<span class="sourceLineNo">598</span>  public int getWorkerThreadCount() {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    return workerThreads.size();<a name="line.599"></a>
-<span class="sourceLineNo">600</span>  }<a name="line.600"></a>
-<span class="sourceLineNo">601</span><a name="line.601"></a>
-<span class="sourceLineNo">602</span>  /**<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   * @return the core pool size settings.<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   */<a name="line.604"></a>
-<span class="sourceLineNo">605</span>  public int getCorePoolSize() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    return corePoolSize;<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>  public int getActiveExecutorCount() {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    return activeExecutorCount.get();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  public TEnvironment getEnvironment() {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    return this.environment;<a name="line.614"></a>
-<span class="sourceLineNo">615</span>  }<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>  public ProcedureStore getStore() {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    return this.store;<a name="line.618"></a>
-<span class="sourceLineNo">619</span>  }<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>  protected ProcedureScheduler getScheduler() {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    return scheduler;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>  }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>  public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    this.scheduler.signalAll();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>  }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>  public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<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">589</span>  public boolean isRunning() {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    return running.get();<a name="line.590"></a>
+<span class="sourceLineNo">591</span>  }<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span>  /**<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @return the current number of worker threads.<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
+<span class="sourceLineNo">596</span>  public int getWorkerThreadCount() {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    return workerThreads.size();<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  }<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span>  /**<a name="line.600"></a>
+<span class="sourceLineNo">601</span>   * @return the core pool size settings.<a name="line.601"></a>
+<span class="sourceLineNo">602</span>   */<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  public int getCorePoolSize() {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    return corePoolSize;<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  }<a name="line.605"></a>
+<span class="sourceLineNo">606</span><a name="line.606"></a>
+<span class="sourceLineNo">607</span>  public int getActiveExecutorCount() {<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    return activeExecutorCount.get();<a name="line.608"></a>
+<span class="sourceLineNo">609</span>  }<a name="line.609"></a>
+<span class="sourceLineNo">610</span><a name="line.610"></a>
+<span class="sourceLineNo">611</span>  public TEnvironment getEnvironment() {<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    return this.environment;<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>  public ProcedureStore getStore() {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    return this.store;<a name="line.616"></a>
+<span class="sourceLineNo">617</span>  }<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>  protected ProcedureScheduler getScheduler() {<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    return scheduler;<a name="line.620"></a>
+<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>  public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    this.scheduler.signalAll();<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>  public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
+<span class="sourceLineNo">631</span><a name="line.631"></a>
+<span class="sourceLineNo">632</span>  // ==========================================================================<a name="line.632"></a>
+<span class="sourceLineNo">633</span>  //  Submit/Remove Chores<a name="line.633"></a>
 <span class="sourceLineNo">634</span>  // ==========================================================================<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  //  Submit/Remove Chores<a name="line.635"></a>
-<span class="sourceLineNo">636</span>  // ==========================================================================<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span>  /**<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * Add a chore procedure to the executor<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   * @param chore the chore to add<a name="line.640"></a>
-<span class="sourceLineNo">641</span>   */<a name="line.641"></a>
-<span class="sourceLineNo">642</span>  public void addChore(final ProcedureInMemoryChore chore) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    timeoutExecutor.add(chore);<a name="line.644"></a>
-<span class="sourceLineNo">645</span>  }<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>  /**<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   * Remove a chore procedure from the executor<a name="line.648"></a>
-<span class="sourceLineNo">649</span>   * @param chore the chore to remove<a name="line.649"></a>
-<span class="sourceLineNo">650</span>   * @return whether the chore is removed, or it will be removed later<a name="line.650"></a>
-<span class="sourceLineNo">651</span>   */<a name="line.651"></a>
-<span class="sourceLineNo">652</span>  public boolean removeChore(final ProcedureInMemoryChore chore) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    chore.setState(ProcedureState.FINISHED);<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    return timeoutExecutor.remove(chore);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>  }<a name="line.655"></a>
-<span class="sourceLineNo">656</span><a name="line.656"></a>
+<span class="sourceLineNo">635</span><a name="line.635"></a>
+<span class="sourceLineNo">636</span>  /**<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   * Add a chore procedure to the executor<a name="line.637"></a>
+<span class="sourceLineNo">638</span>   * @param chore the chore to add<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   */<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  public void addChore(final ProcedureInMemoryChore chore) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    timeoutExecutor.add(chore);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>  }<a name="line.643"></a>
+<span class="sourceLineNo">644</span><a name="line.644"></a>
+<span class="sourceLineNo">645</span>  /**<a name="line.645"></a>
+<span class="sourceLineNo">646</span>   * Remove a chore procedure from the executor<a name="line.646"></a>
+<span class="sourceLineNo">647</span>   * @param chore the chore to remove<a name="line.647"></a>
+<span class="sourceLineNo">648</span>   * @return whether the chore is removed, or it will be removed later<a name="line.648"></a>
+<span class="sourceLineNo">649</span>   */<a name="line.649"></a>
+<span class="sourceLineNo">650</span>  public boolean removeChore(final ProcedureInMemoryChore chore) {<a name="line.650"></a>
+<span class="sourceLineNo">651</span>    chore.setState(ProcedureState.SUCCESS);<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    return timeoutExecutor.remove(chore);<a name="line.652"></a>
+<span class="sourceLineNo">653</span>  }<a name="line.653"></a>
+<span class="sourceLineNo">654</span><a name="line.654"></a>
+<span class="sourceLineNo">655</span>  // ==========================================================================<a name="line.655"></a>
+<span class="sourceLineNo">656</span>  //  Nonce Procedure helpers<a name="line.656"></a>
 <span class="sourceLineNo">657</span>  // ==========================================================================<a name="line.657"></a>
-<span class="sourceLineNo">658</span>  //  Nonce Procedure helpers<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  // ==========================================================================<a name="line.659"></a>
-<span class="sourceLineNo">660</span>  /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * @param nonceGroup<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * @param nonce<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * @return the generated NonceKey<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>  }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>  /**<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   * Register a nonce for a procedure that is going to be submitted.<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   * A procId will be reserved and on submitProcedure(),<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   * the procedure with the specified nonce will take the reserved ProcId.<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   * otherwise an invalid procId will be returned. and the caller should procede<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   * and submit the procedure.<a name="line.676"></a>
-<span class="sourceLineNo">677</span>   *<a name="line.677"></a>
-<span class="sourceLineNo">678</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.678"></a>
-<span class="sourceLineNo">679</span>   * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.679"></a>
-<span class="sourceLineNo">680</span>   */<a name="line.680"></a>
-<span class="sourceLineNo">681</span>  public long registerNonce(final NonceKey nonceKey) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    if (nonceKey == null) return -1;<a name="line.682"></a>
-<span class="sourceLineNo">683</span><a name="line.683"></a>
-<span class="sourceLineNo">684</span>    // check if we have already a Reserved ID for the nonce<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    if (oldProcId == null) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      // reserve a new Procedure ID, this will be associated with the nonce<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      // and the procedure submitted with the specified nonce will use this ID.<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      final long newProcId = nextProcId();<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.690"></a>
-<span class="sourceLineNo">691</span>      if (oldProcId == null) return -1;<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>    // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    // since the client expect the procedure to be submitted, spin here until it is.<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    while (isRunning() &amp;&amp;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>           !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &amp;&amp;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>           nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      if (traceEnabled) {<a name="line.700"></a>
-<span class="sourceLineNo">701</span>        LOG.trace("Waiting for procId=" + oldProcId.longValue() + " to be submitted");<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      }<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      Threads.sleep(100);<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    }<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    return oldProcId.longValue();<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  }<a name="line.706"></a>
-<span class="sourceLineNo">707</span><a name="line.707"></a>
-<span class="sourceLineNo">708</span>  /**<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    if (nonceKey == null) return;<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    if (procId == null) return;<a name="line.716"></a>
-<span class="sourceLineNo">717</span><a name="line.717"></a>
-<span class="sourceLineNo">718</span>    // if the procedure was not submitted, remove the nonce<a name="line.718"></a>
-<span class="sourceLineNo">719</span>    if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    }<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  }<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>  /**<a name="line.724"></a>
-<span class="sourceLineNo">725</span>   * If the failure failed before submitting it, we may want to give back the<a name="line.725"></a>
-<span class="sourceLineNo">726</span>   * same error to the requests with the same nonceKey.<a name="line.726"></a>
-<span class="sourceLineNo">727</span>   *<a name="line.727"></a>
-<span class="sourceLineNo">728</span>   * @param nonceKey A unique identifier for this operation from the client or process<a name="line.728"></a>
-<span class="sourceLineNo">729</span>   * @param procName name of the procedure, used to inform the user<a name="line.729"></a>
-<span class="sourceLineNo">730</span>   * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * @param exception the failure to report to the user<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   */<a name="line.732"></a>
-<span class="sourceLineNo">733</span>  public void setFailureResultForNonce(final NonceKey nonceKey, final String procName,<a name="line.733"></a>
-<span class="sourceLineNo">734</span>      final User procOwner, final IOException exception) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    if (nonceKey == null) return;<a name="line.735"></a>
-<span class="sourceLineNo">736</span><a name="line.736"></a>
-<span class="sourceLineNo">737</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    if (procId == null || completed.containsKey(procId)) return;<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>    final long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    final ProcedureInfo result = new ProcedureInfo(procId.longValue(),<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      procName, procOwner != null ? procOwner.getShortName() : null,<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      ProcedureUtil.convertToProcedureState(ProcedureState.ROLLEDBACK),<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      -1, nonceKey, exception, currentTime, currentTime, null);<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    completed.putIfAbsent(procId, result);<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
-<span class="sourceLineNo">747</span><a name="line.747"></a>
+<span class="sourceLineNo">658</span>  /**<a name="line.658"></a>
+<span class="sourceLineNo">659</span>   * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.659"></a>
+<span class="sourceLineNo">660</span>   * @param nonceGroup<a name="line.660"></a>
+<span class="sourceLineNo">661</span>   * @param nonce<a name="line.661"></a>
+<span class="sourceLineNo">662</span>   * @return the generated NonceKey<a name="line.662"></a>
+<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
+<span class="sourceLineNo">664</span>  public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.665"></a>
+<span class="sourceLineNo">666</span>  }<a name="line.666"></a>
+<span class="sourceLineNo">667</span><a name="line.667"></a>
+<span class="sourceLineNo">668</span>  /**<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * Register a nonce for a procedure that is going to be submitted.<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * A procId will be reserved and on submitProcedure(),<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   * the procedure with the specified nonce will take the reserved ProcId.<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   * otherwise an invalid procId will be returned. and the caller should procede<a name="line.673"></a>
+<span class="sourceLineNo">674</span>   * and submit the procedure.<a name="line.674"></a>
+<span class="sourceLineNo">675</span>   *<a name="line.675"></a>
+<span class="sourceLineNo">676</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.676"></a>
+<span class="sourceLineNo">677</span>   * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.677"></a>
+<span class="sourceLineNo">678</span>   */<a name="line.678"></a>
+<span class="sourceLineNo">679</span>  public long registerNonce(final NonceKey nonceKey) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span>    if (nonceKey == null) return -1;<a name="line.680"></a>
+<span class="sourceLineNo">681</span><a name="line.681"></a>
+<span class="sourceLineNo">682</span>    // check if we have already a Reserved ID for the nonce<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>    if (oldProcId == null) {<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      // reserve a new Procedure ID, this will be associated with the nonce<a name="line.685"></a>
+<span class="sourceLineNo">686</span>      // and the procedure submitted with the specified nonce will use this ID.<a name="line.686"></a>
+<span class="sourceLineNo">687</span>      final long newProcId = nextProcId();<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      if (oldProcId == null) return -1;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>    }<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span>    // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    // since the client expect the procedure to be submitted, spin here until it is.<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    while (isRunning() &amp;&amp;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>           !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &amp;&amp;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>           nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.697"></a>
+<span class="sourceLineNo">698</span>      if (traceEnabled) {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>        LOG.trace("Waiting for procId=" + oldProcId.longValue() + " to be submitted");<a name="line.699"></a>
+<span class="sourceLineNo">700</span>      }<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      Threads.sleep(100);<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    }<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    return oldProcId.longValue();<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>  /**<a name="line.706"></a>
+<span class="sourceLineNo">707</span>   * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.707"></a>
+<span class="sourceLineNo">708</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.708"></a>
+<span class="sourceLineNo">709</span>   */<a name="line.709"></a>
+<span class="sourceLineNo">710</span>  public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    if (nonceKey == null) return;<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.713"></a>
+<span class="sourceLineNo">714</span>    if (procId == null) return;<a name="line.714"></a>
+<span class="sourceLineNo">715</span><a name="line.715"></a>
+<span class="sourceLineNo">716</span>    // if the procedure was not submitted, remove the nonce<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    }<a name="line.719"></a>
+<span class="sourceLineNo">720</span>  }<a name="line.720"></a>
+<span class="sourceLineNo">721</span><a name="line.721"></a>
+<span class="sourceLineNo">722</span>  /**<a name="line.722"></a>
+<span class="sourceLineNo">723</span>   * If the failure failed before submitting it, we may want to give back the<a name="line.723"></a>
+<span class="sourceLineNo">724</span>   * same error to the requests with the same nonceKey.<a name="line.724"></a>
+<span class="sourceLineNo">725</span>   *<a name="line.725"></a>
+<span class="sourceLineNo">726</span>   * @param nonceKey A unique identifier for this operation from the client or process<a name="line.726"></a>
+<span class="sourceLineNo">727</span>   * @param procName name of the procedure, used to inform the user<a name="line.727"></a>
+<span class="sourceLineNo">728</span>   * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.728"></a>
+<span class="sourceLineNo">729</span>   * @param exception the failure to report to the user<a name="line.729"></a>
+<span class="sourceLineNo">730</span>   */<a name="line.730"></a>
+<span class="sourceLineNo">731</span>  public void setFailureResultForNonce(final NonceKey nonceKey, final String procName,<a name="line.731"></a>
+<span class="sourceLineNo">732</span>      final User procOwner, final IOException exception) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    if (nonceKey == null) return;<a name="line.733"></a>
+<span class="sourceLineNo">734</span><a name="line.734"></a>
+<span class="sourceLineNo">735</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    if (procId == null || completed.containsKey(procId)) return;<a name="line.736"></a>
+<span class="sourceLineNo">737</span><a name="line.737"></a>
+<span class="sourceLineNo">738</span>    final long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.738"></a>
+<span class="sourceLineNo">739</span>    final ProcedureInfo result = new ProcedureInfo(procId.longValue(),<a name="line.739"></a>
+<span class="sourceLineNo">740</span>      procName, procOwner != null ? procOwner.getShortName() : null,<a name="line.740"></a>
+<span class="sourceLineNo">741</span>      ProcedureUtil.convertToProcedureState(ProcedureState.ROLLEDBACK),<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      -1, nonceKey, exception, currentTime, currentTime, null);<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    completed.putIfAbsent(procId, result);<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>  // ==========================================================================<a name="line.746"></a>
+<span class="sourceLineNo">747</span>  //  Submit/Abort Procedure<a name="line.747"></a>
 <span class="sourceLineNo">748</span>  // ==========================================================================<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  //  Submit/Abort Procedure<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>   * Add a new root-procedure to the executor.<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   * @param proc the new procedure to execute.<a name="line.753"></a>
-<span class="sourceLineNo">754</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.754"></a>
-<span class="sourceLineNo">755</span>   */<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  public long submitProcedure(final Procedure proc) {<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    return submitProcedure(proc, null);<a name="line.757"></a>
-<span class="sourceLineNo">758</span>  }<a name="line.758"></a>
-<span class="sourceLineNo">759</span><a name="line.759"></a>
-<span class="sourceLineNo">760</span>  /**<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   * Add a new root-procedure to the executor.<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * @param proc the new procedure to execute.<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   * @param nonceKey the registered unique identifier for this operation from the client or process.<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   */<a name="line.765"></a>
-<span class="sourceLineNo">766</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NP_NULL_ON_SOME_PATH",<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      justification = "FindBugs is blind to the check-for-null")<a name="line.767"></a>
-<span class="sourceLineNo">768</span>  public long submitProcedure(final Procedure proc, final NonceKey nonceKey) {<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.770"></a>
+<span class="sourceLineNo">749</span>  /**<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * Add a new root-procedure to the executor.<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   * @param proc the new procedure to execute.<a name="line.751"></a>
+<span class="sourceLineNo">752</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.752"></a>
+<span class="sourceLineNo">753</span>   */<a name="line.753"></a>
+<span class="sourceLineNo">754</span>  public long submitProcedure(final Procedure proc) {<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    return submitProcedure(proc, null);<a name="line.755"></a>
+<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
+<span class="sourceLineNo">757</span><a name="line.757"></a>
+<span class="sourceLineNo">758</span>  /**<a name="line.758"></a>
+<span class="sourceLineNo">759</span>   * Add a new root-procedure to the executor.<a name="line.759"></a>
+<span class="sourceLineNo">760</span>   * @param proc the new procedure to execute.<a name="line.760"></a>
+<span class="sourceLineNo">761</span>   * @param nonceKey the registered unique identifier for this operation from the client or process.<a name="line.761"></a>
+<span class="sourceLineNo">762</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.762"></a>
+<span class="sourceLineNo">763</span>   */<a name="line.763"></a>
+<span class="sourceLineNo">764</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NP_NULL_ON_SOME_PATH",<a name="line.764"></a>
+<span class="sourceLineNo">765</span>      justification = "FindBugs is blind to the check-for-null")<a name="line.765"></a>
+<span class="sourceLineNo">766</span>  public long submitProcedure(final Procedure proc, final NonceKey nonceKey) {<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.767"></a>
+<span class="sourceLineNo">768</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.768"></a>
+<span class="sourceLineNo">769</span><a name="line.769"></a>
+<span class="sourceLineNo">770</span>    prepareProcedure(proc);<a name="line.770"></a>
 <span class="sourceLineNo">771</span><a name="line.771"></a>
-<span class="sourceLineNo">772</span>    prepareProcedure(proc);<a name="line.772"></a>
-<span class="sourceLineNo">773</span><a name="line.773"></a>
-<span class="sourceLineNo">774</span>    final Long currentProcId;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    if (nonceKey != null) {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>      currentProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      Preconditions.checkArgument(currentProcId != null,<a name="line.777"></a>
-<span class="sourceLineNo">778</span>        "Expected nonceKey=" + nonceKey + " to be reserved, use registerNonce(); proc=" + proc);<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    } else {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      currentProcId = nextProcId();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>    // Initialize the procedure<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    proc.setNonceKey(nonceKey);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    proc.setProcId(currentProcId.longValue());<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span>    // Commit the transaction<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    store.insert(proc, null);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    if (LOG.isDebugEnabled()) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      LOG.debug("Stored " + proc);<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>    // Add the procedure to the executor<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    return pushProcedure(proc);<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>  /**<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * Add a set of new root-procedure to the executor.<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * @param procs the new procedures to execute.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   */<a name="line.800"></a>
-<span class="sourceLineNo">801</span>  // TODO: Do we need to take nonces here?<a name="line.801"></a>
-<span class="sourceLineNo">802</span>  public void submitProcedures(final Procedure[] procs) {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.804"></a>
-<span class="sourceLineNo">805</span><a name="line.805"></a>
-<span class="sourceLineNo">806</span>    // Prepare procedure<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.807"></a>
-<span class="sourceLineNo">808</span>      prepareProcedure(procs[i]).setProcId(nextProcId());<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    }<a name="line.809"></a>
-<span class="sourceLineNo">810</span><a name="line.810"></a>
-<span class="sourceLineNo">811</span>    // Commit the transaction<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    store.insert(procs);<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    if (LOG.isDebugEnabled()) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>      LOG.debug("Stored " + Arrays.toString(procs));<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>    // Add the procedure to the executor<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.818"></a>
-<span class="sourceLineNo">819</span>      pushProcedure(procs[i]);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    }<a name="line.820"></a>
-<span class="sourceLineNo">821</span>  }<a name="line.821"></a>
-<span class="sourceLineNo">822</span><a name="line.822"></a>
-<span class="sourceLineNo">823</span>  private Procedure prepareProcedure(final Procedure proc) {<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    Preconditions.checkArgument(!proc.hasParent(), "unexpected parent", proc);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    if (this.checkOwnerSet) {<a name="line.827"></a>
-<span class="sourceLineNo">828</span>      Preconditions.checkArgument(proc.hasOwner(), "missing owner");<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    }<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    return proc;<a name="line.830"></a>
-<span class="sourceLineNo">831</span>  }<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span>  private long pushProcedure(final Procedure proc) {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    final long currentProcId = proc.getProcId();<a name="line.834"></a>
-<span class="sourceLineNo">835</span><a name="line.835"></a>
-<span class="sourceLineNo">836</span>    // Create the rollback stack for the procedure<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    RootProcedureState stack = new RootProcedureState();<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    rollbackStack.put(currentProcId, stack);<a name="line.838"></a>
-<span class="sourceLineNo">839</span><a name="line.839"></a>
-<span class="sourceLineNo">840</span>    // Submit the new subprocedures<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    assert !procedures.containsKey(currentProcId);<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    procedures.put(currentProcId, proc);<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    sendProcedureAddedNotification(currentProcId);<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    scheduler.addBack(proc);<a name="line.844"></a>
-<span class="sourceLineNo">845</span>    return proc.getProcId();<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>  /**<a name="line.848"></a>
-<span class="sourceLineNo">849</span>   * Send an abort notification the specified procedure.<a name="line.849"></a>
-<span class="sourceLineNo">850</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.850"></a>
-<span class="sourceLineNo">851</span>   * @param procId the procedure to abort<a name="line.851"></a>
-<span class="sourceLineNo">852</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.852"></a>
-<span class="sourceLineNo">853</span>   */<a name="line.853"></a>
-<span class="sourceLineNo">854</span>  public boolean abort(final long procId) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    return abort(procId, true);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>  }<a name="line.856"></a>
-<span class="sourceLineNo">857</span><a name="line.857"></a>
-<span class="sourceLineNo">858</span>  /**<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * Send an abort notification the specified procedure.<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   * @param procId the procedure to abort<a name="line.861"></a>
-<span class="sourceLineNo">862</span>   * @param mayInterruptIfRunning if the proc completed at least one step, should it be aborted?<a name="line.862"></a>
-<span class="sourceLineNo">863</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.863"></a>
-<span class="sourceLineNo">864</span>   */<a name="line.864"></a>
-<span class="sourceLineNo">865</span>  public boolean abort(final long procId, final boolean mayInterruptIfRunning) {<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    final Procedure proc = procedures.get(procId);<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    if (proc != null) {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>      if (!mayInterruptIfRunning &amp;&amp; proc.wasExecuted()) {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        return false;<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      }<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      return proc.abort(getEnvironment());<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    }<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    return false;<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">772</span>    final Long currentProcId;<a name="line.772"></a>
+<span class="sourceLineNo">773</span>    if (nonceKey != null) {<a name="line.773"></a>
+<span class="sourceLineNo">774</span>      currentProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.774"></a>
+<span class="sourceLineNo">775</span>      Preconditions.checkArgument(currentProcId != null,<a name="line.775"></a>
+<span class="sourceLineNo">776</span>        "Expected nonceKey=" + nonceKey + " to be reserved, use registerNonce(); proc=" + proc);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    } else {<a name="line.777"></a>
+<span class="sourceLineNo">778</span>      currentProcId = nextProcId();<a name="line.778"></a>
+<span class="sourceLineNo">779</span>    }<a name="line.779"></a>
+<span class="sourceLineNo">780</span><a name="line.780"></a>
+<span class="sourceLineNo">781</span>    // Initialize the procedure<a name="line.781"></a>
+<span class="sourceLineNo">782</span>    proc.setNonceKey(nonceKey);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>    proc.setProcId(currentProcId.longValue());<a name="line.783"></a>
+<span class="sourceLineNo">784</span><a name="line.784"></a>
+<span class="sourceLineNo">785</span>    // Commit the transaction<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    store.insert(proc, null);<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    if (LOG.isDebugEnabled()) {<a name="line.787"></a>
+<span class="sourceLineNo">788</span>      LOG.debug("Stored " + proc);<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
+<span class="sourceLineNo">790</span><a name="line.790"></a>
+<span class="sourceLineNo">791</span>    // Add the procedure to the executor<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    return pushProcedure(proc);<a name="line.792"></a>
+<span class="sourceLineNo">793</span>  }<a name="line.793"></a>
+<span class="sourceLineNo">794</span><a name="line.794"></a>
+<span class="sourceLineNo">795</span>  /**<a name="line.795"></a>
+<span class="sourceLineNo">796</span>   * Add a set of new root-procedure to the executor.<a name="line.796"></a>
+<span class="sourceLineNo">797</span>   * @param procs the new procedures to execute.<a name="line.797"></a>
+<span class="sourceLineNo">798</span>   */<a name="line.798"></a>
+<span class="sourceLineNo">799</span>  // TODO: Do we need to take nonces here?<a name="line.799"></a>
+<span class="sourceLineNo">800</span>  public void submitProcedures(final Procedure[] procs) {<a name="line.800"></a>
+<span class="sourceLineNo">801</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.801"></a>
+<span class="sourceLineNo">802</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.802"></a>
+<span class="sourceLineNo">803</span><a name="line.803"></a>
+<span class="sourceLineNo">804</span>    // Prepare procedure<a name="line.804"></a>
+<span class="sourceLineNo">805</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.805"></a>
+<span class="sourceLineNo">806</span>      prepareProcedure(procs[i]).setProcId(nextProcId());<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    }<a name="line.807"></a>
+<span class="sourceLineNo">808</span><a name="line.808"></a>
+<span class="sourceLineNo">809</span>    // Commit the transaction<a name="line.809"></a>
+<span class="sourceLineNo">810</span>    store.insert(procs);<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    if (LOG.isDebugEnabled()) {<a name="line.811"></a>
+<span class="sourceLineNo">812</span>      LOG.debug("Stored " + Arrays.toString(procs));<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    }<a name="line.813"></a>
+<span class="sourceLineNo">814</span><a name="line.814"></a>
+<span class="sourceLineNo">815</span>    // Add the procedure to the executor<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.816"></a>
+<span class="sourceLineNo">817</span>      pushProcedure(procs[i]);<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
+<span class="sourceLineNo">819</span>  }<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span>  private Procedure prepareProcedure(final Procedure proc) {<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.822"></a>
+<span class="sourceLineNo">823</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.823"></a>
+<span class="sourceLineNo">824</span>    Preconditions.checkArgument(!proc.hasParent(), "unexpected parent", proc);<a name="line.824"></a>
+<span class="sourceLineNo">825</span>    if (this.checkOwnerSet) {<a name="line.825"></a>
+<span class="sourceLineNo">826</span>      Preconditions.checkArgument(proc.hasOwner(), "missing owner");<a name="line.826"></a>
+<span class="sourceLineNo">827</span>    }<a name="line.827"></a>
+<span class="sourceLineNo">828</span>    return proc;<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>  private long pushProcedure(final Procedure proc) {<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    final long currentProcId = proc.getProcId();<a name="line.832"></a>
+<span class="sourceLineNo">833</span><a name="line.833"></a>
+<span class="sourceLineNo">834</span>    // Create the rollback stack for the procedure<a name="line.834"></a>
+<span class="sourceLineNo">835</span>    RootProcedureState stack = new RootProcedureState();<a name="line.835"></a>
+<span class="sourceLineNo">836</span>    rollbackStack.put(currentProcId, stack);<a name="line.836"></a>
+<span class="sourceLineNo">837</span><a name="line.837"></a>
+<span class="sourceLineNo">838</span>    // Submit the new subprocedures<a name="line.838"></a>
+<span class="sourceLineNo">839</span>    assert !procedures.containsKey(currentProcId);<a name="line.839"></a>
+<span class="sourceLineNo">840</span>    procedures.put(currentProcId,

<TRUNCATED>

[04/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html
index 22e0fbd..c2b04b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.html
@@ -57,7 +57,7 @@
 <span class="sourceLineNo">049</span>  //   - INIT: Procedure submitted by the user (also known as 'root procedure')<a name="line.49"></a>
 <span class="sourceLineNo">050</span>  //   - INSERT: Children added to the procedure &lt;parentId&gt;:[&lt;childId&gt;, ...]<a name="line.50"></a>
 <span class="sourceLineNo">051</span>  //   - UPDATE: The specified procedure was updated<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  //   - DELETE: The procedure was removed (completed/rolledback and result TTL expired)<a name="line.52"></a>
+<span class="sourceLineNo">052</span>  //   - DELETE: The procedure was removed (finished/rolledback and result TTL expired)<a name="line.52"></a>
 <span class="sourceLineNo">053</span>  //<a name="line.53"></a>
 <span class="sourceLineNo">054</span>  // In the WAL we can find multiple times the same procedure as UPDATE or INSERT.<a name="line.54"></a>
 <span class="sourceLineNo">055</span>  // We read the WAL from top to bottom, so every time we find an entry of the<a name="line.55"></a>
@@ -334,505 +334,504 @@
 <span class="sourceLineNo">326</span>    public boolean hasParent() { return proto.hasParentId(); }<a name="line.326"></a>
 <span class="sourceLineNo">327</span>    public boolean isReady() { return ready; }<a name="line.327"></a>
 <span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span>    public boolean isCompleted() {<a name="line.329"></a>
+<span class="sourceLineNo">329</span>    public boolean isFinished() {<a name="line.329"></a>
 <span class="sourceLineNo">330</span>      if (!hasParent()) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        // we only consider 'root' procedures. because for the user 'completed'<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        // means when everything up to the 'root' is complete.<a name="line.332"></a>
+<span class="sourceLineNo">331</span>        // we only consider 'root' procedures. because for the user 'finished'<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        // means when everything up to the 'root' is finished.<a name="line.332"></a>
 <span class="sourceLineNo">333</span>        switch (proto.getState()) {<a name="line.333"></a>
 <span class="sourceLineNo">334</span>          case ROLLEDBACK:<a name="line.334"></a>
-<span class="sourceLineNo">335</span>            return true;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>          case FINISHED:<a name="line.336"></a>
-<span class="sourceLineNo">337</span>            return !proto.hasException();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>          default:<a name="line.338"></a>
-<span class="sourceLineNo">339</span>            break;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>        }<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      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>    public Procedure convert() throws IOException {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      if (procedure == null) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        procedure = ProcedureUtil.convertToProcedure(proto);<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      }<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      return procedure;<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>    public ProcedureInfo convertToInfo() {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      return ProcedureUtil.convertToProcedureInfo(proto);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>    @Override<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    public String toString() {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      final StringBuilder sb = new StringBuilder();<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      sb.append("Entry(");<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      sb.append(getProcId());<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      sb.append(", parentId=");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      sb.append(getParentId());<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      sb.append(", class=");<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      sb.append(proto.getClassName());<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      sb.append(")");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      return sb.toString();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  }<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>  private static class EntryIterator implements ProcedureIterator {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    private final Entry replayHead;<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    private Entry current;<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span>    public EntryIterator(Entry replayHead) {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      this.replayHead = replayHead;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      this.current = replayHead;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>    @Override<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    public void reset() {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      this.current = replayHead;<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>    @Override<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    public boolean hasNext() {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      return current != null;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>    @Override<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    public boolean isNextCompleted() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      return current != null &amp;&amp; current.isCompleted();<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    @Override<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    public void skipNext() {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      current = current.replayNext;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    }<a name="line.397"></a>
-<span class="sourceLineNo">398</span><a name="line.398"></a>
-<span class="sourceLineNo">399</span>    @Override<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    public Procedure nextAsProcedure() throws IOException {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      try {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        return current.convert();<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      } finally {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        current = current.replayNext;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      }<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    @Override<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    public ProcedureInfo nextAsProcedureInfo() {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      try {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        return current.convertToInfo();<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      } finally {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        current = current.replayNext;<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      }<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>  private static class WalProcedureMap {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    // procedure hash table<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    private Entry[] procedureMap;<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>    // replay-order double-linked-list<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    private Entry replayOrderHead;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    private Entry replayOrderTail;<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    // root linked-list<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    private Entry rootHead;<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // pending unlinked children (root not present yet)<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    private Entry childUnlinkedHead;<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>    // Track ProcId range<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    private long minProcId = Long.MAX_VALUE;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    private long maxProcId = Long.MIN_VALUE;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>    public WalProcedureMap(int size) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      procedureMap = new Entry[size];<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      replayOrderHead = null;<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      replayOrderTail = null;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      rootHead = null;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      childUnlinkedHead = null;<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span>    public void add(ProcedureProtos.Procedure procProto) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      trackProcIds(procProto.getProcId());<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      Entry entry = addToMap(procProto.getProcId(), procProto.hasParentId());<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      boolean isNew = entry.proto == null;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      entry.proto = procProto;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      addToReplayList(entry);<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>      if (isNew) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        if (procProto.hasParentId()) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>          childUnlinkedHead = addToLinkList(entry, childUnlinkedHead);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        } else {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>          rootHead = addToLinkList(entry, rootHead);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        }<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span>    public boolean remove(long procId) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      trackProcIds(procId);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      Entry entry = removeFromMap(procId);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      if (entry != null) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>        unlinkFromReplayList(entry);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>        unlinkFromLinkList(entry);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>        return true;<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      }<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      return false;<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>    private void trackProcIds(long procId) {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      minProcId = Math.min(minProcId, procId);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      maxProcId = Math.max(maxProcId, procId);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
-<span class="sourceLineNo">475</span><a name="line.475"></a>
-<span class="sourceLineNo">476</span>    public long getMinProcId() {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      return minProcId;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span>    public long getMaxProcId() {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      return maxProcId;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    }<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>    public boolean contains(long procId) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      return getProcedure(procId) != null;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    }<a name="line.486"></a>
-<span class="sourceLineNo">487</span><a name="line.487"></a>
-<span class="sourceLineNo">488</span>    public boolean isEmpty() {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      return replayOrderHead == null;<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>    public void clear() {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        procedureMap[i] = null;<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      }<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      replayOrderHead = null;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      replayOrderTail = null;<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      rootHead = null;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      childUnlinkedHead = null;<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      minProcId = Long.MAX_VALUE;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      maxProcId = Long.MIN_VALUE;<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    }<a name="line.502"></a>
-<span class="sourceLineNo">503</span><a name="line.503"></a>
-<span class="sourceLineNo">504</span>    /*<a name="line.504"></a>
-<span class="sourceLineNo">505</span>     * Merges two WalProcedureMap,<a name="line.505"></a>
-<span class="sourceLineNo">506</span>     * the target is the "global" map, the source is the "local" map.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>     *  - The entries in the hashtables are guaranteed to be unique.<a name="line.507"></a>
-<span class="sourceLineNo">508</span>     *    On replay we don't load procedures that already exist in the "global"<a name="line.508"></a>
-<span class="sourceLineNo">509</span>     *    map (the one we are merging the "local" in to).<a name="line.509"></a>
-<span class="sourceLineNo">510</span>     *  - The replayOrderList of the "local" nao will be appended to the "global"<a name="line.510"></a>
-<span class="sourceLineNo">511</span>     *    map replay list.<a name="line.511"></a>
-<span class="sourceLineNo">512</span>     *  - The "local" map will be cleared at the end of the operation.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>     */<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    public void mergeTail(WalProcedureMap other) {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      for (Entry p = other.replayOrderHead; p != null; p = p.replayNext) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        int slotIndex = getMapSlot(p.getProcId());<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        p.hashNext = procedureMap[slotIndex];<a name="line.517"></a>
-<span class="sourceLineNo">518</span>        procedureMap[slotIndex] = p;<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      }<a name="line.519"></a>
-<span class="sourceLineNo">520</span><a name="line.520"></a>
-<span class="sourceLineNo">521</span>      if (replayOrderHead == null) {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        replayOrderHead = other.replayOrderHead;<a name="line.522"></a>
-<span class="sourceLineNo">523</span>        replayOrderTail = other.replayOrderTail;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>        rootHead = other.rootHead;<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        childUnlinkedHead = other.childUnlinkedHead;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      } else {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        // append replay list<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        assert replayOrderTail.replayNext == null;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>        assert other.replayOrderHead.replayPrev == null;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>        replayOrderTail.replayNext = other.replayOrderHead;<a name="line.530"></a>
-<span class="sourceLineNo">531</span>        other.replayOrderHead.replayPrev = replayOrderTail;<a name="line.531"></a>
-<span class="sourceLineNo">532</span>        replayOrderTail = other.replayOrderTail;<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>        // merge rootHead<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        if (rootHead == null) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          rootHead = other.rootHead;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        } else if (other.rootHead != null) {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          Entry otherTail = findLinkListTail(other.rootHead);<a name="line.538"></a>
-<span class="sourceLineNo">539</span>          otherTail.linkNext = rootHead;<a name="line.539"></a>
-<span class="sourceLineNo">540</span>          rootHead.linkPrev = otherTail;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>          rootHead = other.rootHead;<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>        // merge childUnlinkedHead<a name="line.544"></a>
-<span class="sourceLineNo">545</span>        if (childUnlinkedHead == null) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>          childUnlinkedHead = other.childUnlinkedHead;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>        } else if (other.childUnlinkedHead != null) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>          Entry otherTail = findLinkListTail(other.childUnlinkedHead);<a name="line.548"></a>
-<span class="sourceLineNo">549</span>          otherTail.linkNext = childUnlinkedHead;<a name="line.549"></a>
-<span class="sourceLineNo">550</span>          childUnlinkedHead.linkPrev = otherTail;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>          childUnlinkedHead = other.childUnlinkedHead;<a name="line.551"></a>
-<span class="sourceLineNo">552</span>        }<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      }<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      maxProcId = Math.max(maxProcId, other.maxProcId);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      minProcId = Math.max(minProcId, other.minProcId);<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>      other.clear();<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    /*<a name="line.560"></a>
-<span class="sourceLineNo">561</span>     * Returns an EntryIterator with the list of procedures ready<a name="line.561"></a>
-<span class="sourceLineNo">562</span>     * to be added to the executor.<a name="line.562"></a>
-<span class="sourceLineNo">563</span>     * A Procedure is ready if its children and parent are ready.<a name="line.563"></a>
-<span class="sourceLineNo">564</span>     */<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    public EntryIterator fetchReady() {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      buildGraph();<a name="line.566"></a>
-<span class="sourceLineNo">567</span><a name="line.567"></a>
-<span class="sourceLineNo">568</span>      Entry readyHead = null;<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      Entry readyTail = null;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      Entry p = replayOrderHead;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      while (p != null) {<a name="line.571"></a>
-<span class="sourceLineNo">572</span>        Entry next = p.replayNext;<a name="line.572"></a>
-<span class="sourceLineNo">573</span>        if (p.isReady()) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          unlinkFromReplayList(p);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>          if (readyTail != null) {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>            readyTail.replayNext = p;<a name="line.576"></a>
-<span class="sourceLineNo">577</span>            p.replayPrev = readyTail;<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          } else {<a name="line.578"></a>
-<span class="sourceLineNo">579</span>            p.replayPrev = null;<a name="line.579"></a>
-<span class="sourceLineNo">580</span>            readyHead = p;<a name="line.580"></a>
-<span class="sourceLineNo">581</span>          }<a name="line.581"></a>
-<span class="sourceLineNo">582</span>          readyTail = p;<a name="line.582"></a>
-<span class="sourceLineNo">583</span>          p.replayNext = null;<a name="line.583"></a>
-<span class="sourceLineNo">584</span>        }<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        p = next;<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      }<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      // we need the hash-table lookups for parents, so this must be done<a name="line.587"></a>
-<span class="sourceLineNo">588</span>      // out of the loop where we check isReadyToRun()<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      for (p = readyHead; p != null; p = p.replayNext) {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>        removeFromMap(p.getProcId());<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        unlinkFromLinkList(p);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      }<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      return readyHead != null ? new EntryIterator(readyHead) : null;<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    }<a name="line.594"></a>
-<span class="sourceLineNo">595</span><a name="line.595"></a>
-<span class="sourceLineNo">596</span>    /*<a name="line.596"></a>
-<span class="sourceLineNo">597</span>     * Drain this map and return all procedures in it.<a name="line.597"></a>
-<span class="sourceLineNo">598</span>     */<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    public EntryIterator fetchAll() {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      Entry head = replayOrderHead;<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      for (Entry p = head; p != null; p = p.replayNext) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>        removeFromMap(p.getProcId());<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      }<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>        assert procedureMap[i] == null : "map not empty i=" + i;<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      }<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      replayOrderHead = null;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>      replayOrderTail = null;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      childUnlinkedHead = null;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      rootHead = null;<a name="line.610"></a>
-<span class="sourceLineNo">611</span>      return head != null ? new EntryIterator(head) : null;<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>    private void buildGraph() {<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      Entry p = childUnlinkedHead;<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      while (p != null) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        Entry next = p.linkNext;<a name="line.617"></a>
-<span class="sourceLineNo">618</span>        Entry rootProc = getRootProcedure(p);<a name="line.618"></a>
-<span class="sourceLineNo">619</span>        if (rootProc != null) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          rootProc.childHead = addToLinkList(p, rootProc.childHead);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>        }<a name="line.621"></a>
-<span class="sourceLineNo">622</span>        p = next;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>      for (p = rootHead; p != null; p = p.linkNext) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        checkReadyToRun(p);<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><a name="line.629"></a>
-<span class="sourceLineNo">630</span>    private Entry getRootProcedure(Entry entry) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      while (entry != null &amp;&amp; entry.hasParent()) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>        entry = getProcedure(entry.getParentId());<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      return entry;<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>    /*<a name="line.637"></a>
-<span class="sourceLineNo">638</span>     * (see the comprehensive explaination in the beginning of the file)<a name="line.638"></a>
-<span class="sourceLineNo">639</span>     * A Procedure is ready when parent and children are ready.<a name="line.639"></a>
-<span class="sourceLineNo">640</span>     * "ready" means that we all the information that we need in-memory.<a name="line.640"></a>
-<span class="sourceLineNo">641</span>     *<a name="line.641"></a>
-<span class="sourceLineNo">642</span>     * Example-1:<a name="line.642"></a>
-<span class="sourceLineNo">643</span>     * We have two WALs, we start reading fronm the newest (wal-2)<a name="line.643"></a>
-<span class="sourceLineNo">644</span>     *    wal-2 | C B |<a name="line.644"></a>
-<span class="sourceLineNo">645</span>     *    wal-1 | A B C |<a name="line.645"></a>
-<span class="sourceLineNo">646</span>     *<a name="line.646"></a>
-<span class="sourceLineNo">647</span>     * If C and B don't depend on A (A is not the parent), we can start them<a name="line.647"></a>
-<span class="sourceLineNo">648</span>     * before reading wal-1. If B is the only one with parent A we can start C<a name="line.648"></a>
-<span class="sourceLineNo">649</span>     * and read one more WAL before being able to start B.<a name="line.649"></a>
-<span class="sourceLineNo">650</span>     *<a name="line.650"></a>
-<span class="sourceLineNo">651</span>     * How do we know with the only information in B that we are not ready.<a name="line.651"></a>
-<span class="sourceLineNo">652</span>     *  - easy case, the parent is missing from the global map<a name="line.652"></a>
-<span class="sourceLineNo">653</span>     *  - more complex case we look at the Stack IDs<a name="line.653"></a>
-<span class="sourceLineNo">654</span>     *<a name="line.654"></a>
-<span class="sourceLineNo">655</span>     * The Stack-IDs are added to the procedure order as incremental index<a name="line.655"></a>
-<span class="sourceLineNo">656</span>     * tracking how many times that procedure was executed, which is equivalent<a name="line.656"></a>
-<span class="sourceLineNo">657</span>     * at the number of times we wrote the procedure to the WAL.<a name="line.657"></a>
-<span class="sourceLineNo">658</span>     * In the example above:<a name="line.658"></a>
-<span class="sourceLineNo">659</span>     *   wal-2: B has stackId = [1, 2]<a name="line.659"></a>
-<span class="sourceLineNo">660</span>     *   wal-1: B has stackId = [1]<a name="line.660"></a>
-<span class="sourceLineNo">661</span>     *   wal-1: A has stackId = [0]<a name="line.661"></a>
-<span class="sourceLineNo">662</span>     *<a name="line.662"></a>
-<span class="sourceLineNo">663</span>     * Since we know that the Stack-IDs are incremental for a Procedure,<a name="line.663"></a>
-<span class="sourceLineNo">664</span>     * we notice that there is a gap in the stackIds of B, so something was<a name="line.664"></a>
-<span class="sourceLineNo">665</span>     * executed before.<a name="line.665"></a>
-<span class="sourceLineNo">666</span>     * To identify when a Procedure is ready we do the sum of the stackIds of<a name="line.666"></a>
-<span class="sourceLineNo">667</span>     * the procedure and the parent. if the stackIdSum is equals to the<a name="line.667"></a>
-<span class="sourceLineNo">668</span>     * sum of {1..maxStackId} then everything we need is avaiable.<a name="line.668"></a>
-<span class="sourceLineNo">669</span>     *<a name="line.669"></a>
-<span class="sourceLineNo">670</span>     * Example-2<a name="line.670"></a>
-<span class="sourceLineNo">671</span>     *    wal-2 | A |              A stackIds = [0, 2]<a name="line.671"></a>
-<span class="sourceLineNo">672</span>     *    wal-1 | A B |            B stackIds = [1]<a name="line.672"></a>
-<span class="sourceLineNo">673</span>     *<a name="line.673"></a>
-<span class="sourceLineNo">674</span>     * There is a gap between A stackIds so something was executed in between.<a name="line.674"></a>
-<span class="sourceLineNo">675</span>     */<a name="line.675"></a>
-<span class="sourceLineNo">676</span>    private boolean checkReadyToRun(Entry rootEntry) {<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      assert !rootEntry.hasParent() : "expected root procedure, got " + rootEntry;<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span>      if (rootEntry.isCompleted()) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>        // if the root procedure is completed, sub-procedures should be gone<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        if (rootEntry.childHead != null) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>          LOG.error("unexpected active children for root-procedure: " + rootEntry);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>            LOG.error("unexpected active children: " + p);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>          }<a name="line.685"></a>
-<span class="sourceLineNo">686</span>        }<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>        assert rootEntry.childHead == null : "unexpected children on root completion. " + rootEntry;<a name="line.688"></a>
-<span class="sourceLineNo">689</span>        rootEntry.ready = true;<a name="line.689"></a>
-<span class="sourceLineNo">690</span>        return true;<a name="line.690"></a>
-<span class="sourceLineNo">691</span>      }<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span>      int stackIdSum = 0;<a name="line.693"></a>
-<span class="sourceLineNo">694</span>      int maxStackId = 0;<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      for (int i = 0; i &lt; rootEntry.proto.getStackIdCount(); ++i) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>        int stackId = 1 + rootEntry.proto.getStackId(i);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>        maxStackId  = Math.max(maxStackId, stackId);<a name="line.697"></a>
-<span class="sourceLineNo">698</span>        stackIdSum += stackId;<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>      for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span>        for (int i = 0; i &lt; p.proto.getStackIdCount(); ++i) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span>          int stackId = 1 + p.proto.getStackId(i);<a name="line.703"></a>
-<span class="sourceLineNo">704</span>          maxStackId  = Math.max(maxStackId, stackId);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>          stackIdSum += stackId;<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        }<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      }<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      final int cmpStackIdSum = (maxStackId * (maxStackId + 1) / 2);<a name="line.708"></a>
-<span class="sourceLineNo">709</span>      if (cmpStackIdSum == stackIdSum) {<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        rootEntry.ready = true;<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>          p.ready = true;<a name="line.712"></a>
-<span class="sourceLineNo">713</span>        }<a name="line.713"></a>
-<span class="sourceLineNo">714</span>        return true;<a name="line.714"></a>
-<span class="sourceLineNo">715</span>      }<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      return false;<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    }<a name="line.717"></a>
-<span class="sourceLineNo">718</span><a name="line.718"></a>
-<span class="sourceLineNo">719</span>    private void unlinkFromReplayList(Entry entry) {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      if (replayOrderHead == entry) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>        replayOrderHead = entry.replayNext;<a name="line.721"></a>
-<span class="sourceLineNo">722</span>      }<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      if (replayOrderTail == entry) {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>        replayOrderTail = entry.replayPrev;<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      }<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      if (entry.replayPrev != null) {<a name="line.726"></a>
-<span class="sourceLineNo">727</span>        entry.replayPrev.replayNext = entry.replayNext;<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      }<a name="line.728"></a>
-<span class="sourceLineNo">729</span>      if (entry.replayNext != null) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        entry.replayNext.replayPrev = entry.replayPrev;<a name="line.730"></a>
-<span class="sourceLineNo">731</span>      }<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    }<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>    private void addToReplayList(final Entry entry) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>      unlinkFromReplayList(entry);<a name="line.735"></a>
-<span class="sourceLineNo">736</span>      entry.replayNext = replayOrderHead;<a name="line.736"></a>
-<span class="sourceLineNo">737</span>      entry.replayPrev = null;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>      if (replayOrderHead != null) {<a name="line.738"></a>
-<span class="sourceLineNo">739</span>        replayOrderHead.replayPrev = entry;<a name="line.739"></a>
-<span class="sourceLineNo">740</span>      } else {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>        replayOrderTail = entry;<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      }<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      replayOrderHead = entry;<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>    private void unlinkFromLinkList(Entry entry) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>      if (entry == rootHead) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>        rootHead = entry.linkNext;<a name="line.748"></a>
-<span class="sourceLineNo">749</span>      } else if (entry == childUnlinkedHead) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>        childUnlinkedHead = entry.linkNext;<a name="line.750"></a>
-<span class="sourceLineNo">751</span>      }<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      if (entry.linkPrev != null) {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        entry.linkPrev.linkNext = entry.linkNext;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>      if (entry.linkNext != null) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span>        entry.linkNext.linkPrev = entry.linkPrev;<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><a name="line.759"></a>
-<span class="sourceLineNo">760</span>    private Entry addToLinkList(Entry entry, Entry linkHead) {<a name="line.760"></a>
-<span class="sourceLineNo">761</span>      unlinkFromLinkList(entry);<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      entry.linkNext = linkHead;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      entry.linkPrev = null;<a name="line.763"></a>
-<span class="sourceLineNo">764</span>      if (linkHead != null) {<a name="line.764"></a>
-<span class="sourceLineNo">765</span>        linkHead.linkPrev = entry;<a name="line.765"></a>
-<span class="sourceLineNo">766</span>      }<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      return entry;<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    }<a name="line.768"></a>
-<span class="sourceLineNo">769</span><a name="line.769"></a>
-<span class="sourceLineNo">770</span>    private Entry findLinkListTail(Entry linkHead) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>      Entry tail = linkHead;<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      while (tail.linkNext != null) {<a name="line.772"></a>
-<span class="sourceLineNo">773</span>        tail = tail.linkNext;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>      }<a name="line.774"></a>
-<span class="sourceLineNo">775</span>      return tail;<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    }<a name="line.776"></a>
-<span class="sourceLineNo">777</span><a name="line.777"></a>
-<span class="sourceLineNo">778</span>    private Entry addToMap(final long procId, final boolean hasParent) {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      int slotIndex = getMapSlot(procId);<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      Entry entry = getProcedure(slotIndex, procId);<a name="line.780"></a>
-<span class="sourceLineNo">781</span>      if (entry != null) return entry;<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>      entry = new Entry(procedureMap[slotIndex]);<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      procedureMap[slotIndex] = entry;<a name="line.784"></a>
-<span class="sourceLineNo">785</span>      return entry;<a name="line.785"></a>
-<span class="sourceLineNo">786</span>    }<a name="line.786"></a>
-<span class="sourceLineNo">787</span><a name="line.787"></a>
-<span class="sourceLineNo">788</span>    private Entry removeFromMap(final long procId) {<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      int slotIndex = getMapSlot(procId);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      Entry prev = null;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>      Entry entry = procedureMap[slotIndex];<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      while (entry != null) {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>        if (procId == entry.getProcId()) {<a name="line.793"></a>
-<span class="sourceLineNo">794</span>          if (prev != null) {<a name="line.794"></a>
-<span class="sourceLineNo">795</span>            prev.hashNext = entry.hashNext;<a name="line.795"></a>
-<span class="sourceLineNo">796</span>          } else {<a name="line.796"></a>
-<span class="sourceLineNo">797</span>            procedureMap[slotIndex] = entry.hashNext;<a name="line.797"></a>
-<span class="sourceLineNo">798</span>          }<a name="line.798"></a>
-<span class="sourceLineNo">799</span>          entry.hashNext = null;<a name="line.799"></a>
-<span class="sourceLineNo">800</span>          return entry;<a name="line.800"></a>
-<span class="sourceLineNo">801</span>        }<a name="line.801"></a>
-<span class="sourceLineNo">802</span>        prev = entry;<a name="line.802"></a>
-<span class="sourceLineNo">803</span>        entry = entry.hashNext;<a name="line.803"></a>
-<span class="sourceLineNo">804</span>      }<a name="line.804"></a>
-<span class="sourceLineNo">805</span>      return null;<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    }<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span>    private Entry getProcedure(final long procId) {<a name="line.808"></a>
-<span class="sourceLineNo">809</span>      return getProcedure(getMapSlot(procId), procId);<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    }<a name="line.810"></a>
-<span class="sourceLineNo">811</span><a name="line.811"></a>
-<span class="sourceLineNo">812</span>    private Entry getProcedure(final int slotIndex, final long procId) {<a name="line.812"></a>
-<span class="sourceLineNo">813</span>      Entry entry = procedureMap[slotIndex];<a name="line.813"></a>
-<span class="sourceLineNo">814</span>      while (entry != null) {<a name="line.814"></a>
-<span class="sourceLineNo">815</span>        if (procId == entry.getProcId()) {<a name="line.815"></a>
-<span class="sourceLineNo">816</span>          return entry;<a name="line.816"></a>
-<span class="sourceLineNo">817</span>        }<a name="line.817"></a>
-<span class="sourceLineNo">818</span>        entry = entry.hashNext;<a name="line.818"></a>
-<span class="sourceLineNo">819</span>      }<a name="line.819"></a>
-<span class="sourceLineNo">820</span>      return null;<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>    private int getMapSlot(final long procId) {<a name="line.823"></a>
-<span class="sourceLineNo">824</span>      return (int)(Procedure.getProcIdHashCode(procId) % procedureMap.length);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    }<a name="line.825"></a>
-<span class="sourceLineNo">826</span>  }<a name="line.826"></a>
-<span class="sourceLineNo">827</span>}<a name="line.827"></a>
+<span class="sourceLineNo">335</span>          case SUCCESS:<a name="line.335"></a>
+<span class="sourceLineNo">336</span>            return true;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>          default:<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            break;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        }<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      }<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      return false;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    }<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>    public Procedure convert() throws IOException {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      if (procedure == null) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        procedure = ProcedureUtil.convertToProcedure(proto);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      }<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      return procedure;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span>    public ProcedureInfo convertToInfo() {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      return ProcedureUtil.convertToProcedureInfo(proto);<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>    @Override<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    public String toString() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      final StringBuilder sb = new StringBuilder();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      sb.append("Entry(");<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      sb.append(getProcId());<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      sb.append(", parentId=");<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      sb.append(getParentId());<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      sb.append(", class=");<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      sb.append(proto.getClassName());<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      sb.append(")");<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      return sb.toString();<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span>  }<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span>  private static class EntryIterator implements ProcedureIterator {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    private final Entry replayHead;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    private Entry current;<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>    public EntryIterator(Entry replayHead) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      this.replayHead = replayHead;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      this.current = replayHead;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>    @Override<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    public void reset() {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      this.current = replayHead;<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>    @Override<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    public boolean hasNext() {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      return current != null;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    }<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span>    @Override<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    public boolean isNextFinished() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      return current != null &amp;&amp; current.isFinished();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span>    @Override<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    public void skipNext() {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>      current = current.replayNext;<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    }<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span>    @Override<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    public Procedure nextAsProcedure() throws IOException {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        return current.convert();<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      } finally {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        current = current.replayNext;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      }<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    }<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span>    @Override<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    public ProcedureInfo nextAsProcedureInfo() {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      try {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        return current.convertToInfo();<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      } finally {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        current = current.replayNext;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      }<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  }<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span>  private static class WalProcedureMap {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    // procedure hash table<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    private Entry[] procedureMap;<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span>    // replay-order double-linked-list<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    private Entry replayOrderHead;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    private Entry replayOrderTail;<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>    // root linked-list<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    private Entry rootHead;<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span>    // pending unlinked children (root not present yet)<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    private Entry childUnlinkedHead;<a name="line.429"></a>
+<span class="sourceLineNo">430</span><a name="line.430"></a>
+<span class="sourceLineNo">431</span>    // Track ProcId range<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    private long minProcId = Long.MAX_VALUE;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    private long maxProcId = Long.MIN_VALUE;<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>    public WalProcedureMap(int size) {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      procedureMap = new Entry[size];<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      replayOrderHead = null;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      replayOrderTail = null;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      rootHead = null;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      childUnlinkedHead = null;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    }<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>    public void add(ProcedureProtos.Procedure procProto) {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      trackProcIds(procProto.getProcId());<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      Entry entry = addToMap(procProto.getProcId(), procProto.hasParentId());<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      boolean isNew = entry.proto == null;<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      entry.proto = procProto;<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      addToReplayList(entry);<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>      if (isNew) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        if (procProto.hasParentId()) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          childUnlinkedHead = addToLinkList(entry, childUnlinkedHead);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        } else {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>          rootHead = addToLinkList(entry, rootHead);<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>    }<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>    public boolean remove(long procId) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      trackProcIds(procId);<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      Entry entry = removeFromMap(procId);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      if (entry != null) {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        unlinkFromReplayList(entry);<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        unlinkFromLinkList(entry);<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        return true;<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      }<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      return false;<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>    private void trackProcIds(long procId) {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      minProcId = Math.min(minProcId, procId);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      maxProcId = Math.max(maxProcId, procId);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    }<a name="line.473"></a>
+<span class="sourceLineNo">474</span><a name="line.474"></a>
+<span class="sourceLineNo">475</span>    public long getMinProcId() {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      return minProcId;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    public long getMaxProcId() {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      return maxProcId;<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>    public boolean contains(long procId) {<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      return getProcedure(procId) != null;<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    }<a name="line.485"></a>
+<span class="sourceLineNo">486</span><a name="line.486"></a>
+<span class="sourceLineNo">487</span>    public boolean isEmpty() {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      return replayOrderHead == null;<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>    public void clear() {<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.492"></a>
+<span class="sourceLineNo">493</span>        procedureMap[i] = null;<a name="line.493"></a>
+<span class="sourceLineNo">494</span>      }<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      replayOrderHead = null;<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      replayOrderTail = null;<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      rootHead = null;<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      childUnlinkedHead = null;<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      minProcId = Long.MAX_VALUE;<a name="line.499"></a>
+<span class="sourceLineNo">500</span>      maxProcId = Long.MIN_VALUE;<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>    /*<a name="line.503"></a>
+<span class="sourceLineNo">504</span>     * Merges two WalProcedureMap,<a name="line.504"></a>
+<span class="sourceLineNo">505</span>     * the target is the "global" map, the source is the "local" map.<a name="line.505"></a>
+<span class="sourceLineNo">506</span>     *  - The entries in the hashtables are guaranteed to be unique.<a name="line.506"></a>
+<span class="sourceLineNo">507</span>     *    On replay we don't load procedures that already exist in the "global"<a name="line.507"></a>
+<span class="sourceLineNo">508</span>     *    map (the one we are merging the "local" in to).<a name="line.508"></a>
+<span class="sourceLineNo">509</span>     *  - The replayOrderList of the "local" nao will be appended to the "global"<a name="line.509"></a>
+<span class="sourceLineNo">510</span>     *    map replay list.<a name="line.510"></a>
+<span class="sourceLineNo">511</span>     *  - The "local" map will be cleared at the end of the operation.<a name="line.511"></a>
+<span class="sourceLineNo">512</span>     */<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    public void mergeTail(WalProcedureMap other) {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      for (Entry p = other.replayOrderHead; p != null; p = p.replayNext) {<a name="line.514"></a>
+<span class="sourceLineNo">515</span>        int slotIndex = getMapSlot(p.getProcId());<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        p.hashNext = procedureMap[slotIndex];<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        procedureMap[slotIndex] = p;<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span><a name="line.519"></a>
+<span class="sourceLineNo">520</span>      if (replayOrderHead == null) {<a name="line.520"></a>
+<span class="sourceLineNo">521</span>        replayOrderHead = other.replayOrderHead;<a name="line.521"></a>
+<span class="sourceLineNo">522</span>        replayOrderTail = other.replayOrderTail;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>        rootHead = other.rootHead;<a name="line.523"></a>
+<span class="sourceLineNo">524</span>        childUnlinkedHead = other.childUnlinkedHead;<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      } else {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>        // append replay list<a name="line.526"></a>
+<span class="sourceLineNo">527</span>        assert replayOrderTail.replayNext == null;<a name="line.527"></a>
+<span class="sourceLineNo">528</span>        assert other.replayOrderHead.replayPrev == null;<a name="line.528"></a>
+<span class="sourceLineNo">529</span>        replayOrderTail.replayNext = other.replayOrderHead;<a name="line.529"></a>
+<span class="sourceLineNo">530</span>        other.replayOrderHead.replayPrev = replayOrderTail;<a name="line.530"></a>
+<span class="sourceLineNo">531</span>        replayOrderTail = other.replayOrderTail;<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>        // merge rootHead<a name="line.533"></a>
+<span class="sourceLineNo">534</span>        if (rootHead == null) {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>          rootHead = other.rootHead;<a name="line.535"></a>
+<span class="sourceLineNo">536</span>        } else if (other.rootHead != null) {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>          Entry otherTail = findLinkListTail(other.rootHead);<a name="line.537"></a>
+<span class="sourceLineNo">538</span>          otherTail.linkNext = rootHead;<a name="line.538"></a>
+<span class="sourceLineNo">539</span>          rootHead.linkPrev = otherTail;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>          rootHead = other.rootHead;<a name="line.540"></a>
+<span class="sourceLineNo">541</span>        }<a name="line.541"></a>
+<span class="sourceLineNo">542</span><a name="line.542"></a>
+<span class="sourceLineNo">543</span>        // merge childUnlinkedHead<a name="line.543"></a>
+<span class="sourceLineNo">544</span>        if (childUnlinkedHead == null) {<a name="line.544"></a>
+<span class="sourceLineNo">545</span>          childUnlinkedHead = other.childUnlinkedHead;<a name="line.545"></a>
+<span class="sourceLineNo">546</span>        } else if (other.childUnlinkedHead != null) {<a name="line.546"></a>
+<span class="sourceLineNo">547</span>          Entry otherTail = findLinkListTail(other.childUnlinkedHead);<a name="line.547"></a>
+<span class="sourceLineNo">548</span>          otherTail.linkNext = childUnlinkedHead;<a name="line.548"></a>
+<span class="sourceLineNo">549</span>          childUnlinkedHead.linkPrev = otherTail;<a name="line.549"></a>
+<span class="sourceLineNo">550</span>          childUnlinkedHead = other.childUnlinkedHead;<a name="line.550"></a>
+<span class="sourceLineNo">551</span>        }<a name="line.551"></a>
+<span class="sourceLineNo">552</span>      }<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      maxProcId = Math.max(maxProcId, other.maxProcId);<a name="line.553"></a>
+<span class="sourceLineNo">554</span>      minProcId = Math.max(minProcId, other.minProcId);<a name="line.554"></a>
+<span class="sourceLineNo">555</span><a name="line.555"></a>
+<span class="sourceLineNo">556</span>      other.clear();<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    }<a name="line.557"></a>
+<span class="sourceLineNo">558</span><a name="line.558"></a>
+<span class="sourceLineNo">559</span>    /*<a name="line.559"></a>
+<span class="sourceLineNo">560</span>     * Returns an EntryIterator with the list of procedures ready<a name="line.560"></a>
+<span class="sourceLineNo">561</span>     * to be added to the executor.<a name="line.561"></a>
+<span class="sourceLineNo">562</span>     * A Procedure is ready if its children and parent are ready.<a name="line.562"></a>
+<span class="sourceLineNo">563</span>     */<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    public EntryIterator fetchReady() {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      buildGraph();<a name="line.565"></a>
+<span class="sourceLineNo">566</span><a name="line.566"></a>
+<span class="sourceLineNo">567</span>      Entry readyHead = null;<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      Entry readyTail = null;<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      Entry p = replayOrderHead;<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      while (p != null) {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>        Entry next = p.replayNext;<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        if (p.isReady()) {<a name="line.572"></a>
+<span class="sourceLineNo">573</span>          unlinkFromReplayList(p);<a name="line.573"></a>
+<span class="sourceLineNo">574</span>          if (readyTail != null) {<a name="line.574"></a>
+<span class="sourceLineNo">575</span>            readyTail.replayNext = p;<a name="line.575"></a>
+<span class="sourceLineNo">576</span>            p.replayPrev = readyTail;<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          } else {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>            p.replayPrev = null;<a name="line.578"></a>
+<span class="sourceLineNo">579</span>            readyHead = p;<a name="line.579"></a>
+<span class="sourceLineNo">580</span>          }<a name="line.580"></a>
+<span class="sourceLineNo">581</span>          readyTail = p;<a name="line.581"></a>
+<span class="sourceLineNo">582</span>          p.replayNext = null;<a name="line.582"></a>
+<span class="sourceLineNo">583</span>        }<a name="line.583"></a>
+<span class="sourceLineNo">584</span>        p = next;<a name="line.584"></a>
+<span class="sourceLineNo">585</span>      }<a name="line.585"></a>
+<span class="sourceLineNo">586</span>      // we need the hash-table lookups for parents, so this must be done<a name="line.586"></a>
+<span class="sourceLineNo">587</span>      // out of the loop where we check isReadyToRun()<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      for (p = readyHead; p != null; p = p.replayNext) {<a name="line.588"></a>
+<span class="sourceLineNo">589</span>        removeFromMap(p.getProcId());<a name="line.589"></a>
+<span class="sourceLineNo">590</span>        unlinkFromLinkList(p);<a name="line.590"></a>
+<span class="sourceLineNo">591</span>      }<a name="line.591"></a>
+<span class="sourceLineNo">592</span>      return readyHead != null ? new EntryIterator(readyHead) : null;<a name="line.592"></a>
+<span class="sourceLineNo">593</span>    }<a name="line.593"></a>
+<span class="sourceLineNo">594</span><a name="line.594"></a>
+<span class="sourceLineNo">595</span>    /*<a name="line.595"></a>
+<span class="sourceLineNo">596</span>     * Drain this map and return all procedures in it.<a name="line.596"></a>
+<span class="sourceLineNo">597</span>     */<a name="line.597"></a>
+<span class="sourceLineNo">598</span>    public EntryIterator fetchAll() {<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      Entry head = replayOrderHead;<a name="line.599"></a>
+<span class="sourceLineNo">600</span>      for (Entry p = head; p != null; p = p.replayNext) {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>        removeFromMap(p.getProcId());<a name="line.601"></a>
+<span class="sourceLineNo">602</span>      }<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>        assert procedureMap[i] == null : "map not empty i=" + i;<a name="line.604"></a>
+<span class="sourceLineNo">605</span>      }<a name="line.605"></a>
+<span class="sourceLineNo">606</span>      replayOrderHead = null;<a name="line.606"></a>
+<span class="sourceLineNo">607</span>      replayOrderTail = null;<a name="line.607"></a>
+<span class="sourceLineNo">608</span>      childUnlinkedHead = null;<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      rootHead = null;<a name="line.609"></a>
+<span class="sourceLineNo">610</span>      return head != null ? new EntryIterator(head) : null;<a name="line.610"></a>
+<span class="sourceLineNo">611</span>    }<a name="line.611"></a>
+<span class="sourceLineNo">612</span><a name="line.612"></a>
+<span class="sourceLineNo">613</span>    private void buildGraph() {<a name="line.613"></a>
+<span class="sourceLineNo">614</span>      Entry p = childUnlinkedHead;<a name="line.614"></a>
+<span class="sourceLineNo">615</span>      while (p != null) {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>        Entry next = p.linkNext;<a name="line.616"></a>
+<span class="sourceLineNo">617</span>        Entry rootProc = getRootProcedure(p);<a name="line.617"></a>
+<span class="sourceLineNo">618</span>        if (rootProc != null) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>          rootProc.childHead = addToLinkList(p, rootProc.childHead);<a name="line.619"></a>
+<span class="sourceLineNo">620</span>        }<a name="line.620"></a>
+<span class="sourceLineNo">621</span>        p = next;<a name="line.621"></a>
+<span class="sourceLineNo">622</span>      }<a name="line.622"></a>
+<span class="sourceLineNo">623</span><a name="line.623"></a>
+<span class="sourceLineNo">624</span>      for (p = rootHead; p != null; p = p.linkNext) {<a name="line.624"></a>
+<span class="sourceLineNo">625</span>        checkReadyToRun(p);<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>    private Entry getRootProcedure(Entry entry) {<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      while (entry != null &amp;&amp; entry.hasParent()) {<a name="line.630"></a>
+<span class="sourceLineNo">631</span>        entry = getProcedure(entry.getParentId());<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      }<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      return entry;<a name="line.633"></a>
+<span class="sourceLineNo">634</span>    }<a name="line.634"></a>
+<span class="sourceLineNo">635</span><a name="line.635"></a>
+<span class="sourceLineNo">636</span>    /*<a name="line.636"></a>
+<span class="sourceLineNo">637</span>     * (see the comprehensive explaination in the beginning of the file)<a name="line.637"></a>
+<span class="sourceLineNo">638</span>     * A Procedure is ready when parent and children are ready.<a name="line.638"></a>
+<span class="sourceLineNo">639</span>     * "ready" means that we all the information that we need in-memory.<a name="line.639"></a>
+<span class="sourceLineNo">640</span>     *<a name="line.640"></a>
+<span class="sourceLineNo">641</span>     * Example-1:<a name="line.641"></a>
+<span class="sourceLineNo">642</span>     * We have two WALs, we start reading fronm the newest (wal-2)<a name="line.642"></a>
+<span class="sourceLineNo">643</span>     *    wal-2 | C B |<a name="line.643"></a>
+<span class="sourceLineNo">644</span>     *    wal-1 | A B C |<a name="line.644"></a>
+<span class="sourceLineNo">645</span>     *<a name="line.645"></a>
+<span class="sourceLineNo">646</span>     * If C and B don't depend on A (A is not the parent), we can start them<a name="line.646"></a>
+<span class="sourceLineNo">647</span>     * before reading wal-1. If B is the only one with parent A we can start C<a name="line.647"></a>
+<span class="sourceLineNo">648</span>     * and read one more WAL before being able to start B.<a name="line.648"></a>
+<span class="sourceLineNo">649</span>     *<a name="line.649"></a>
+<span class="sourceLineNo">650</span>     * How do we know with the only information in B that we are not ready.<a name="line.650"></a>
+<span class="sourceLineNo">651</span>     *  - easy case, the parent is missing from the global map<a name="line.651"></a>
+<span class="sourceLineNo">652</span>     *  - more complex case we look at the Stack IDs<a name="line.652"></a>
+<span class="sourceLineNo">653</span>     *<a name="line.653"></a>
+<span class="sourceLineNo">654</span>     * The Stack-IDs are added to the procedure order as incremental index<a name="line.654"></a>
+<span class="sourceLineNo">655</span>     * tracking how many times that procedure was executed, which is equivalent<a name="line.655"></a>
+<span class="sourceLineNo">656</span>     * at the number of times we wrote the procedure to the WAL.<a name="line.656"></a>
+<span class="sourceLineNo">657</span>     * In the example above:<a name="line.657"></a>
+<span class="sourceLineNo">658</span>     *   wal-2: B has stackId = [1, 2]<a name="line.658"></a>
+<span class="sourceLineNo">659</span>     *   wal-1: B has stackId = [1]<a name="line.659"></a>
+<span class="sourceLineNo">660</span>     *   wal-1: A has stackId = [0]<a name="line.660"></a>
+<span class="sourceLineNo">661</span>     *<a name="line.661"></a>
+<span class="sourceLineNo">662</span>     * Since we know that the Stack-IDs are incremental for a Procedure,<a name="line.662"></a>
+<span class="sourceLineNo">663</span>     * we notice that there is a gap in the stackIds of B, so something was<a name="line.663"></a>
+<span class="sourceLineNo">664</span>     * executed before.<a name="line.664"></a>
+<span class="sourceLineNo">665</span>     * To identify when a Procedure is ready we do the sum of the stackIds of<a name="line.665"></a>
+<span class="sourceLineNo">666</span>     * the procedure and the parent. if the stackIdSum is equals to the<a name="line.666"></a>
+<span class="sourceLineNo">667</span>     * sum of {1..maxStackId} then everything we need is avaiable.<a name="line.667"></a>
+<span class="sourceLineNo">668</span>     *<a name="line.668"></a>
+<span class="sourceLineNo">669</span>     * Example-2<a name="line.669"></a>
+<span class="sourceLineNo">670</span>     *    wal-2 | A |              A stackIds = [0, 2]<a name="line.670"></a>
+<span class="sourceLineNo">671</span>     *    wal-1 | A B |            B stackIds = [1]<a name="line.671"></a>
+<span class="sourceLineNo">672</span>     *<a name="line.672"></a>
+<span class="sourceLineNo">673</span>     * There is a gap between A stackIds so something was executed in between.<a name="line.673"></a>
+<span class="sourceLineNo">674</span>     */<a name="line.674"></a>
+<span class="sourceLineNo">675</span>    private boolean checkReadyToRun(Entry rootEntry) {<a name="line.675"></a>
+<span class="sourceLineNo">676</span>      assert !rootEntry.hasParent() : "expected root procedure, got " + rootEntry;<a name="line.676"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span>      if (rootEntry.isFinished()) {<a name="line.678"></a>
+<span class="sourceLineNo">679</span>        // if the root procedure is finished, sub-procedures should be gone<a name="line.679"></a>
+<span class="sourceLineNo">680</span>        if (rootEntry.childHead != null) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span>          LOG.error("unexpected active children for root-procedure: " + rootEntry);<a name="line.681"></a>
+<span class="sourceLineNo">682</span>          for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>            LOG.error("unexpected active children: " + p);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>          }<a name="line.684"></a>
+<span class="sourceLineNo">685</span>        }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span>        assert rootEntry.childHead == null : "unexpected children on root completion. " + rootEntry;<a name="line.687"></a>
+<span class="sourceLineNo">688</span>        rootEntry.ready = true;<a name="line.688"></a>
+<span class="sourceLineNo">689</span>        return true;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>      }<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span>      int stackIdSum = 0;<a name="line.692"></a>
+<span class="sourceLineNo">693</span>      int maxStackId = 0;<a name="line.693"></a>
+<span class="sourceLineNo">694</span>      for (int i = 0; i &lt; rootEntry.proto.getStackIdCount(); ++i) {<a name="line.694"></a>
+<span class="sourceLineNo">695</span>        int stackId = 1 + rootEntry.proto.getStackId(i);<a name="line.695"></a>
+<span class="sourceLineNo">696</span>        maxStackId  = Math.max(maxStackId, stackId);<a name="line.696"></a>
+<span class="sourceLineNo">697</span>        stackIdSum += stackId;<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>      for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.700"></a>
+<span class="sourceLineNo">701</span>        for (int i = 0; i &lt; p.proto.getStackIdCount(); ++i) {<a name="line.701"></a>
+<span class="sourceLineNo">702</span>          int stackId = 1 + p.proto.getStackId(i);<a name="line.702"></a>
+<span class="sourceLineNo">703</span>          maxStackId  = Math.max(maxStackId, stackId);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>          stackIdSum += stackId;<a name="line.704"></a>
+<span class="sourceLineNo">705</span>        }<a name="line.705"></a>
+<span class="sourceLineNo">706</span>      }<a name="line.706"></a>
+<span class="sourceLineNo">707</span>      final int cmpStackIdSum = (maxStackId * (maxStackId + 1) / 2);<a name="line.707"></a>
+<span class="sourceLineNo">708</span>      if (cmpStackIdSum == stackIdSum) {<a name="line.708"></a>
+<span class="sourceLineNo">709</span>        rootEntry.ready = true;<a name="line.709"></a>
+<span class="sourceLineNo">710</span>        for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span>          p.ready = true;<a name="line.711"></a>
+<span class="sourceLineNo">712</span>        }<a name="line.712"></a>
+<span class="sourceLineNo">713</span>        return true;<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      }<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      return false;<a name="line.715"></a>
+<span class="sourceLineNo">716</span>    }<a name="line.716"></a>
+<span class="sourceLineNo">717</span><a name="line.717"></a>
+<span class="sourceLineNo">718</span>    private void unlinkFromReplayList(Entry entry) {<a name="line.718"></a>
+<span class="sourceLineNo">719</span>      if (replayOrderHead == entry) {<a name="line.719"></a>
+<span class="sourceLineNo">720</span>        replayOrderHead = entry.replayNext;<a name="line.720"></a>
+<span class="sourceLineNo">721</span>      }<a name="line.721"></a>
+<span class="sourceLineNo">722</span>      if (replayOrderTail == entry) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>        replayOrderTail = entry.replayPrev;<a name="line.723"></a>
+<span class="sourceLineNo">724</span>      }<a name="line.724"></a>
+<span class="sourceLineNo">725</span>      if (entry.replayPrev != null) {<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        entry.replayPrev.replayNext = entry.replayNext;<a name="line.726"></a>
+<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
+<span class="sourceLineNo">728</span>      if (entry.replayNext != null) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span>        entry.replayNext.replayPrev = entry.replayPrev;<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
+<span class="sourceLineNo">731</span>    }<a name="line.731"></a>
+<span class="sourceLineNo">732</span><a name="line.732"></a>
+<span class="sourceLineNo">733</span>    private void addToReplayList(final Entry entry) {<a name="line.733"></a>
+<span class="sourceLineNo">734</span>      unlinkFromReplayList(entry);<a name="line.734"></a>
+<span class="sourceLineNo">735</span>      entry.replayNext = replayOrderHead;<a name="line.735"></a>
+<span class="sourceLineNo">736</span>      entry.replayPrev = null;<a name="line.736"></a>
+<span class="sourceLineNo">737</span>      if (replayOrderHead != null) {<a name="line.737"></a>
+<span class="sourceLineNo">738</span>        replayOrderHead.replayPrev = entry;<a name="line.738"></a>
+<span class="sourceLineNo">739</span>      } else {<a name="line.739"></a>
+<span class="sourceLineNo">740</span>        replayOrderTail = entry;<a name="line.740"></a>
+<span class="sourceLineNo">741</span>      }<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      replayOrderHead = entry;<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    }<a name="line.743"></a>
+<span class="sourceLineNo">744</span><a name="line.744"></a>
+<span class="sourceLineNo">745</span>    private void unlinkFromLinkList(Entry entry) {<a name="line.745"></a>
+<span class="sourceLineNo">746</span>      if (entry == rootHead) {<a name="line.746"></a>
+<span class="sourceLineNo">747</span>        rootHead = entry.linkNext;<a name="line.747"></a>
+<span class="sourceLineNo">748</span>      } else if (entry == childUnlinkedHead) {<a name="line.748"></a>
+<span class="sourceLineNo">749</span>        childUnlinkedHead = entry.linkNext;<a name="line.749"></a>
+<span class="sourceLineNo">750</span>      }<a name="line.750"></a>
+<span class="sourceLineNo">751</span>      if (entry.linkPrev != null) {<a name="line.751"></a>
+<span class="sourceLineNo">752</span>        entry.linkPrev.linkNext = entry.linkNext;<a name="line.752"></a>
+<span class="sourceLineNo">753</span>      }<a name="line.753"></a>
+<span class="sourceLineNo">754</span>      if (entry.linkNext != null) {<a name="line.754"></a>
+<span class="sourceLineNo">755</span>        entry.linkNext.linkPrev = entry.linkPrev;<a name="line.755"></a>
+<span class="sourceLineNo">756</span>      }<a name="line.756"></a>
+<span class="sourceLineNo">757</span>    }<a name="line.757"></a>
+<span class="sourceLineNo">758</span><a name="line.758"></a>
+<span class="sourceLineNo">759</span>    private Entry addToLinkList(Entry entry, Entry linkHead) {<a name="line.759"></a>
+<span class="sourceLineNo">760</span>      unlinkFromLinkList(entry);<a name="line.760"></a>
+<span class="sourceLineNo">761</span>      entry.linkNext = linkHead;<a name="line.761"></a>
+<span class="sourceLineNo">762</span>      entry.linkPrev = null;<a name="line.762"></a>
+<span class="sourceLineNo">763</span>      if (linkHead != null) {<a name="line.763"></a>
+<span class="sourceLineNo">764</span>        linkHead.linkPrev = entry;<a name="line.764"></a>
+<span class="sourceLineNo">765</span>      }<a name="line.765"></a>
+<span class="sourceLineNo">766</span>      return entry;<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    }<a name="line.767"></a>
+<span class="sourceLineNo">768</span><a name="line.768"></a>
+<span class="sourceLineNo">769</span>    private Entry findLinkListTail(Entry linkHead) {<a name="line.769"></a>
+<span class="sourceLineNo">770</span>      Entry tail = linkHead;<a name="line.770"></a>
+<span class="sourceLineNo">771</span>      while (tail.linkNext != null) {<a name="line.771"></a>
+<span class="sourceLineNo">772</span>        tail = tail.linkNext;<a name="line.772"></a>
+<span class="sourceLineNo">773</span>      }<a name="line.773"></a>
+<span class="sourceLineNo">774</span>      return tail;<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    }<a name="line.775"></a>
+<span class="sourceLineNo">776</span><a name="line.776"></a>
+<span class="sourceLineNo">777</span>    private Entry addToMap(final long procId, final boolean hasParent) {<a name="line.777"></a>
+<span class="sourceLineNo">778</span>      int slotIndex = getMapSlot(procId);<a name="line.778"></a>
+<span class="sourceLineNo">779</span>      Entry entry = getProcedure(slotIndex, procId);<a name="line.779"></a>
+<span class="sourceLineNo">780</span>      if (entry != null) return entry;<a name="line.780"></a>
+<span class="sourceLineNo">781</span><a name="line.781"></a>
+<span class="sourceLineNo">782</span>      entry = new Entry(procedureMap[slotIndex]);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>      procedureMap[slotIndex] = entry;<a name="line.783"></a>
+<span class="sourceLineNo">784</span>      return entry;<a name="line.784"></a>
+<span class="sourceLineNo">785</span>    }<a name="line.785"></a>
+<span class="sourceLineNo">786</span><a name="line.786"></a>
+<span class="sourceLineNo">787</span>    private Entry removeFromMap(final long procId) {<a name="line.787"></a>
+<span class="sourceLineN

<TRUNCATED>

[24/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 7102786..1550b3d 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -301,7 +301,7 @@
 <td>2145</td>
 <td>0</td>
 <td>0</td>
-<td>14243</td></tr></table></div>
+<td>14244</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -3614,7 +3614,7 @@
 <td><a href="#org.apache.hadoop.hbase.procedure2.Procedure.java">org/apache/hadoop/hbase/procedure2/Procedure.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>3</td></tr>
+<td>4</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureDeque.java">org/apache/hadoop/hbase/procedure2/ProcedureDeque.java</a></td>
 <td>0</td>
@@ -7128,12 +7128,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>756</td>
+<td>762</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>3270</td>
+<td>3265</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>misc</td>
@@ -12890,7 +12890,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 43 has parse error. Missed HTML close tag 'TableName'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>122</td></tr>
 <tr class="a">
@@ -15734,7 +15734,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 64 has parse error. Missed HTML close tag 'code'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>1955</td></tr>
 <tr class="b">
@@ -19994,7 +19994,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 37 has parse error. Details: no viable alternative at input '&lt;ColumnFamily,' while parsing HTML_ELEMENT</td>
 <td>29</td></tr></table></div>
 <div class="section">
@@ -50294,7 +50294,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 60 has parse error. Missed HTML close tag 'Comparable'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>28</td></tr>
 <tr class="a">
@@ -51412,26 +51412,32 @@
 <td>37</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>JavadocTagContinuationIndentation</td>
+<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
+<td>554</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>776</td></tr></table></div>
+<td>786</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.ProcedureDeque.java">org/apache/hadoop/hbase/procedure2/ProcedureDeque.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>RedundantImport</td>
 <td>Redundant import from the same package - org.apache.hadoop.hbase.procedure2.Procedure.</td>
 <td>23</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -51440,190 +51446,190 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.ProcedureExecutor.java">org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.util.concurrent.ConcurrentHashMap' import.</td>
 <td>35</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.security.User' import.</td>
 <td>55</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>219</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>233</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
-<td>Method length is 158 lines (max allowed is 150).</td>
+<td>Method length is 156 lines (max allowed is 150).</td>
 <td>306</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>422</td></tr>
-<tr class="a">
+<td>420</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>428</td></tr>
-<tr class="b">
+<td>426</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>662</td></tr>
-<tr class="a">
+<td>660</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>663</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>682</td></tr>
+<td>661</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>691</td></tr>
+<td>680</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>713</td></tr>
+<td>689</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>716</td></tr>
+<td>711</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>735</td></tr>
+<td>714</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>738</td></tr>
+<td>733</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>957</td></tr>
+<td>736</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>955</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
-<td>978</td></tr>
-<tr class="b">
+<td>976</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>1047</td></tr>
-<tr class="a">
+<td>1045</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1084</td></tr>
-<tr class="b">
+<td>1082</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 16, expected level should be 14.</td>
-<td>1093</td></tr>
-<tr class="a">
+<td>1091</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
-<td>1207</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>1382</td></tr>
+<td>1205</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>1574</td></tr>
+<td>1377</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1601</td></tr>
+<td>1572</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>1685</td></tr>
+<td>1599</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1815</td></tr></table></div>
+<td>1683</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>1813</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.ProcedureUtil.java">org/apache/hadoop/hbase/procedure2/ProcedureUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>160</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>213</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -51632,31 +51638,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.RemoteProcedureException.java">org/apache/hadoop/hbase/procedure2/RemoteProcedureException.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.classification.InterfaceAudience' import.</td>
 <td>23</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>52</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>53</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -51665,31 +51671,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.RootProcedureState.java">org/apache/hadoop/hbase/procedure2/RootProcedureState.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>94</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>122</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>157</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -51698,37 +51704,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.StateMachineProcedure.java">org/apache/hadoop/hbase/procedure2/StateMachineProcedure.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.util.ArrayList' import.</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>140</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>150</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>158</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -51737,13 +51743,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.store.ProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -51752,13 +51758,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.store.ProcedureStoreBase.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStoreBase.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -51767,25 +51773,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStoreTracker.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>434</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>547</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -51794,25 +51800,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFile.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>117</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>184</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -51821,13 +51827,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormat.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -51836,118 +51842,118 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.io.IOException' import.</td>
 <td>23</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>202</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>207</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 34 should have line break after.</td>
 <td>322</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 29 should have line break after.</td>
 <td>324</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 31 should have line break after.</td>
 <td>325</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 32 should have line break after.</td>
 <td>326</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 30 should have line break after.</td>
 <td>327</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>781</td></tr></table></div>
+<td>780</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.common.annotations.VisibleForTesting' import.</td>
 <td>60</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>418</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>569</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>856</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>946</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1025</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1080</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -51956,25 +51962,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.util.DelayedUtil.java">org/apache/hadoop/hbase/procedure2/util/DelayedUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>EqualsHashCode</td>
 <td>Definition of 'equals()' without corresponding definition of 'hashCode()'.</td>
 <td>61</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>135</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -51983,31 +51989,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.procedure2.util.StringUtils.java">org/apache/hadoop/hbase/procedure2/util/StringUtils.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>59</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>60</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>61</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -52016,25 +52022,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.protobuf.ProtobufMagic.java">org/apache/hadoop/hbase/protobuf/ProtobufMagic.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class ProtobufMagic should be declared as final.</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>43</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -52043,625 +52049,625 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.protobuf.ProtobufUtil.java">org/apache/hadoop/hbase/protobuf/ProtobufUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.protobuf.ByteString' import.</td>
 <td>90</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>197</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>256</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>286</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>306</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>325</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>326</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>327</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>328</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>329</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>330</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>331</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>332</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>333</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>334</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>335</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>336</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>346</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>347</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>348</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>349</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>350</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>351</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>352</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>353</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>354</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>355</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>356</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>357</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>366</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>369</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>446</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>459</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>542</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>555</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>621</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>624</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>682</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>703</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>762</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>764</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>847</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>956</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1059</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1143</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1198</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1199</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1201</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1246</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1247</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1248</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1250</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1260</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1261</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1263</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1287</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1288</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1358</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1360</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1399</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1422</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1428</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1520</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1522</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>1527</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>1528</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>1529</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>1530</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>1531</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>1532</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>1533</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>1534</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>1535</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1545</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>1550</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>1551</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>1552</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>1553</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>1554</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>1555</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>1556</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>1557</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>1558</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>1559</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1572</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1726</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1740</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1741</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1742</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>1761</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>1762</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 6, expected level should be 4.</td>
 <td>1763</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 8, expected level should be 6.</td>
 <td>1764</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 6, expected level should be 4.</td>
 <td>1765</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' have incorrect indentation level 6, expected level should be 4.</td>
 <td>1766</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child have incorrect indentation level 8, expected level should be 6.</td>
 <td>1767</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' have incorrect indentation level 6, expected level should be 4.</td>
 <td>1768</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1801</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1802</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1803</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1805</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1806</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -52670,37 +52676,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.protobuf.ReplicationProtbufUtil.java">org/apache/hadoop/hbase/protobuf/ReplicationProtbufUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>50</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>60</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>81</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>173</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -52709,13 +52715,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.quotas.AverageIntervalRateLimiter.java">org/apache/hadoop/hbase/quotas/AverageIntervalRateLimiter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -52724,25 +52730,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.quotas.DefaultOperationQuota.java">org/apache/hadoop/hbase/quotas/DefaultOperationQuota.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>70</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>90</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -52751,13 +52757,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.quotas.FixedIntervalRateLimiter.java">org/apache/hadoop/hbase/quotas/FixedIntervalRateLimiter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -52766,31 +52772,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.quotas.MasterQuotaManager.java">org/apache/hadoop/hbase/quotas/MasterQuotaManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>297</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>298</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>377</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>MissingSwitchDefault</td>
@@ -52799,13 +52805,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.quotas.NoopOperationQuota.java">org/apache/hadoop/hbase/quotas/NoopOperationQuota.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -52814,19 +52820,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.quotas.NoopQuotaLimiter.java">org/apache/hadoop/hbase/quotas/NoopQuotaLimiter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - org.apache.hadoop.hbase.quotas.OperationQuota.OperationType.</td>
 <td>23</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -52835,31 +52841,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.quotas.QuotaCache.java">org/apache/hadoop/hbase/quotas/QuotaCache.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>68</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>69</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>70</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -52868,13 +52874,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.quotas.QuotaLimiter.java">org/apache/hadoop/hbase/quotas/QuotaLimiter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
@@ -52883,13 +52889,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.quotas.QuotaLimiterFactory.java">org/apache/hadoop/hbase/quotas/QuotaLimiterFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -52898,19 +52904,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.quotas.QuotaRetriever.java">org/apache/hadoop/hbase/quotas/QuotaRetriever.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class QuotaRetriever should be declared as final.</td>
 <td>44</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -52919,43 +52925,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.quotas.QuotaSettings.java">org/apache/hadoop/hbase/quotas/QuotaSettings.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>102</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>103</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>104</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>105</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>106</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>MissingSwitchDefault</td>
@@ -52964,19 +52970,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.quotas.QuotaSettingsFactory.java">org/apache/hadoop/hbase/quotas/QuotaSettingsFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil' import.</td>
 <td>27</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -52985,19 +52991,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.quotas.QuotaTableUtil.java">org/apache/hadoop/hbase/quotas/QuotaTableUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>61</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -53006,31 +53012,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.quotas.QuotaUtil.java">org/apache/hadoop/hbase/quotas/QuotaUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.regionserver.BloomType' import.</td>
 <td>45</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>179</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>243</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -53039,121 +53045,121 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.quotas.RateLimiter.java">org/apache/hadoop/hbase/quotas/RateLimiter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.common.annotations.VisibleForTesting' import.</td>
 <td>26</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>81</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>82</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>83</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>84</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>85</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>86</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>87</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>88</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>89</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>90</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>91</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>92</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>93</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>94</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>95</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child have incorrect indentation level 4, expected level should be 6.</td>
 <td>96</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child have incorrect indentation level 6, expected level should be 8.</td>
 <td>97</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
@@ -53162,31 +53168,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.quotas.RegionServerQuotaManager.java">org/apache/hadoop/hbase/quotas/RegionServerQuotaManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.TableName' import.</td>
 <td>28</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.regionserver.Region' import.</td>
 <td>32</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.common.annotations.VisibleForTesting' import.</td>
 <td>37</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>MissingSwitchDefault</td>
@@ -53195,19 +53201,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.quotas.ThrottleSettings.java">org/apache/hadoop/hbase/quotas/ThrottleSettings.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil' import.</td>
 <td>26</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>MissingSwitchDefault</td>
@@ -53216,13 +53222,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.quotas.ThrottlingException.java">org/apache/hadoop/hbase/quotas/ThrottlingException.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>EmptyStatement</td>
@@ -53231,49 +53237,49 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.quotas.TimeBasedLimiter.java">org/apache/hadoop/hbase/quotas/TimeBasedLimiter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class TimeBasedLimiter should be declared as final.</td>
 <td>33</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>189</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>190</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>191</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>192</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>193</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -53282,25 +53288,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.quotas.UserQuotaState.java">org/apache/hadoop/hbase/quotas/UserQuotaState.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>57</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>197</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -53309,13 +53315,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.AbstractMemStore.java">org/apache/hadoop/hbase/regionserver/AbstractMemStore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -53324,13 +53330,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.AbstractMultiFileWriter.java">org/apache/hadoop/hbase/regionserver/AbstractMultiFileWriter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>RedundantImport</td>
@@ -53339,103 +53345,103 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.AnnotationReadingPriorityFunction.java">org/apache/hadoop/hbase/regionserver/AnnotationReadingPriorityFunction.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.common.annotations.VisibleForTesting' import.</td>
 <td>43</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.security.User' import.</td>
 <td>46</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>83</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>84</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>85</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>86</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>87</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>88</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>89</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>90</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child have incorrect indentation level 6, expected level should be 4.</td>
 <td>91</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>181</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>183</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>234</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>259</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -53444,25 +53450,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.BaseRowProcessor.java">org/apache/hadoop/hbase/regionserver/BaseRowProcessor.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.HBaseInterfaceAudience' import.</td>
 <td>28</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.protobuf.Message' import.</td>
 <td>32</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -53471,25 +53477,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.CellArrayMap.java">org/apache/hadoop/hbase/regionserver/CellArrayMap.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>51</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>51</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
@@ -53498,61 +53504,61 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.CellFlatMap.java">org/apache/hadoop/hbase/regionserver/CellFlatMap.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.util.Collection' import.</td>
 <td>24</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.util.NavigableMap' import.</td>
 <td>29</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>38</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>120</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>126</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' have incorrect indentation level 0, expected level should be 2.</td>
 <td>137</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>151</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
 <td>151</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
@@ -53561,13 +53567,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.CellSet.java">org/apache/hadoop/hbase/regionserver/CellSet.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -53576,13 +53582,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.CellSink.java">org/apache/hadoop/hbase/regionserver/CellSink.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -53591,13 +53597,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.Chunk.java">org/apache/hadoop/hbase/regionserver/Chunk.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -53606,73 +53612,73 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.CompactSplitThread.java">org/apache/hadoop/hbase/regionserver/CompactSplitThread.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.common.annotations.VisibleForTesting' import.</td>
 <td>52</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>101</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' have incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
 <td>147</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 12, expected level should be one of the following: 14, 16.</td>
 <td>149</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 12, expected level should be one of the following: 14, 16.</td>
 <td>150</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' have incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
 <td>151</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' have incorrect indentation level 6, expected level should be one of the following: 10, 12.</td>
 <td>152</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>291</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>337</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>486</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -53681,13 +53687,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.CompactedHFilesDischargeHandler.java">org/apache/hadoop/hbase/regionserver/CompactedHFilesDischargeHandler.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>RedundantImport</td>
@@ -53696,37 +53702,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.CompactedHFilesDischarger.java">org/apache/hadoop/hbase/regionserver/CompactedHFilesDischarger.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>RedundantImport</td>
 <td>Redundant import from the same package - org.apache.hadoop.hbase.regionserver.Region.</td>
 <td>29</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>RedundantImport</td>
 <td>Redundant import from the same package - org.apache.hadoop.hbase.regionserver.RegionServerServices.</td>
 <td>30</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>RedundantImport</td>
 <td>Redundant import from the same package - org.apache.hadoop.hbase.regionserver.Store.</td>
 <td>31</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.google.common.annotations.VisibleForTesting' import.</td>
 <td>33</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -53735,25 +53741,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.CompactingMemStore.java">org/apache/hadoop/hbase/regionserver/CompactingMemStore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 

<TRUNCATED>

[09/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
index 35cebd9..b6b4cb6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
@@ -321,7 +321,7 @@
 <span class="sourceLineNo">313</span>      final NonceKey nonceKey;<a name="line.313"></a>
 <span class="sourceLineNo">314</span>      final long procId;<a name="line.314"></a>
 <span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>      if (procIter.isNextCompleted()) {<a name="line.316"></a>
+<span class="sourceLineNo">316</span>      if (procIter.isNextFinished()) {<a name="line.316"></a>
 <span class="sourceLineNo">317</span>        ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.317"></a>
 <span class="sourceLineNo">318</span>        nonceKey = proc.getNonceKey();<a name="line.318"></a>
 <span class="sourceLineNo">319</span>        procId = proc.getProcId();<a name="line.319"></a>
@@ -359,7 +359,7 @@
 <span class="sourceLineNo">351</span>    HashSet&lt;Procedure&gt; waitingSet = null;<a name="line.351"></a>
 <span class="sourceLineNo">352</span>    procIter.reset();<a name="line.352"></a>
 <span class="sourceLineNo">353</span>    while (procIter.hasNext()) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (procIter.isNextCompleted()) {<a name="line.354"></a>
+<span class="sourceLineNo">354</span>      if (procIter.isNextFinished()) {<a name="line.354"></a>
 <span class="sourceLineNo">355</span>        procIter.skipNext();<a name="line.355"></a>
 <span class="sourceLineNo">356</span>        continue;<a name="line.356"></a>
 <span class="sourceLineNo">357</span>      }<a name="line.357"></a>
@@ -405,1450 +405,1448 @@
 <span class="sourceLineNo">397</span>          }<a name="line.397"></a>
 <span class="sourceLineNo">398</span>          waitingSet.add(proc);<a name="line.398"></a>
 <span class="sourceLineNo">399</span>          break;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        case FINISHED:<a name="line.400"></a>
-<span class="sourceLineNo">401</span>          if (proc.hasException()) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>            // add the proc to the scheduler to perform the rollback<a name="line.402"></a>
-<span class="sourceLineNo">403</span>            scheduler.addBack(proc);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          }<a name="line.404"></a>
-<span class="sourceLineNo">405</span>          break;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        case ROLLEDBACK:<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        case INITIALIZING:<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          LOG.error(msg);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          throw new UnsupportedOperationException(msg);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        default:<a name="line.411"></a>
-<span class="sourceLineNo">412</span>          break;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      }<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    // 3. Validate the stacks<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    int corruptedCount = 0;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    while (itStack.hasNext()) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      RootProcedureState procStack = entry.getValue();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      if (procStack.isValid()) continue;<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>      for (Procedure proc: procStack.getSubproceduresStack()) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        LOG.error("Corrupted " + proc);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        procedures.remove(proc.getProcId());<a name="line.426"></a>
-<span class="sourceLineNo">427</span>        runnableList.remove(proc);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        corruptedCount++;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      }<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      itStack.remove();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    // 4. Push the procedures to the timeout executor<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    if (waitingSet != null &amp;&amp; !waitingSet.isEmpty()) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      for (Procedure proc: waitingSet) {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        proc.afterReplay(getEnvironment());<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        timeoutExecutor.add(proc);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      }<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    }<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>    // 5. Push the procedure to the scheduler<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    if (!runnableList.isEmpty()) {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      // some procedure may be started way before this stuff.<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        Procedure proc = runnableList.get(i);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        proc.afterReplay(getEnvironment());<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        if (!proc.hasParent()) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        }<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        if (proc.wasExecuted()) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>          scheduler.addFront(proc);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        } else {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          // if it was not in execution, it can wait.<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          scheduler.addBack(proc);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        }<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    }<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>   * Start the procedure executor.<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   *<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * @param numThreads number of threads available for procedure execution.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   */<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    if (running.getAndSet(true)) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      LOG.warn("Already running");<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      return;<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>    // We have numThreads executor + one timer thread used for timing out<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    // procedures and triggering periodic procedures.<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    this.corePoolSize = numThreads;<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    LOG.info("Starting executor worker threads=" + corePoolSize);<a name="line.485"></a>
-<span class="sourceLineNo">486</span><a name="line.486"></a>
-<span class="sourceLineNo">487</span>    // Create the Thread Group for the executors<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    threadGroup = new ThreadGroup("ProcedureExecutor");<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>    // Create the timeout executor<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    timeoutExecutor = new TimeoutExecutorThread(threadGroup);<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>    // Create the workers<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    workerId.set(0);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    workerThreads = new CopyOnWriteArrayList&lt;&gt;();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    for (int i = 0; i &lt; corePoolSize; ++i) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      workerThreads.add(new WorkerThread(threadGroup));<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
+<span class="sourceLineNo">400</span>        case FAILED:<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          // add the proc to the scheduler to perform the rollback<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          scheduler.addBack(proc);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          break;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        case ROLLEDBACK:<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        case INITIALIZING:<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.406"></a>
+<span class="sourceLineNo">407</span>          LOG.error(msg);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>          throw new UnsupportedOperationException(msg);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        default:<a name="line.409"></a>
+<span class="sourceLineNo">410</span>          break;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    // 3. Validate the stacks<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    int corruptedCount = 0;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    while (itStack.hasNext()) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      RootProcedureState procStack = entry.getValue();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      if (procStack.isValid()) continue;<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span>      for (Procedure proc: procStack.getSubproceduresStack()) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        LOG.error("Corrupted " + proc);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        procedures.remove(proc.getProcId());<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        runnableList.remove(proc);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        corruptedCount++;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>      }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      itStack.remove();<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    }<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<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>    // 4. Push the procedures to the timeout executor<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    if (waitingSet != null &amp;&amp; !waitingSet.isEmpty()) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      for (Procedure proc: waitingSet) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        proc.afterReplay(getEnvironment());<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        timeoutExecutor.add(proc);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      }<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span>    // 5. Push the procedure to the scheduler<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    if (!runnableList.isEmpty()) {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      // some procedure may be started way before this stuff.<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>        Procedure proc = runnableList.get(i);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        proc.afterReplay(getEnvironment());<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        if (!proc.hasParent()) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        }<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        if (proc.wasExecuted()) {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          scheduler.addFront(proc);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>        } else {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          // if it was not in execution, it can wait.<a name="line.457"></a>
+<span class="sourceLineNo">458</span>          scheduler.addBack(proc);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      }<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  }<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>   * Start the procedure executor.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   *<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @param numThreads number of threads available for procedure execution.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   */<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    if (running.getAndSet(true)) {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      LOG.warn("Already running");<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      return;<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span><a name="line.479"></a>
+<span class="sourceLineNo">480</span>    // We have numThreads executor + one timer thread used for timing out<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    // procedures and triggering periodic procedures.<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    this.corePoolSize = numThreads;<a name="line.482"></a>
+<span class="sourceLineNo">483</span>    LOG.info("Starting executor worker threads=" + corePoolSize);<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // Create the Thread Group for the executors<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    threadGroup = new ThreadGroup("ProcedureExecutor");<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>    // Create the timeout executor<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    timeoutExecutor = new TimeoutExecutorThread(threadGroup);<a name="line.489"></a>
+<span class="sourceLineNo">490</span><a name="line.490"></a>
+<span class="sourceLineNo">491</span>    // Create the workers<a name="line.491"></a>
+<span class="sourceLineNo">492</span>    workerId.set(0);<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    workerThreads = new CopyOnWriteArrayList&lt;&gt;();<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    for (int i = 0; i &lt; corePoolSize; ++i) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      workerThreads.add(new WorkerThread(threadGroup));<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    }<a name="line.496"></a>
+<span class="sourceLineNo">497</span><a name="line.497"></a>
+<span class="sourceLineNo">498</span>    long st, et;<a name="line.498"></a>
 <span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>    long st, et;<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>    // Acquire the store lease.<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    store.recoverLease();<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    LOG.info(String.format("Recover store (%s) lease: %s",<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.507"></a>
-<span class="sourceLineNo">508</span><a name="line.508"></a>
-<span class="sourceLineNo">509</span>    // start the procedure scheduler<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    scheduler.start();<a name="line.510"></a>
-<span class="sourceLineNo">511</span><a name="line.511"></a>
-<span class="sourceLineNo">512</span>    // TODO: Split in two steps.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    // The first one will make sure that we have the latest id,<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    // so we can start the threads and accept new procedures.<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    // The second step will do the actual load of old procedures.<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    load(abortOnCorruption);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    LOG.info(String.format("Load store (%s): %s",<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (LOG.isTraceEnabled()) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.trace("Start workers " + workerThreads.size());<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    timeoutExecutor.start();<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    for (WorkerThread worker: workerThreads) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      worker.start();<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    // Internal chores<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    timeoutExecutor.add(new WorkerMonitor());<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>    // Add completed cleaner chore<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    addChore(new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  public void stop() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    if (!running.getAndSet(false)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>      return;<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>    LOG.info("Stopping");<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    scheduler.stop();<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    timeoutExecutor.sendStopSignal();<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  @VisibleForTesting<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  public void join() {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    assert !isRunning() : "expected not running";<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>    // stop the timeout executor<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    timeoutExecutor.awaitTermination();<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    timeoutExecutor = null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>    // stop the worker threads<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    for (WorkerThread worker: workerThreads) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      worker.awaitTermination();<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    workerThreads = null;<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    // Destroy the Thread Group for the executors<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    try {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      threadGroup.destroy();<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    } catch (IllegalThreadStateException e) {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      LOG.error("Thread group " + threadGroup + " contains running threads");<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      threadGroup.list();<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    } finally {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      threadGroup = null;<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>    // reset the in-memory state for testing<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    completed.clear();<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    rollbackStack.clear();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    procedures.clear();<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    nonceKeysToProcIdsMap.clear();<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    scheduler.clear();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    lastProcId.set(-1);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  }<a name="line.580"></a>
-<span class="sourceLineNo">581</span><a name="line.581"></a>
-<span class="sourceLineNo">582</span>  public void refreshConfiguration(final Configuration conf) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    this.conf = conf;<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  }<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
+<span class="sourceLineNo">500</span>    // Acquire the store lease.<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    store.recoverLease();<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    LOG.info(String.format("Recover store (%s) lease: %s",<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.505"></a>
+<span class="sourceLineNo">506</span><a name="line.506"></a>
+<span class="sourceLineNo">507</span>    // start the procedure scheduler<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    scheduler.start();<a name="line.508"></a>
+<span class="sourceLineNo">509</span><a name="line.509"></a>
+<span class="sourceLineNo">510</span>    // TODO: Split in two steps.<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    // The first one will make sure that we have the latest id,<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    // so we can start the threads and accept new procedures.<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    // The second step will do the actual load of old procedures.<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    load(abortOnCorruption);<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.517"></a>
+<span class="sourceLineNo">518</span>    LOG.info(String.format("Load store (%s): %s",<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    if (LOG.isTraceEnabled()) {<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      LOG.trace("Start workers " + workerThreads.size());<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    timeoutExecutor.start();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    for (WorkerThread worker: workerThreads) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      worker.start();<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
+<span class="sourceLineNo">529</span><a name="line.529"></a>
+<span class="sourceLineNo">530</span>    // Internal chores<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    timeoutExecutor.add(new WorkerMonitor());<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    // Add completed cleaner chore<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    addChore(new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.534"></a>
+<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>  public void stop() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    if (!running.getAndSet(false)) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      return;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    }<a name="line.540"></a>
+<span class="sourceLineNo">541</span><a name="line.541"></a>
+<span class="sourceLineNo">542</span>    LOG.info("Stopping");<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    scheduler.stop();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    timeoutExecutor.sendStopSignal();<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>  @VisibleForTesting<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  public void join() {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    assert !isRunning() : "expected not running";<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span>    // stop the timeout executor<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    timeoutExecutor.awaitTermination();<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    timeoutExecutor = null;<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    // stop the worker threads<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    for (WorkerThread worker: workerThreads) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      worker.awaitTermination();<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    workerThreads = null;<a name="line.559"></a>
+<span class="sourceLineNo">560</span><a name="line.560"></a>
+<span class="sourceLineNo">561</span>    // Destroy the Thread Group for the executors<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    try {<a name="line.562"></a>
+<span class="sourceLineNo">563</span>      threadGroup.destroy();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    } catch (IllegalThreadStateException e) {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      LOG.error("Thread group " + threadGroup + " contains running threads");<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      threadGroup.list();<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    } finally {<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      threadGroup = null;<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
+<span class="sourceLineNo">570</span><a name="line.570"></a>
+<span class="sourceLineNo">571</span>    // reset the in-memory state for testing<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    completed.clear();<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    rollbackStack.clear();<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    procedures.clear();<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    nonceKeysToProcIdsMap.clear();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    scheduler.clear();<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    lastProcId.set(-1);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
+<span class="sourceLineNo">579</span><a name="line.579"></a>
+<span class="sourceLineNo">580</span>  public void refreshConfiguration(final Configuration conf) {<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    this.conf = conf;<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.582"></a>
+<span class="sourceLineNo">583</span>        DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<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>  // ==========================================================================<a name="line.586"></a>
+<span class="sourceLineNo">587</span>  //  Accessors<a name="line.587"></a>
 <span class="sourceLineNo">588</span>  // ==========================================================================<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  //  Accessors<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  // ==========================================================================<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  public boolean isRunning() {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return running.get();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return the current number of worker threads.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   */<a name="line.597"></a>
-<span class="sourceLineNo">598</span>  public int getWorkerThreadCount() {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    return workerThreads.size();<a name="line.599"></a>
-<span class="sourceLineNo">600</span>  }<a name="line.600"></a>
-<span class="sourceLineNo">601</span><a name="line.601"></a>
-<span class="sourceLineNo">602</span>  /**<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   * @return the core pool size settings.<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   */<a name="line.604"></a>
-<span class="sourceLineNo">605</span>  public int getCorePoolSize() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    return corePoolSize;<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>  public int getActiveExecutorCount() {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    return activeExecutorCount.get();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  public TEnvironment getEnvironment() {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    return this.environment;<a name="line.614"></a>
-<span class="sourceLineNo">615</span>  }<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>  public ProcedureStore getStore() {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    return this.store;<a name="line.618"></a>
-<span class="sourceLineNo">619</span>  }<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>  protected ProcedureScheduler getScheduler() {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    return scheduler;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>  }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>  public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    this.scheduler.signalAll();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>  }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>  public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<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">589</span>  public boolean isRunning() {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    return running.get();<a name="line.590"></a>
+<span class="sourceLineNo">591</span>  }<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span>  /**<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @return the current number of worker threads.<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
+<span class="sourceLineNo">596</span>  public int getWorkerThreadCount() {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    return workerThreads.size();<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  }<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span>  /**<a name="line.600"></a>
+<span class="sourceLineNo">601</span>   * @return the core pool size settings.<a name="line.601"></a>
+<span class="sourceLineNo">602</span>   */<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  public int getCorePoolSize() {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    return corePoolSize;<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  }<a name="line.605"></a>
+<span class="sourceLineNo">606</span><a name="line.606"></a>
+<span class="sourceLineNo">607</span>  public int getActiveExecutorCount() {<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    return activeExecutorCount.get();<a name="line.608"></a>
+<span class="sourceLineNo">609</span>  }<a name="line.609"></a>
+<span class="sourceLineNo">610</span><a name="line.610"></a>
+<span class="sourceLineNo">611</span>  public TEnvironment getEnvironment() {<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    return this.environment;<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>  public ProcedureStore getStore() {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    return this.store;<a name="line.616"></a>
+<span class="sourceLineNo">617</span>  }<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>  protected ProcedureScheduler getScheduler() {<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    return scheduler;<a name="line.620"></a>
+<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>  public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    this.scheduler.signalAll();<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>  public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
+<span class="sourceLineNo">631</span><a name="line.631"></a>
+<span class="sourceLineNo">632</span>  // ==========================================================================<a name="line.632"></a>
+<span class="sourceLineNo">633</span>  //  Submit/Remove Chores<a name="line.633"></a>
 <span class="sourceLineNo">634</span>  // ==========================================================================<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  //  Submit/Remove Chores<a name="line.635"></a>
-<span class="sourceLineNo">636</span>  // ==========================================================================<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span>  /**<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * Add a chore procedure to the executor<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   * @param chore the chore to add<a name="line.640"></a>
-<span class="sourceLineNo">641</span>   */<a name="line.641"></a>
-<span class="sourceLineNo">642</span>  public void addChore(final ProcedureInMemoryChore chore) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    timeoutExecutor.add(chore);<a name="line.644"></a>
-<span class="sourceLineNo">645</span>  }<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>  /**<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   * Remove a chore procedure from the executor<a name="line.648"></a>
-<span class="sourceLineNo">649</span>   * @param chore the chore to remove<a name="line.649"></a>
-<span class="sourceLineNo">650</span>   * @return whether the chore is removed, or it will be removed later<a name="line.650"></a>
-<span class="sourceLineNo">651</span>   */<a name="line.651"></a>
-<span class="sourceLineNo">652</span>  public boolean removeChore(final ProcedureInMemoryChore chore) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    chore.setState(ProcedureState.FINISHED);<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    return timeoutExecutor.remove(chore);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>  }<a name="line.655"></a>
-<span class="sourceLineNo">656</span><a name="line.656"></a>
+<span class="sourceLineNo">635</span><a name="line.635"></a>
+<span class="sourceLineNo">636</span>  /**<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   * Add a chore procedure to the executor<a name="line.637"></a>
+<span class="sourceLineNo">638</span>   * @param chore the chore to add<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   */<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  public void addChore(final ProcedureInMemoryChore chore) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    timeoutExecutor.add(chore);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>  }<a name="line.643"></a>
+<span class="sourceLineNo">644</span><a name="line.644"></a>
+<span class="sourceLineNo">645</span>  /**<a name="line.645"></a>
+<span class="sourceLineNo">646</span>   * Remove a chore procedure from the executor<a name="line.646"></a>
+<span class="sourceLineNo">647</span>   * @param chore the chore to remove<a name="line.647"></a>
+<span class="sourceLineNo">648</span>   * @return whether the chore is removed, or it will be removed later<a name="line.648"></a>
+<span class="sourceLineNo">649</span>   */<a name="line.649"></a>
+<span class="sourceLineNo">650</span>  public boolean removeChore(final ProcedureInMemoryChore chore) {<a name="line.650"></a>
+<span class="sourceLineNo">651</span>    chore.setState(ProcedureState.SUCCESS);<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    return timeoutExecutor.remove(chore);<a name="line.652"></a>
+<span class="sourceLineNo">653</span>  }<a name="line.653"></a>
+<span class="sourceLineNo">654</span><a name="line.654"></a>
+<span class="sourceLineNo">655</span>  // ==========================================================================<a name="line.655"></a>
+<span class="sourceLineNo">656</span>  //  Nonce Procedure helpers<a name="line.656"></a>
 <span class="sourceLineNo">657</span>  // ==========================================================================<a name="line.657"></a>
-<span class="sourceLineNo">658</span>  //  Nonce Procedure helpers<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  // ==========================================================================<a name="line.659"></a>
-<span class="sourceLineNo">660</span>  /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * @param nonceGroup<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * @param nonce<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * @return the generated NonceKey<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>  }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>  /**<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   * Register a nonce for a procedure that is going to be submitted.<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   * A procId will be reserved and on submitProcedure(),<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   * the procedure with the specified nonce will take the reserved ProcId.<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   * otherwise an invalid procId will be returned. and the caller should procede<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   * and submit the procedure.<a name="line.676"></a>
-<span class="sourceLineNo">677</span>   *<a name="line.677"></a>
-<span class="sourceLineNo">678</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.678"></a>
-<span class="sourceLineNo">679</span>   * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.679"></a>
-<span class="sourceLineNo">680</span>   */<a name="line.680"></a>
-<span class="sourceLineNo">681</span>  public long registerNonce(final NonceKey nonceKey) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    if (nonceKey == null) return -1;<a name="line.682"></a>
-<span class="sourceLineNo">683</span><a name="line.683"></a>
-<span class="sourceLineNo">684</span>    // check if we have already a Reserved ID for the nonce<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    if (oldProcId == null) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      // reserve a new Procedure ID, this will be associated with the nonce<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      // and the procedure submitted with the specified nonce will use this ID.<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      final long newProcId = nextProcId();<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.690"></a>
-<span class="sourceLineNo">691</span>      if (oldProcId == null) return -1;<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>    // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    // since the client expect the procedure to be submitted, spin here until it is.<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    while (isRunning() &amp;&amp;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>           !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &amp;&amp;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>           nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      if (traceEnabled) {<a name="line.700"></a>
-<span class="sourceLineNo">701</span>        LOG.trace("Waiting for procId=" + oldProcId.longValue() + " to be submitted");<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      }<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      Threads.sleep(100);<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    }<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    return oldProcId.longValue();<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  }<a name="line.706"></a>
-<span class="sourceLineNo">707</span><a name="line.707"></a>
-<span class="sourceLineNo">708</span>  /**<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    if (nonceKey == null) return;<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    if (procId == null) return;<a name="line.716"></a>
-<span class="sourceLineNo">717</span><a name="line.717"></a>
-<span class="sourceLineNo">718</span>    // if the procedure was not submitted, remove the nonce<a name="line.718"></a>
-<span class="sourceLineNo">719</span>    if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    }<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  }<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>  /**<a name="line.724"></a>
-<span class="sourceLineNo">725</span>   * If the failure failed before submitting it, we may want to give back the<a name="line.725"></a>
-<span class="sourceLineNo">726</span>   * same error to the requests with the same nonceKey.<a name="line.726"></a>
-<span class="sourceLineNo">727</span>   *<a name="line.727"></a>
-<span class="sourceLineNo">728</span>   * @param nonceKey A unique identifier for this operation from the client or process<a name="line.728"></a>
-<span class="sourceLineNo">729</span>   * @param procName name of the procedure, used to inform the user<a name="line.729"></a>
-<span class="sourceLineNo">730</span>   * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * @param exception the failure to report to the user<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   */<a name="line.732"></a>
-<span class="sourceLineNo">733</span>  public void setFailureResultForNonce(final NonceKey nonceKey, final String procName,<a name="line.733"></a>
-<span class="sourceLineNo">734</span>      final User procOwner, final IOException exception) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    if (nonceKey == null) return;<a name="line.735"></a>
-<span class="sourceLineNo">736</span><a name="line.736"></a>
-<span class="sourceLineNo">737</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    if (procId == null || completed.containsKey(procId)) return;<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>    final long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    final ProcedureInfo result = new ProcedureInfo(procId.longValue(),<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      procName, procOwner != null ? procOwner.getShortName() : null,<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      ProcedureUtil.convertToProcedureState(ProcedureState.ROLLEDBACK),<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      -1, nonceKey, exception, currentTime, currentTime, null);<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    completed.putIfAbsent(procId, result);<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
-<span class="sourceLineNo">747</span><a name="line.747"></a>
+<span class="sourceLineNo">658</span>  /**<a name="line.658"></a>
+<span class="sourceLineNo">659</span>   * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.659"></a>
+<span class="sourceLineNo">660</span>   * @param nonceGroup<a name="line.660"></a>
+<span class="sourceLineNo">661</span>   * @param nonce<a name="line.661"></a>
+<span class="sourceLineNo">662</span>   * @return the generated NonceKey<a name="line.662"></a>
+<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
+<span class="sourceLineNo">664</span>  public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.665"></a>
+<span class="sourceLineNo">666</span>  }<a name="line.666"></a>
+<span class="sourceLineNo">667</span><a name="line.667"></a>
+<span class="sourceLineNo">668</span>  /**<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * Register a nonce for a procedure that is going to be submitted.<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * A procId will be reserved and on submitProcedure(),<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   * the procedure with the specified nonce will take the reserved ProcId.<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   * otherwise an invalid procId will be returned. and the caller should procede<a name="line.673"></a>
+<span class="sourceLineNo">674</span>   * and submit the procedure.<a name="line.674"></a>
+<span class="sourceLineNo">675</span>   *<a name="line.675"></a>
+<span class="sourceLineNo">676</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.676"></a>
+<span class="sourceLineNo">677</span>   * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.677"></a>
+<span class="sourceLineNo">678</span>   */<a name="line.678"></a>
+<span class="sourceLineNo">679</span>  public long registerNonce(final NonceKey nonceKey) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span>    if (nonceKey == null) return -1;<a name="line.680"></a>
+<span class="sourceLineNo">681</span><a name="line.681"></a>
+<span class="sourceLineNo">682</span>    // check if we have already a Reserved ID for the nonce<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>    if (oldProcId == null) {<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      // reserve a new Procedure ID, this will be associated with the nonce<a name="line.685"></a>
+<span class="sourceLineNo">686</span>      // and the procedure submitted with the specified nonce will use this ID.<a name="line.686"></a>
+<span class="sourceLineNo">687</span>      final long newProcId = nextProcId();<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      if (oldProcId == null) return -1;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>    }<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span>    // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    // since the client expect the procedure to be submitted, spin here until it is.<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    while (isRunning() &amp;&amp;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>           !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &amp;&amp;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>           nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.697"></a>
+<span class="sourceLineNo">698</span>      if (traceEnabled) {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>        LOG.trace("Waiting for procId=" + oldProcId.longValue() + " to be submitted");<a name="line.699"></a>
+<span class="sourceLineNo">700</span>      }<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      Threads.sleep(100);<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    }<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    return oldProcId.longValue();<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>  /**<a name="line.706"></a>
+<span class="sourceLineNo">707</span>   * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.707"></a>
+<span class="sourceLineNo">708</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.708"></a>
+<span class="sourceLineNo">709</span>   */<a name="line.709"></a>
+<span class="sourceLineNo">710</span>  public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    if (nonceKey == null) return;<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.713"></a>
+<span class="sourceLineNo">714</span>    if (procId == null) return;<a name="line.714"></a>
+<span class="sourceLineNo">715</span><a name="line.715"></a>
+<span class="sourceLineNo">716</span>    // if the procedure was not submitted, remove the nonce<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    }<a name="line.719"></a>
+<span class="sourceLineNo">720</span>  }<a name="line.720"></a>
+<span class="sourceLineNo">721</span><a name="line.721"></a>
+<span class="sourceLineNo">722</span>  /**<a name="line.722"></a>
+<span class="sourceLineNo">723</span>   * If the failure failed before submitting it, we may want to give back the<a name="line.723"></a>
+<span class="sourceLineNo">724</span>   * same error to the requests with the same nonceKey.<a name="line.724"></a>
+<span class="sourceLineNo">725</span>   *<a name="line.725"></a>
+<span class="sourceLineNo">726</span>   * @param nonceKey A unique identifier for this operation from the client or process<a name="line.726"></a>
+<span class="sourceLineNo">727</span>   * @param procName name of the procedure, used to inform the user<a name="line.727"></a>
+<span class="sourceLineNo">728</span>   * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.728"></a>
+<span class="sourceLineNo">729</span>   * @param exception the failure to report to the user<a name="line.729"></a>
+<span class="sourceLineNo">730</span>   */<a name="line.730"></a>
+<span class="sourceLineNo">731</span>  public void setFailureResultForNonce(final NonceKey nonceKey, final String procName,<a name="line.731"></a>
+<span class="sourceLineNo">732</span>      final User procOwner, final IOException exception) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    if (nonceKey == null) return;<a name="line.733"></a>
+<span class="sourceLineNo">734</span><a name="line.734"></a>
+<span class="sourceLineNo">735</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    if (procId == null || completed.containsKey(procId)) return;<a name="line.736"></a>
+<span class="sourceLineNo">737</span><a name="line.737"></a>
+<span class="sourceLineNo">738</span>    final long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.738"></a>
+<span class="sourceLineNo">739</span>    final ProcedureInfo result = new ProcedureInfo(procId.longValue(),<a name="line.739"></a>
+<span class="sourceLineNo">740</span>      procName, procOwner != null ? procOwner.getShortName() : null,<a name="line.740"></a>
+<span class="sourceLineNo">741</span>      ProcedureUtil.convertToProcedureState(ProcedureState.ROLLEDBACK),<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      -1, nonceKey, exception, currentTime, currentTime, null);<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    completed.putIfAbsent(procId, result);<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>  // ==========================================================================<a name="line.746"></a>
+<span class="sourceLineNo">747</span>  //  Submit/Abort Procedure<a name="line.747"></a>
 <span class="sourceLineNo">748</span>  // ==========================================================================<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  //  Submit/Abort Procedure<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>   * Add a new root-procedure to the executor.<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   * @param proc the new procedure to execute.<a name="line.753"></a>
-<span class="sourceLineNo">754</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.754"></a>
-<span class="sourceLineNo">755</span>   */<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  public long submitProcedure(final Procedure proc) {<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    return submitProcedure(proc, null);<a name="line.757"></a>
-<span class="sourceLineNo">758</span>  }<a name="line.758"></a>
-<span class="sourceLineNo">759</span><a name="line.759"></a>
-<span class="sourceLineNo">760</span>  /**<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   * Add a new root-procedure to the executor.<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * @param proc the new procedure to execute.<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   * @param nonceKey the registered unique identifier for this operation from the client or process.<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   */<a name="line.765"></a>
-<span class="sourceLineNo">766</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NP_NULL_ON_SOME_PATH",<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      justification = "FindBugs is blind to the check-for-null")<a name="line.767"></a>
-<span class="sourceLineNo">768</span>  public long submitProcedure(final Procedure proc, final NonceKey nonceKey) {<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.770"></a>
+<span class="sourceLineNo">749</span>  /**<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * Add a new root-procedure to the executor.<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   * @param proc the new procedure to execute.<a name="line.751"></a>
+<span class="sourceLineNo">752</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.752"></a>
+<span class="sourceLineNo">753</span>   */<a name="line.753"></a>
+<span class="sourceLineNo">754</span>  public long submitProcedure(final Procedure proc) {<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    return submitProcedure(proc, null);<a name="line.755"></a>
+<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
+<span class="sourceLineNo">757</span><a name="line.757"></a>
+<span class="sourceLineNo">758</span>  /**<a name="line.758"></a>
+<span class="sourceLineNo">759</span>   * Add a new root-procedure to the executor.<a name="line.759"></a>
+<span class="sourceLineNo">760</span>   * @param proc the new procedure to execute.<a name="line.760"></a>
+<span class="sourceLineNo">761</span>   * @param nonceKey the registered unique identifier for this operation from the client or process.<a name="line.761"></a>
+<span class="sourceLineNo">762</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.762"></a>
+<span class="sourceLineNo">763</span>   */<a name="line.763"></a>
+<span class="sourceLineNo">764</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NP_NULL_ON_SOME_PATH",<a name="line.764"></a>
+<span class="sourceLineNo">765</span>      justification = "FindBugs is blind to the check-for-null")<a name="line.765"></a>
+<span class="sourceLineNo">766</span>  public long submitProcedure(final Procedure proc, final NonceKey nonceKey) {<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.767"></a>
+<span class="sourceLineNo">768</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.768"></a>
+<span class="sourceLineNo">769</span><a name="line.769"></a>
+<span class="sourceLineNo">770</span>    prepareProcedure(proc);<a name="line.770"></a>
 <span class="sourceLineNo">771</span><a name="line.771"></a>
-<span class="sourceLineNo">772</span>    prepareProcedure(proc);<a name="line.772"></a>
-<span class="sourceLineNo">773</span><a name="line.773"></a>
-<span class="sourceLineNo">774</span>    final Long currentProcId;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    if (nonceKey != null) {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>      currentProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      Preconditions.checkArgument(currentProcId != null,<a name="line.777"></a>
-<span class="sourceLineNo">778</span>        "Expected nonceKey=" + nonceKey + " to be reserved, use registerNonce(); proc=" + proc);<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    } else {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      currentProcId = nextProcId();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>    // Initialize the procedure<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    proc.setNonceKey(nonceKey);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    proc.setProcId(currentProcId.longValue());<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span>    // Commit the transaction<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    store.insert(proc, null);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    if (LOG.isDebugEnabled()) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      LOG.debug("Stored " + proc);<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>    // Add the procedure to the executor<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    return pushProcedure(proc);<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>  /**<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * Add a set of new root-procedure to the executor.<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * @param procs the new procedures to execute.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   */<a name="line.800"></a>
-<span class="sourceLineNo">801</span>  // TODO: Do we need to take nonces here?<a name="line.801"></a>
-<span class="sourceLineNo">802</span>  public void submitProcedures(final Procedure[] procs) {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.804"></a>
-<span class="sourceLineNo">805</span><a name="line.805"></a>
-<span class="sourceLineNo">806</span>    // Prepare procedure<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.807"></a>
-<span class="sourceLineNo">808</span>      prepareProcedure(procs[i]).setProcId(nextProcId());<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    }<a name="line.809"></a>
-<span class="sourceLineNo">810</span><a name="line.810"></a>
-<span class="sourceLineNo">811</span>    // Commit the transaction<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    store.insert(procs);<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    if (LOG.isDebugEnabled()) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>      LOG.debug("Stored " + Arrays.toString(procs));<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>    // Add the procedure to the executor<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.818"></a>
-<span class="sourceLineNo">819</span>      pushProcedure(procs[i]);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    }<a name="line.820"></a>
-<span class="sourceLineNo">821</span>  }<a name="line.821"></a>
-<span class="sourceLineNo">822</span><a name="line.822"></a>
-<span class="sourceLineNo">823</span>  private Procedure prepareProcedure(final Procedure proc) {<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    Preconditions.checkArgument(!proc.hasParent(), "unexpected parent", proc);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    if (this.checkOwnerSet) {<a name="line.827"></a>
-<span class="sourceLineNo">828</span>      Preconditions.checkArgument(proc.hasOwner(), "missing owner");<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    }<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    return proc;<a name="line.830"></a>
-<span class="sourceLineNo">831</span>  }<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span>  private long pushProcedure(final Procedure proc) {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    final long currentProcId = proc.getProcId();<a name="line.834"></a>
-<span class="sourceLineNo">835</span><a name="line.835"></a>
-<span class="sourceLineNo">836</span>    // Create the rollback stack for the procedure<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    RootProcedureState stack = new RootProcedureState();<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    rollbackStack.put(currentProcId, stack);<a name="line.838"></a>
-<span class="sourceLineNo">839</span><a name="line.839"></a>
-<span class="sourceLineNo">840</span>    // Submit the new subprocedures<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    assert !procedures.containsKey(currentProcId);<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    procedures.put(currentProcId, proc);<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    sendProcedureAddedNotification(currentProcId);<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    scheduler.addBack(proc);<a name="line.844"></a>
-<span class="sourceLineNo">845</span>    return proc.getProcId();<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>  /**<a name="line.848"></a>
-<span class="sourceLineNo">849</span>   * Send an abort notification the specified procedure.<a name="line.849"></a>
-<span class="sourceLineNo">850</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.850"></a>
-<span class="sourceLineNo">851</span>   * @param procId the procedure to abort<a name="line.851"></a>
-<span class="sourceLineNo">852</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.852"></a>
-<span class="sourceLineNo">853</span>   */<a name="line.853"></a>
-<span class="sourceLineNo">854</span>  public boolean abort(final long procId) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    return abort(procId, true);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>  }<a name="line.856"></a>
-<span class="sourceLineNo">857</span><a name="line.857"></a>
-<span class="sourceLineNo">858</span>  /**<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * Send an abort notification the specified procedure.<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   * @param procId the procedure to abort<a name="line.861"></a>
-<span class="sourceLineNo">862</span>   * @param mayInterruptIfRunning if the proc completed at least one step, should it be aborted?<a name="line.862"></a>
-<span class="sourceLineNo">863</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.863"></a>
-<span class="sourceLineNo">864</span>   */<a name="line.864"></a>
-<span class="sourceLineNo">865</span>  public boolean abort(final long procId, final boolean mayInterruptIfRunning) {<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    final Procedure proc = procedures.get(procId);<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    if (proc != null) {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>      if (!mayInterruptIfRunning &amp;&amp; proc.wasExecuted()) {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        return false;<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      }<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      return proc.abort(getEnvironment());<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    }<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    return false;<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">772</span>    final Long currentProcId;<a name="line.772"></a>
+<span class="sourceLineNo">773</span>    if (nonceKey != null) {<a name="line.773"></a>
+<span class="sourceLineNo">774</span>      currentProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.774"></a>
+<span class="sourceLineNo">775</span>      Preconditions.checkArgument(currentProcId != null,<a name="line.775"></a>
+<span class="sourceLineNo">776</span>        "Expected nonceKey=" + nonceKey + " to be reserved, use registerNonce(); proc=" + proc);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    } else {<a name="line.777"></a>
+<span class="sourceLineNo">778</span>      currentProcId = nextProcId();<a name="line.778"></a>
+<span class="sourceLineNo">779</span>    }<a name="line.779"></a>
+<span class="sourceLineNo">780</span><a name="line.780"></a>
+<span class="sourceLineNo">781</span>    // Initialize the procedure<a name="line.781"></a>
+<span class="sourceLineNo">782</span>    proc.setNonceKey(nonceKey);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>    proc.setProcId(currentProcId.longValue());<a name="line.783"></a>
+<span class="sourceLineNo">784</span><a name="line.784"></a>
+<span class="sourceLineNo">785</span>    // Commit the transaction<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    store.insert(proc, null);<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    if (LOG.isDebugEnabled()) {<a name="line.787"></a>
+<span class="sourceLineNo">788</span>      LOG.debug("Stored " + proc);<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
+<span class="sourceLineNo">790</span><a name="line.790"></a>
+<span class="sourceLineNo">791</span>    // Add the procedure to the executor<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    return pushProcedure(proc);<a name="line.792"></a>
+<span class="sourceLineNo">793</span>  }<a name="line.793"></a>
+<span class="sourceLineNo">794</span><a name="line.794"></a>
+<span class="sourceLineNo">795</span>  /**<a name="line.795"></a>
+<span class="sourceLineNo">796</span>   * Add a set of new root-procedure to the executor.<a name="line.796"></a>
+<span class="sourceLineNo">797</span>   * @param procs the new procedures to execute.<a name="line.797"></a>
+<span class="sourceLineNo">798</span>   */<a name="line.798"></a>
+<span class="sourceLineNo">799</span>  // TODO: Do we need to take nonces here?<a name="line.799"></a>
+<span class="sourceLineNo">800</span>  public void submitProcedures(final Procedure[] procs) {<a name="line.800"></a>
+<span class="sourceLineNo">801</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.801"></a>
+<span class="sourceLineNo">802</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.802"></a>
+<span class="sourceLineNo">803</span><a name="line.803"></a>
+<span class="sourceLineNo">804</span>    // Prepare procedure<a name="line.804"></a>
+<span class="sourceLineNo">805</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.805"></a>
+<span class="sourceLineNo">806</span>      prepareProcedure(procs[i]).setProcId(nextProcId());<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    }<a name="line.807"></a>
+<span class="sourceLineNo">808</span><a name="line.808"></a>
+<span class="sourceLineNo">809</span>    // Commit the transaction<a name="line.809"></a>
+<span class="sourceLineNo">810</span>    store.insert(procs);<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    if (LOG.isDebugEnabled()) {<a name="line.811"></a>
+<span class="sourceLineNo">812</span>      LOG.debug("Stored " + Arrays.toString(procs));<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    }<a name="line.813"></a>
+<span class="sourceLineNo">814</span><a name="line.814"></a>
+<span class="sourceLineNo">815</span>    // Add the procedure to the executor<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.816"></a>
+<span class="sourceLineNo">817</span>      pushProcedure(procs[i]);<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
+<span class="sourceLineNo">819</span>  }<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span>  private Procedure prepareProcedure(final Procedure proc) {<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.822"></a>
+<span class="sourceLineNo">823</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.823"></a>
+<span class="sourceLineNo">824</span>    Preconditions.checkArgument(!proc.hasParent(), "unexpected parent", proc);<a name="line.824"></a>
+<span class="sourceLineNo">825</span>    if (this.checkOwnerSet) {<a name="line.825"></a>
+<span class="sourceLineNo">826</span>      Preconditions.checkArgument(proc.hasOwner(), "missing owner");<a name="line.826"></a>
+<span class="sourceLineNo">827</span>    }<a name="line.827"></a>
+<span class="sourceLineNo">828</span>    return proc;<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>  private long pushProcedure(final Procedure proc) {<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    final long currentProcId = proc.getProcId();<a name="line.832"></a>
+<span class="sourceLineNo">833</span><a name="line.833"></a>
+<span class="sourceLineNo">834</span>    // Create the rollback stack for the procedure<a name="line.834"></a>
+<span class="sourceLineNo">835</span>    RootProcedureState stack = new RootProcedureState();<a name="line.835"></a>
+<span class="sourceLineNo">836</span>    rollbackStack.put(currentProcId, stack);<a name="line.836"></a>
+<span class="sourceLineNo">837</span><a name="line.837"></a>
+<span class="sourceLineNo">838</span>    // Submit the new subprocedures<a name="line.838"></a>
+<span class="sourceLineNo">839</span>    assert !procedures.containsKey(currentProcId);<a name="line.839"></a>
+<span class="sourceLineNo">840</span>    procedures.put(currentProcId, proc);<a name="line.840"></a>
+<span class="sourceLineNo">841</span> 

<TRUNCATED>

[02/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
index 86a3c71..4188261 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
@@ -69,15 +69,15 @@
 <span class="sourceLineNo">061</span>  requiredArguments = {<a name="line.61"></a>
 <span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "master", type = "HMaster")},<a name="line.62"></a>
 <span class="sourceLineNo">063</span>  optionalArguments = {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.67"></a>
+<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.67"></a>
 <span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    @org.jamon.annotations.Argument(name = "filter", type = "String")})<a name="line.72"></a>
+<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager")})<a name="line.72"></a>
 <span class="sourceLineNo">073</span>public class MasterStatusTmpl<a name="line.73"></a>
 <span class="sourceLineNo">074</span>  extends org.jamon.AbstractTemplateProxy<a name="line.74"></a>
 <span class="sourceLineNo">075</span>{<a name="line.75"></a>
@@ -118,74 +118,74 @@
 <span class="sourceLineNo">110</span>      return m_master;<a name="line.110"></a>
 <span class="sourceLineNo">111</span>    }<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    private HMaster m_master;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    // 29, 1<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.114"></a>
+<span class="sourceLineNo">113</span>    // 23, 1<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.114"></a>
 <span class="sourceLineNo">115</span>    {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      // 29, 1<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      m_assignmentManager = assignmentManager;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      m_assignmentManager__IsNotDefault = true;<a name="line.118"></a>
+<span class="sourceLineNo">116</span>      // 23, 1<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      m_servers = servers;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      m_servers__IsNotDefault = true;<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    }<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    public AssignmentManager getAssignmentManager()<a name="line.120"></a>
+<span class="sourceLineNo">120</span>    public List&lt;ServerName&gt; getServers()<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      return m_assignmentManager;<a name="line.122"></a>
+<span class="sourceLineNo">122</span>      return m_servers;<a name="line.122"></a>
 <span class="sourceLineNo">123</span>    }<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    private AssignmentManager m_assignmentManager;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.125"></a>
+<span class="sourceLineNo">124</span>    private List&lt;ServerName&gt; m_servers;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    public boolean getServers__IsNotDefault()<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      return m_assignmentManager__IsNotDefault;<a name="line.127"></a>
+<span class="sourceLineNo">127</span>      return m_servers__IsNotDefault;<a name="line.127"></a>
 <span class="sourceLineNo">128</span>    }<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    // 22, 1<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.131"></a>
+<span class="sourceLineNo">129</span>    private boolean m_servers__IsNotDefault;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    // 27, 1<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    public void setFormat(String format)<a name="line.131"></a>
 <span class="sourceLineNo">132</span>    {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      // 22, 1<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      m_metaLocation = metaLocation;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      m_metaLocation__IsNotDefault = true;<a name="line.135"></a>
+<span class="sourceLineNo">133</span>      // 27, 1<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      m_format = format;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      m_format__IsNotDefault = true;<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    }<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    public ServerName getMetaLocation()<a name="line.137"></a>
+<span class="sourceLineNo">137</span>    public String getFormat()<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      return m_metaLocation;<a name="line.139"></a>
+<span class="sourceLineNo">139</span>      return m_format;<a name="line.139"></a>
 <span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    private ServerName m_metaLocation;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.142"></a>
+<span class="sourceLineNo">141</span>    private String m_format;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    public boolean getFormat__IsNotDefault()<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      return m_metaLocation__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">144</span>      return m_format__IsNotDefault;<a name="line.144"></a>
 <span class="sourceLineNo">145</span>    }<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    // 28, 1<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    public void setServerManager(ServerManager serverManager)<a name="line.148"></a>
+<span class="sourceLineNo">146</span>    private boolean m_format__IsNotDefault;<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    // 25, 1<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.148"></a>
 <span class="sourceLineNo">149</span>    {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      // 28, 1<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      m_serverManager = serverManager;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      m_serverManager__IsNotDefault = true;<a name="line.152"></a>
+<span class="sourceLineNo">150</span>      // 25, 1<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.152"></a>
 <span class="sourceLineNo">153</span>    }<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    public ServerManager getServerManager()<a name="line.154"></a>
+<span class="sourceLineNo">154</span>    public boolean getCatalogJanitorEnabled()<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      return m_serverManager;<a name="line.156"></a>
+<span class="sourceLineNo">156</span>      return m_catalogJanitorEnabled;<a name="line.156"></a>
 <span class="sourceLineNo">157</span>    }<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    private ServerManager m_serverManager;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    public boolean getServerManager__IsNotDefault()<a name="line.159"></a>
+<span class="sourceLineNo">158</span>    private boolean m_catalogJanitorEnabled;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.159"></a>
 <span class="sourceLineNo">160</span>    {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      return m_serverManager__IsNotDefault;<a name="line.161"></a>
+<span class="sourceLineNo">161</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    private boolean m_serverManager__IsNotDefault;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    // 27, 1<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    public void setFormat(String format)<a name="line.165"></a>
+<span class="sourceLineNo">163</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    // 21, 1<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.165"></a>
 <span class="sourceLineNo">166</span>    {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      // 27, 1<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      m_format = format;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      m_format__IsNotDefault = true;<a name="line.169"></a>
+<span class="sourceLineNo">167</span>      // 21, 1<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      m_frags = frags;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      m_frags__IsNotDefault = true;<a name="line.169"></a>
 <span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    public String getFormat()<a name="line.171"></a>
+<span class="sourceLineNo">171</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.171"></a>
 <span class="sourceLineNo">172</span>    {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      return m_format;<a name="line.173"></a>
+<span class="sourceLineNo">173</span>      return m_frags;<a name="line.173"></a>
 <span class="sourceLineNo">174</span>    }<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    private String m_format;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    public boolean getFormat__IsNotDefault()<a name="line.176"></a>
+<span class="sourceLineNo">175</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    public boolean getFrags__IsNotDefault()<a name="line.176"></a>
 <span class="sourceLineNo">177</span>    {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      return m_format__IsNotDefault;<a name="line.178"></a>
+<span class="sourceLineNo">178</span>      return m_frags__IsNotDefault;<a name="line.178"></a>
 <span class="sourceLineNo">179</span>    }<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    private boolean m_format__IsNotDefault;<a name="line.180"></a>
+<span class="sourceLineNo">180</span>    private boolean m_frags__IsNotDefault;<a name="line.180"></a>
 <span class="sourceLineNo">181</span>    // 24, 1<a name="line.181"></a>
 <span class="sourceLineNo">182</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.182"></a>
 <span class="sourceLineNo">183</span>    {<a name="line.183"></a>
@@ -203,74 +203,74 @@
 <span class="sourceLineNo">195</span>      return m_deadServers__IsNotDefault;<a name="line.195"></a>
 <span class="sourceLineNo">196</span>    }<a name="line.196"></a>
 <span class="sourceLineNo">197</span>    private boolean m_deadServers__IsNotDefault;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    // 21, 1<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.199"></a>
+<span class="sourceLineNo">198</span>    // 29, 1<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.199"></a>
 <span class="sourceLineNo">200</span>    {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      // 21, 1<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      m_frags = frags;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      m_frags__IsNotDefault = true;<a name="line.203"></a>
+<span class="sourceLineNo">201</span>      // 29, 1<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      m_assignmentManager = assignmentManager;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      m_assignmentManager__IsNotDefault = true;<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.205"></a>
+<span class="sourceLineNo">205</span>    public AssignmentManager getAssignmentManager()<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      return m_frags;<a name="line.207"></a>
+<span class="sourceLineNo">207</span>      return m_assignmentManager;<a name="line.207"></a>
 <span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    public boolean getFrags__IsNotDefault()<a name="line.210"></a>
+<span class="sourceLineNo">209</span>    private AssignmentManager m_assignmentManager;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      return m_frags__IsNotDefault;<a name="line.212"></a>
+<span class="sourceLineNo">212</span>      return m_assignmentManager__IsNotDefault;<a name="line.212"></a>
 <span class="sourceLineNo">213</span>    }<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    private boolean m_frags__IsNotDefault;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    // 23, 1<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.216"></a>
+<span class="sourceLineNo">214</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    // 22, 1<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.216"></a>
 <span class="sourceLineNo">217</span>    {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      // 23, 1<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      m_servers = servers;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      m_servers__IsNotDefault = true;<a name="line.220"></a>
+<span class="sourceLineNo">218</span>      // 22, 1<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      m_metaLocation = metaLocation;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      m_metaLocation__IsNotDefault = true;<a name="line.220"></a>
 <span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    public List&lt;ServerName&gt; getServers()<a name="line.222"></a>
+<span class="sourceLineNo">222</span>    public ServerName getMetaLocation()<a name="line.222"></a>
 <span class="sourceLineNo">223</span>    {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      return m_servers;<a name="line.224"></a>
+<span class="sourceLineNo">224</span>      return m_metaLocation;<a name="line.224"></a>
 <span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    private List&lt;ServerName&gt; m_servers;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    public boolean getServers__IsNotDefault()<a name="line.227"></a>
+<span class="sourceLineNo">226</span>    private ServerName m_metaLocation;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      return m_servers__IsNotDefault;<a name="line.229"></a>
+<span class="sourceLineNo">229</span>      return m_metaLocation__IsNotDefault;<a name="line.229"></a>
 <span class="sourceLineNo">230</span>    }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    private boolean m_servers__IsNotDefault;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    // 25, 1<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.233"></a>
+<span class="sourceLineNo">231</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    // 26, 1<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    public void setFilter(String filter)<a name="line.233"></a>
 <span class="sourceLineNo">234</span>    {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      // 25, 1<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.237"></a>
+<span class="sourceLineNo">235</span>      // 26, 1<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      m_filter = filter;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      m_filter__IsNotDefault = true;<a name="line.237"></a>
 <span class="sourceLineNo">238</span>    }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    public boolean getCatalogJanitorEnabled()<a name="line.239"></a>
+<span class="sourceLineNo">239</span>    public String getFilter()<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      return m_catalogJanitorEnabled;<a name="line.241"></a>
+<span class="sourceLineNo">241</span>      return m_filter;<a name="line.241"></a>
 <span class="sourceLineNo">242</span>    }<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    private boolean m_catalogJanitorEnabled;<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.244"></a>
+<span class="sourceLineNo">243</span>    private String m_filter;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    public boolean getFilter__IsNotDefault()<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.246"></a>
+<span class="sourceLineNo">246</span>      return m_filter__IsNotDefault;<a name="line.246"></a>
 <span class="sourceLineNo">247</span>    }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    // 26, 1<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    public void setFilter(String filter)<a name="line.250"></a>
+<span class="sourceLineNo">248</span>    private boolean m_filter__IsNotDefault;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    // 28, 1<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    public void setServerManager(ServerManager serverManager)<a name="line.250"></a>
 <span class="sourceLineNo">251</span>    {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      // 26, 1<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      m_filter = filter;<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      m_filter__IsNotDefault = true;<a name="line.254"></a>
+<span class="sourceLineNo">252</span>      // 28, 1<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      m_serverManager = serverManager;<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      m_serverManager__IsNotDefault = true;<a name="line.254"></a>
 <span class="sourceLineNo">255</span>    }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    public String getFilter()<a name="line.256"></a>
+<span class="sourceLineNo">256</span>    public ServerManager getServerManager()<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      return m_filter;<a name="line.258"></a>
+<span class="sourceLineNo">258</span>      return m_serverManager;<a name="line.258"></a>
 <span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    private String m_filter;<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    public boolean getFilter__IsNotDefault()<a name="line.261"></a>
+<span class="sourceLineNo">260</span>    private ServerManager m_serverManager;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    public boolean getServerManager__IsNotDefault()<a name="line.261"></a>
 <span class="sourceLineNo">262</span>    {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      return m_filter__IsNotDefault;<a name="line.263"></a>
+<span class="sourceLineNo">263</span>      return m_serverManager__IsNotDefault;<a name="line.263"></a>
 <span class="sourceLineNo">264</span>    }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    private boolean m_filter__IsNotDefault;<a name="line.265"></a>
+<span class="sourceLineNo">265</span>    private boolean m_serverManager__IsNotDefault;<a name="line.265"></a>
 <span class="sourceLineNo">266</span>  }<a name="line.266"></a>
 <span class="sourceLineNo">267</span>  @Override<a name="line.267"></a>
 <span class="sourceLineNo">268</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.268"></a>
@@ -282,31 +282,31 @@
 <span class="sourceLineNo">274</span>    return (ImplData) super.getImplData();<a name="line.274"></a>
 <span class="sourceLineNo">275</span>  }<a name="line.275"></a>
 <span class="sourceLineNo">276</span>  <a name="line.276"></a>
-<span class="sourceLineNo">277</span>  protected AssignmentManager assignmentManager;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.278"></a>
+<span class="sourceLineNo">277</span>  protected List&lt;ServerName&gt; servers;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.278"></a>
 <span class="sourceLineNo">279</span>  {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.280"></a>
+<span class="sourceLineNo">280</span>    (getImplData()).setServers(p_servers);<a name="line.280"></a>
 <span class="sourceLineNo">281</span>    return this;<a name="line.281"></a>
 <span class="sourceLineNo">282</span>  }<a name="line.282"></a>
 <span class="sourceLineNo">283</span>  <a name="line.283"></a>
-<span class="sourceLineNo">284</span>  protected ServerName metaLocation;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.285"></a>
+<span class="sourceLineNo">284</span>  protected String format;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.285"></a>
 <span class="sourceLineNo">286</span>  {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.287"></a>
+<span class="sourceLineNo">287</span>    (getImplData()).setFormat(p_format);<a name="line.287"></a>
 <span class="sourceLineNo">288</span>    return this;<a name="line.288"></a>
 <span class="sourceLineNo">289</span>  }<a name="line.289"></a>
 <span class="sourceLineNo">290</span>  <a name="line.290"></a>
-<span class="sourceLineNo">291</span>  protected ServerManager serverManager;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.292"></a>
+<span class="sourceLineNo">291</span>  protected boolean catalogJanitorEnabled;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.292"></a>
 <span class="sourceLineNo">293</span>  {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.294"></a>
+<span class="sourceLineNo">294</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.294"></a>
 <span class="sourceLineNo">295</span>    return this;<a name="line.295"></a>
 <span class="sourceLineNo">296</span>  }<a name="line.296"></a>
 <span class="sourceLineNo">297</span>  <a name="line.297"></a>
-<span class="sourceLineNo">298</span>  protected String format;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.299"></a>
+<span class="sourceLineNo">298</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.298"></a>
+<span class="sourceLineNo">299</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.299"></a>
 <span class="sourceLineNo">300</span>  {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    (getImplData()).setFormat(p_format);<a name="line.301"></a>
+<span class="sourceLineNo">301</span>    (getImplData()).setFrags(p_frags);<a name="line.301"></a>
 <span class="sourceLineNo">302</span>    return this;<a name="line.302"></a>
 <span class="sourceLineNo">303</span>  }<a name="line.303"></a>
 <span class="sourceLineNo">304</span>  <a name="line.304"></a>
@@ -317,31 +317,31 @@
 <span class="sourceLineNo">309</span>    return this;<a name="line.309"></a>
 <span class="sourceLineNo">310</span>  }<a name="line.310"></a>
 <span class="sourceLineNo">311</span>  <a name="line.311"></a>
-<span class="sourceLineNo">312</span>  protected Map&lt;String,Integer&gt; frags;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.313"></a>
+<span class="sourceLineNo">312</span>  protected AssignmentManager assignmentManager;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.313"></a>
 <span class="sourceLineNo">314</span>  {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    (getImplData()).setFrags(p_frags);<a name="line.315"></a>
+<span class="sourceLineNo">315</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.315"></a>
 <span class="sourceLineNo">316</span>    return this;<a name="line.316"></a>
 <span class="sourceLineNo">317</span>  }<a name="line.317"></a>
 <span class="sourceLineNo">318</span>  <a name="line.318"></a>
-<span class="sourceLineNo">319</span>  protected List&lt;ServerName&gt; servers;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.320"></a>
+<span class="sourceLineNo">319</span>  protected ServerName metaLocation;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.320"></a>
 <span class="sourceLineNo">321</span>  {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    (getImplData()).setServers(p_servers);<a name="line.322"></a>
+<span class="sourceLineNo">322</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.322"></a>
 <span class="sourceLineNo">323</span>    return this;<a name="line.323"></a>
 <span class="sourceLineNo">324</span>  }<a name="line.324"></a>
 <span class="sourceLineNo">325</span>  <a name="line.325"></a>
-<span class="sourceLineNo">326</span>  protected boolean catalogJanitorEnabled;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.327"></a>
+<span class="sourceLineNo">326</span>  protected String filter;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.327"></a>
 <span class="sourceLineNo">328</span>  {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.329"></a>
+<span class="sourceLineNo">329</span>    (getImplData()).setFilter(p_filter);<a name="line.329"></a>
 <span class="sourceLineNo">330</span>    return this;<a name="line.330"></a>
 <span class="sourceLineNo">331</span>  }<a name="line.331"></a>
 <span class="sourceLineNo">332</span>  <a name="line.332"></a>
-<span class="sourceLineNo">333</span>  protected String filter;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.334"></a>
+<span class="sourceLineNo">333</span>  protected ServerManager serverManager;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.334"></a>
 <span class="sourceLineNo">335</span>  {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    (getImplData()).setFilter(p_filter);<a name="line.336"></a>
+<span class="sourceLineNo">336</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.336"></a>
 <span class="sourceLineNo">337</span>    return this;<a name="line.337"></a>
 <span class="sourceLineNo">338</span>  }<a name="line.338"></a>
 <span class="sourceLineNo">339</span>  <a name="line.339"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
index ab29a14..a0c26d0 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
@@ -70,15 +70,15 @@
 <span class="sourceLineNo">062</span><a name="line.62"></a>
 <span class="sourceLineNo">063</span>{<a name="line.63"></a>
 <span class="sourceLineNo">064</span>  private final HMaster master;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  private final AssignmentManager assignmentManager;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private final ServerName metaLocation;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private final ServerManager serverManager;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  private final String format;<a name="line.68"></a>
+<span class="sourceLineNo">065</span>  private final List&lt;ServerName&gt; servers;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private final String format;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  private final boolean catalogJanitorEnabled;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private final Map&lt;String,Integer&gt; frags;<a name="line.68"></a>
 <span class="sourceLineNo">069</span>  private final Set&lt;ServerName&gt; deadServers;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private final Map&lt;String,Integer&gt; frags;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private final List&lt;ServerName&gt; servers;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private final boolean catalogJanitorEnabled;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private final String filter;<a name="line.73"></a>
+<span class="sourceLineNo">070</span>  private final AssignmentManager assignmentManager;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private final ServerName metaLocation;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  private final String filter;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  private final ServerManager serverManager;<a name="line.73"></a>
 <span class="sourceLineNo">074</span>  // 69, 1<a name="line.74"></a>
 <span class="sourceLineNo">075</span>  <a name="line.75"></a>
 <span class="sourceLineNo">076</span>  public String formatZKString() {<a name="line.76"></a>
@@ -108,41 +108,41 @@
 <span class="sourceLineNo">100</span><a name="line.100"></a>
 <span class="sourceLineNo">101</span>  protected static org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl.ImplData p_implData)<a name="line.101"></a>
 <span class="sourceLineNo">102</span>  {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    if(! p_implData.getAssignmentManager__IsNotDefault())<a name="line.103"></a>
+<span class="sourceLineNo">103</span>    if(! p_implData.getServers__IsNotDefault())<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      p_implData.setAssignmentManager(null);<a name="line.105"></a>
+<span class="sourceLineNo">105</span>      p_implData.setServers(null);<a name="line.105"></a>
 <span class="sourceLineNo">106</span>    }<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    if(! p_implData.getMetaLocation__IsNotDefault())<a name="line.107"></a>
+<span class="sourceLineNo">107</span>    if(! p_implData.getFormat__IsNotDefault())<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      p_implData.setMetaLocation(null);<a name="line.109"></a>
+<span class="sourceLineNo">109</span>      p_implData.setFormat("html");<a name="line.109"></a>
 <span class="sourceLineNo">110</span>    }<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    if(! p_implData.getServerManager__IsNotDefault())<a name="line.111"></a>
+<span class="sourceLineNo">111</span>    if(! p_implData.getCatalogJanitorEnabled__IsNotDefault())<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      p_implData.setServerManager(null);<a name="line.113"></a>
+<span class="sourceLineNo">113</span>      p_implData.setCatalogJanitorEnabled(true);<a name="line.113"></a>
 <span class="sourceLineNo">114</span>    }<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    if(! p_implData.getFormat__IsNotDefault())<a name="line.115"></a>
+<span class="sourceLineNo">115</span>    if(! p_implData.getFrags__IsNotDefault())<a name="line.115"></a>
 <span class="sourceLineNo">116</span>    {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      p_implData.setFormat("html");<a name="line.117"></a>
+<span class="sourceLineNo">117</span>      p_implData.setFrags(null);<a name="line.117"></a>
 <span class="sourceLineNo">118</span>    }<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    if(! p_implData.getDeadServers__IsNotDefault())<a name="line.119"></a>
 <span class="sourceLineNo">120</span>    {<a name="line.120"></a>
 <span class="sourceLineNo">121</span>      p_implData.setDeadServers(null);<a name="line.121"></a>
 <span class="sourceLineNo">122</span>    }<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    if(! p_implData.getFrags__IsNotDefault())<a name="line.123"></a>
+<span class="sourceLineNo">123</span>    if(! p_implData.getAssignmentManager__IsNotDefault())<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      p_implData.setFrags(null);<a name="line.125"></a>
+<span class="sourceLineNo">125</span>      p_implData.setAssignmentManager(null);<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    }<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    if(! p_implData.getServers__IsNotDefault())<a name="line.127"></a>
+<span class="sourceLineNo">127</span>    if(! p_implData.getMetaLocation__IsNotDefault())<a name="line.127"></a>
 <span class="sourceLineNo">128</span>    {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      p_implData.setServers(null);<a name="line.129"></a>
+<span class="sourceLineNo">129</span>      p_implData.setMetaLocation(null);<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    }<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    if(! p_implData.getCatalogJanitorEnabled__IsNotDefault())<a name="line.131"></a>
+<span class="sourceLineNo">131</span>    if(! p_implData.getFilter__IsNotDefault())<a name="line.131"></a>
 <span class="sourceLineNo">132</span>    {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      p_implData.setCatalogJanitorEnabled(true);<a name="line.133"></a>
+<span class="sourceLineNo">133</span>      p_implData.setFilter("general");<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    if(! p_implData.getFilter__IsNotDefault())<a name="line.135"></a>
+<span class="sourceLineNo">135</span>    if(! p_implData.getServerManager__IsNotDefault())<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      p_implData.setFilter("general");<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      p_implData.setServerManager(null);<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
 <span class="sourceLineNo">139</span>    return p_implData;<a name="line.139"></a>
 <span class="sourceLineNo">140</span>  }<a name="line.140"></a>
@@ -150,15 +150,15 @@
 <span class="sourceLineNo">142</span>  {<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    super(p_templateManager, __jamon_setOptionalArguments(p_implData));<a name="line.143"></a>
 <span class="sourceLineNo">144</span>    master = p_implData.getMaster();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    assignmentManager = p_implData.getAssignmentManager();<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    metaLocation = p_implData.getMetaLocation();<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    serverManager = p_implData.getServerManager();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    format = p_implData.getFormat();<a name="line.148"></a>
+<span class="sourceLineNo">145</span>    servers = p_implData.getServers();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    format = p_implData.getFormat();<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    catalogJanitorEnabled = p_implData.getCatalogJanitorEnabled();<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    frags = p_implData.getFrags();<a name="line.148"></a>
 <span class="sourceLineNo">149</span>    deadServers = p_implData.getDeadServers();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    frags = p_implData.getFrags();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    servers = p_implData.getServers();<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    catalogJanitorEnabled = p_implData.getCatalogJanitorEnabled();<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    filter = p_implData.getFilter();<a name="line.153"></a>
+<span class="sourceLineNo">150</span>    assignmentManager = p_implData.getAssignmentManager();<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    metaLocation = p_implData.getMetaLocation();<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    filter = p_implData.getFilter();<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    serverManager = p_implData.getServerManager();<a name="line.153"></a>
 <span class="sourceLineNo">154</span>  }<a name="line.154"></a>
 <span class="sourceLineNo">155</span>  <a name="line.155"></a>
 <span class="sourceLineNo">156</span>  @Override public void renderNoFlush(final java.io.Writer jamonWriter)<a name="line.156"></a>
@@ -172,8 +172,8 @@
 <span class="sourceLineNo">164</span>      // 61, 3<a name="line.164"></a>
 <span class="sourceLineNo">165</span>      {<a name="line.165"></a>
 <span class="sourceLineNo">166</span>        org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl __jamon__var_0 = new org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl(this.getTemplateManager());<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        __jamon__var_0.setFilter(filter);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        __jamon__var_0.setFormat("json" );<a name="line.168"></a>
+<span class="sourceLineNo">167</span>        __jamon__var_0.setFormat("json" );<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        __jamon__var_0.setFilter(filter);<a name="line.168"></a>
 <span class="sourceLineNo">169</span>        __jamon__var_0.renderNoFlush(jamonWriter);<a name="line.169"></a>
 <span class="sourceLineNo">170</span>      }<a name="line.170"></a>
 <span class="sourceLineNo">171</span>      // 61, 68<a name="line.171"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
index 57f2f60..f6e621c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
@@ -33,10 +33,10 @@
 <span class="sourceLineNo">025</span>  requiredArguments = {<a name="line.25"></a>
 <span class="sourceLineNo">026</span>    @org.jamon.annotations.Argument(name = "regionServer", type = "HRegionServer")},<a name="line.26"></a>
 <span class="sourceLineNo">027</span>  optionalArguments = {<a name="line.27"></a>
-<span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "bcn", type = "String"),<a name="line.28"></a>
+<span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.28"></a>
 <span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.29"></a>
 <span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.30"></a>
-<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "format", type = "String")})<a name="line.31"></a>
+<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "bcn", type = "String")})<a name="line.31"></a>
 <span class="sourceLineNo">032</span>public class RSStatusTmpl<a name="line.32"></a>
 <span class="sourceLineNo">033</span>  extends org.jamon.AbstractTemplateProxy<a name="line.33"></a>
 <span class="sourceLineNo">034</span>{<a name="line.34"></a>
@@ -77,23 +77,23 @@
 <span class="sourceLineNo">069</span>      return m_regionServer;<a name="line.69"></a>
 <span class="sourceLineNo">070</span>    }<a name="line.70"></a>
 <span class="sourceLineNo">071</span>    private HRegionServer m_regionServer;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    // 23, 1<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    public void setBcn(String bcn)<a name="line.73"></a>
+<span class="sourceLineNo">072</span>    // 22, 1<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    public void setFormat(String format)<a name="line.73"></a>
 <span class="sourceLineNo">074</span>    {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      // 23, 1<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      m_bcn = bcn;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      m_bcn__IsNotDefault = true;<a name="line.77"></a>
+<span class="sourceLineNo">075</span>      // 22, 1<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      m_format = format;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      m_format__IsNotDefault = true;<a name="line.77"></a>
 <span class="sourceLineNo">078</span>    }<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    public String getBcn()<a name="line.79"></a>
+<span class="sourceLineNo">079</span>    public String getFormat()<a name="line.79"></a>
 <span class="sourceLineNo">080</span>    {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      return m_bcn;<a name="line.81"></a>
+<span class="sourceLineNo">081</span>      return m_format;<a name="line.81"></a>
 <span class="sourceLineNo">082</span>    }<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    private String m_bcn;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    public boolean getBcn__IsNotDefault()<a name="line.84"></a>
+<span class="sourceLineNo">083</span>    private String m_format;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    public boolean getFormat__IsNotDefault()<a name="line.84"></a>
 <span class="sourceLineNo">085</span>    {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      return m_bcn__IsNotDefault;<a name="line.86"></a>
+<span class="sourceLineNo">086</span>      return m_format__IsNotDefault;<a name="line.86"></a>
 <span class="sourceLineNo">087</span>    }<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    private boolean m_bcn__IsNotDefault;<a name="line.88"></a>
+<span class="sourceLineNo">088</span>    private boolean m_format__IsNotDefault;<a name="line.88"></a>
 <span class="sourceLineNo">089</span>    // 21, 1<a name="line.89"></a>
 <span class="sourceLineNo">090</span>    public void setFilter(String filter)<a name="line.90"></a>
 <span class="sourceLineNo">091</span>    {<a name="line.91"></a>
@@ -128,23 +128,23 @@
 <span class="sourceLineNo">120</span>      return m_bcv__IsNotDefault;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
 <span class="sourceLineNo">122</span>    private boolean m_bcv__IsNotDefault;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // 22, 1<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    public void setFormat(String format)<a name="line.124"></a>
+<span class="sourceLineNo">123</span>    // 23, 1<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    public void setBcn(String bcn)<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      // 22, 1<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      m_format = format;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      m_format__IsNotDefault = true;<a name="line.128"></a>
+<span class="sourceLineNo">126</span>      // 23, 1<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      m_bcn = bcn;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      m_bcn__IsNotDefault = true;<a name="line.128"></a>
 <span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    public String getFormat()<a name="line.130"></a>
+<span class="sourceLineNo">130</span>    public String getBcn()<a name="line.130"></a>
 <span class="sourceLineNo">131</span>    {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      return m_format;<a name="line.132"></a>
+<span class="sourceLineNo">132</span>      return m_bcn;<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    private String m_format;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public boolean getFormat__IsNotDefault()<a name="line.135"></a>
+<span class="sourceLineNo">134</span>    private String m_bcn;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    public boolean getBcn__IsNotDefault()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_format__IsNotDefault;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_bcn__IsNotDefault;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private boolean m_format__IsNotDefault;<a name="line.139"></a>
+<span class="sourceLineNo">139</span>    private boolean m_bcn__IsNotDefault;<a name="line.139"></a>
 <span class="sourceLineNo">140</span>  }<a name="line.140"></a>
 <span class="sourceLineNo">141</span>  @Override<a name="line.141"></a>
 <span class="sourceLineNo">142</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.142"></a>
@@ -156,10 +156,10 @@
 <span class="sourceLineNo">148</span>    return (ImplData) super.getImplData();<a name="line.148"></a>
 <span class="sourceLineNo">149</span>  }<a name="line.149"></a>
 <span class="sourceLineNo">150</span>  <a name="line.150"></a>
-<span class="sourceLineNo">151</span>  protected String bcn;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.152"></a>
+<span class="sourceLineNo">151</span>  protected String format;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.152"></a>
 <span class="sourceLineNo">153</span>  {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    (getImplData()).setBcn(p_bcn);<a name="line.154"></a>
+<span class="sourceLineNo">154</span>    (getImplData()).setFormat(p_format);<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    return this;<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>
@@ -177,10 +177,10 @@
 <span class="sourceLineNo">169</span>    return this;<a name="line.169"></a>
 <span class="sourceLineNo">170</span>  }<a name="line.170"></a>
 <span class="sourceLineNo">171</span>  <a name="line.171"></a>
-<span class="sourceLineNo">172</span>  protected String format;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.173"></a>
+<span class="sourceLineNo">172</span>  protected String bcn;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.173"></a>
 <span class="sourceLineNo">174</span>  {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    (getImplData()).setFormat(p_format);<a name="line.175"></a>
+<span class="sourceLineNo">175</span>    (getImplData()).setBcn(p_bcn);<a name="line.175"></a>
 <span class="sourceLineNo">176</span>    return this;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  }<a name="line.177"></a>
 <span class="sourceLineNo">178</span>  <a name="line.178"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html
index 57f2f60..f6e621c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html
@@ -33,10 +33,10 @@
 <span class="sourceLineNo">025</span>  requiredArguments = {<a name="line.25"></a>
 <span class="sourceLineNo">026</span>    @org.jamon.annotations.Argument(name = "regionServer", type = "HRegionServer")},<a name="line.26"></a>
 <span class="sourceLineNo">027</span>  optionalArguments = {<a name="line.27"></a>
-<span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "bcn", type = "String"),<a name="line.28"></a>
+<span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.28"></a>
 <span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.29"></a>
 <span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.30"></a>
-<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "format", type = "String")})<a name="line.31"></a>
+<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "bcn", type = "String")})<a name="line.31"></a>
 <span class="sourceLineNo">032</span>public class RSStatusTmpl<a name="line.32"></a>
 <span class="sourceLineNo">033</span>  extends org.jamon.AbstractTemplateProxy<a name="line.33"></a>
 <span class="sourceLineNo">034</span>{<a name="line.34"></a>
@@ -77,23 +77,23 @@
 <span class="sourceLineNo">069</span>      return m_regionServer;<a name="line.69"></a>
 <span class="sourceLineNo">070</span>    }<a name="line.70"></a>
 <span class="sourceLineNo">071</span>    private HRegionServer m_regionServer;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    // 23, 1<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    public void setBcn(String bcn)<a name="line.73"></a>
+<span class="sourceLineNo">072</span>    // 22, 1<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    public void setFormat(String format)<a name="line.73"></a>
 <span class="sourceLineNo">074</span>    {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      // 23, 1<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      m_bcn = bcn;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      m_bcn__IsNotDefault = true;<a name="line.77"></a>
+<span class="sourceLineNo">075</span>      // 22, 1<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      m_format = format;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      m_format__IsNotDefault = true;<a name="line.77"></a>
 <span class="sourceLineNo">078</span>    }<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    public String getBcn()<a name="line.79"></a>
+<span class="sourceLineNo">079</span>    public String getFormat()<a name="line.79"></a>
 <span class="sourceLineNo">080</span>    {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      return m_bcn;<a name="line.81"></a>
+<span class="sourceLineNo">081</span>      return m_format;<a name="line.81"></a>
 <span class="sourceLineNo">082</span>    }<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    private String m_bcn;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    public boolean getBcn__IsNotDefault()<a name="line.84"></a>
+<span class="sourceLineNo">083</span>    private String m_format;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    public boolean getFormat__IsNotDefault()<a name="line.84"></a>
 <span class="sourceLineNo">085</span>    {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      return m_bcn__IsNotDefault;<a name="line.86"></a>
+<span class="sourceLineNo">086</span>      return m_format__IsNotDefault;<a name="line.86"></a>
 <span class="sourceLineNo">087</span>    }<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    private boolean m_bcn__IsNotDefault;<a name="line.88"></a>
+<span class="sourceLineNo">088</span>    private boolean m_format__IsNotDefault;<a name="line.88"></a>
 <span class="sourceLineNo">089</span>    // 21, 1<a name="line.89"></a>
 <span class="sourceLineNo">090</span>    public void setFilter(String filter)<a name="line.90"></a>
 <span class="sourceLineNo">091</span>    {<a name="line.91"></a>
@@ -128,23 +128,23 @@
 <span class="sourceLineNo">120</span>      return m_bcv__IsNotDefault;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
 <span class="sourceLineNo">122</span>    private boolean m_bcv__IsNotDefault;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // 22, 1<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    public void setFormat(String format)<a name="line.124"></a>
+<span class="sourceLineNo">123</span>    // 23, 1<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    public void setBcn(String bcn)<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      // 22, 1<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      m_format = format;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      m_format__IsNotDefault = true;<a name="line.128"></a>
+<span class="sourceLineNo">126</span>      // 23, 1<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      m_bcn = bcn;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      m_bcn__IsNotDefault = true;<a name="line.128"></a>
 <span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    public String getFormat()<a name="line.130"></a>
+<span class="sourceLineNo">130</span>    public String getBcn()<a name="line.130"></a>
 <span class="sourceLineNo">131</span>    {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      return m_format;<a name="line.132"></a>
+<span class="sourceLineNo">132</span>      return m_bcn;<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    private String m_format;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public boolean getFormat__IsNotDefault()<a name="line.135"></a>
+<span class="sourceLineNo">134</span>    private String m_bcn;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    public boolean getBcn__IsNotDefault()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_format__IsNotDefault;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_bcn__IsNotDefault;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private boolean m_format__IsNotDefault;<a name="line.139"></a>
+<span class="sourceLineNo">139</span>    private boolean m_bcn__IsNotDefault;<a name="line.139"></a>
 <span class="sourceLineNo">140</span>  }<a name="line.140"></a>
 <span class="sourceLineNo">141</span>  @Override<a name="line.141"></a>
 <span class="sourceLineNo">142</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.142"></a>
@@ -156,10 +156,10 @@
 <span class="sourceLineNo">148</span>    return (ImplData) super.getImplData();<a name="line.148"></a>
 <span class="sourceLineNo">149</span>  }<a name="line.149"></a>
 <span class="sourceLineNo">150</span>  <a name="line.150"></a>
-<span class="sourceLineNo">151</span>  protected String bcn;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.152"></a>
+<span class="sourceLineNo">151</span>  protected String format;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.152"></a>
 <span class="sourceLineNo">153</span>  {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    (getImplData()).setBcn(p_bcn);<a name="line.154"></a>
+<span class="sourceLineNo">154</span>    (getImplData()).setFormat(p_format);<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    return this;<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>
@@ -177,10 +177,10 @@
 <span class="sourceLineNo">169</span>    return this;<a name="line.169"></a>
 <span class="sourceLineNo">170</span>  }<a name="line.170"></a>
 <span class="sourceLineNo">171</span>  <a name="line.171"></a>
-<span class="sourceLineNo">172</span>  protected String format;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.173"></a>
+<span class="sourceLineNo">172</span>  protected String bcn;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.173"></a>
 <span class="sourceLineNo">174</span>  {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    (getImplData()).setFormat(p_format);<a name="line.175"></a>
+<span class="sourceLineNo">175</span>    (getImplData()).setBcn(p_bcn);<a name="line.175"></a>
 <span class="sourceLineNo">176</span>    return this;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  }<a name="line.177"></a>
 <span class="sourceLineNo">178</span>  <a name="line.178"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
index 57f2f60..f6e621c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
@@ -33,10 +33,10 @@
 <span class="sourceLineNo">025</span>  requiredArguments = {<a name="line.25"></a>
 <span class="sourceLineNo">026</span>    @org.jamon.annotations.Argument(name = "regionServer", type = "HRegionServer")},<a name="line.26"></a>
 <span class="sourceLineNo">027</span>  optionalArguments = {<a name="line.27"></a>
-<span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "bcn", type = "String"),<a name="line.28"></a>
+<span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.28"></a>
 <span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.29"></a>
 <span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.30"></a>
-<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "format", type = "String")})<a name="line.31"></a>
+<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "bcn", type = "String")})<a name="line.31"></a>
 <span class="sourceLineNo">032</span>public class RSStatusTmpl<a name="line.32"></a>
 <span class="sourceLineNo">033</span>  extends org.jamon.AbstractTemplateProxy<a name="line.33"></a>
 <span class="sourceLineNo">034</span>{<a name="line.34"></a>
@@ -77,23 +77,23 @@
 <span class="sourceLineNo">069</span>      return m_regionServer;<a name="line.69"></a>
 <span class="sourceLineNo">070</span>    }<a name="line.70"></a>
 <span class="sourceLineNo">071</span>    private HRegionServer m_regionServer;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    // 23, 1<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    public void setBcn(String bcn)<a name="line.73"></a>
+<span class="sourceLineNo">072</span>    // 22, 1<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    public void setFormat(String format)<a name="line.73"></a>
 <span class="sourceLineNo">074</span>    {<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      // 23, 1<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      m_bcn = bcn;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      m_bcn__IsNotDefault = true;<a name="line.77"></a>
+<span class="sourceLineNo">075</span>      // 22, 1<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      m_format = format;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      m_format__IsNotDefault = true;<a name="line.77"></a>
 <span class="sourceLineNo">078</span>    }<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    public String getBcn()<a name="line.79"></a>
+<span class="sourceLineNo">079</span>    public String getFormat()<a name="line.79"></a>
 <span class="sourceLineNo">080</span>    {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      return m_bcn;<a name="line.81"></a>
+<span class="sourceLineNo">081</span>      return m_format;<a name="line.81"></a>
 <span class="sourceLineNo">082</span>    }<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    private String m_bcn;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    public boolean getBcn__IsNotDefault()<a name="line.84"></a>
+<span class="sourceLineNo">083</span>    private String m_format;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    public boolean getFormat__IsNotDefault()<a name="line.84"></a>
 <span class="sourceLineNo">085</span>    {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      return m_bcn__IsNotDefault;<a name="line.86"></a>
+<span class="sourceLineNo">086</span>      return m_format__IsNotDefault;<a name="line.86"></a>
 <span class="sourceLineNo">087</span>    }<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    private boolean m_bcn__IsNotDefault;<a name="line.88"></a>
+<span class="sourceLineNo">088</span>    private boolean m_format__IsNotDefault;<a name="line.88"></a>
 <span class="sourceLineNo">089</span>    // 21, 1<a name="line.89"></a>
 <span class="sourceLineNo">090</span>    public void setFilter(String filter)<a name="line.90"></a>
 <span class="sourceLineNo">091</span>    {<a name="line.91"></a>
@@ -128,23 +128,23 @@
 <span class="sourceLineNo">120</span>      return m_bcv__IsNotDefault;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
 <span class="sourceLineNo">122</span>    private boolean m_bcv__IsNotDefault;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // 22, 1<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    public void setFormat(String format)<a name="line.124"></a>
+<span class="sourceLineNo">123</span>    // 23, 1<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    public void setBcn(String bcn)<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      // 22, 1<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      m_format = format;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      m_format__IsNotDefault = true;<a name="line.128"></a>
+<span class="sourceLineNo">126</span>      // 23, 1<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      m_bcn = bcn;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      m_bcn__IsNotDefault = true;<a name="line.128"></a>
 <span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    public String getFormat()<a name="line.130"></a>
+<span class="sourceLineNo">130</span>    public String getBcn()<a name="line.130"></a>
 <span class="sourceLineNo">131</span>    {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      return m_format;<a name="line.132"></a>
+<span class="sourceLineNo">132</span>      return m_bcn;<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    private String m_format;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public boolean getFormat__IsNotDefault()<a name="line.135"></a>
+<span class="sourceLineNo">134</span>    private String m_bcn;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    public boolean getBcn__IsNotDefault()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_format__IsNotDefault;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_bcn__IsNotDefault;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private boolean m_format__IsNotDefault;<a name="line.139"></a>
+<span class="sourceLineNo">139</span>    private boolean m_bcn__IsNotDefault;<a name="line.139"></a>
 <span class="sourceLineNo">140</span>  }<a name="line.140"></a>
 <span class="sourceLineNo">141</span>  @Override<a name="line.141"></a>
 <span class="sourceLineNo">142</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.142"></a>
@@ -156,10 +156,10 @@
 <span class="sourceLineNo">148</span>    return (ImplData) super.getImplData();<a name="line.148"></a>
 <span class="sourceLineNo">149</span>  }<a name="line.149"></a>
 <span class="sourceLineNo">150</span>  <a name="line.150"></a>
-<span class="sourceLineNo">151</span>  protected String bcn;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.152"></a>
+<span class="sourceLineNo">151</span>  protected String format;<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.152"></a>
 <span class="sourceLineNo">153</span>  {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    (getImplData()).setBcn(p_bcn);<a name="line.154"></a>
+<span class="sourceLineNo">154</span>    (getImplData()).setFormat(p_format);<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    return this;<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>
@@ -177,10 +177,10 @@
 <span class="sourceLineNo">169</span>    return this;<a name="line.169"></a>
 <span class="sourceLineNo">170</span>  }<a name="line.170"></a>
 <span class="sourceLineNo">171</span>  <a name="line.171"></a>
-<span class="sourceLineNo">172</span>  protected String format;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.173"></a>
+<span class="sourceLineNo">172</span>  protected String bcn;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.173"></a>
 <span class="sourceLineNo">174</span>  {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    (getImplData()).setFormat(p_format);<a name="line.175"></a>
+<span class="sourceLineNo">175</span>    (getImplData()).setBcn(p_bcn);<a name="line.175"></a>
 <span class="sourceLineNo">176</span>    return this;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  }<a name="line.177"></a>
 <span class="sourceLineNo">178</span>  <a name="line.178"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
index 2861934..721d250 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
@@ -34,15 +34,15 @@
 <span class="sourceLineNo">026</span><a name="line.26"></a>
 <span class="sourceLineNo">027</span>{<a name="line.27"></a>
 <span class="sourceLineNo">028</span>  private final HRegionServer regionServer;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>  private final String bcn;<a name="line.29"></a>
+<span class="sourceLineNo">029</span>  private final String format;<a name="line.29"></a>
 <span class="sourceLineNo">030</span>  private final String filter;<a name="line.30"></a>
 <span class="sourceLineNo">031</span>  private final String bcv;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>  private final String format;<a name="line.32"></a>
+<span class="sourceLineNo">032</span>  private final String bcn;<a name="line.32"></a>
 <span class="sourceLineNo">033</span>  protected static org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl.ImplData p_implData)<a name="line.33"></a>
 <span class="sourceLineNo">034</span>  {<a name="line.34"></a>
-<span class="sourceLineNo">035</span>    if(! p_implData.getBcn__IsNotDefault())<a name="line.35"></a>
+<span class="sourceLineNo">035</span>    if(! p_implData.getFormat__IsNotDefault())<a name="line.35"></a>
 <span class="sourceLineNo">036</span>    {<a name="line.36"></a>
-<span class="sourceLineNo">037</span>      p_implData.setBcn("");<a name="line.37"></a>
+<span class="sourceLineNo">037</span>      p_implData.setFormat("html");<a name="line.37"></a>
 <span class="sourceLineNo">038</span>    }<a name="line.38"></a>
 <span class="sourceLineNo">039</span>    if(! p_implData.getFilter__IsNotDefault())<a name="line.39"></a>
 <span class="sourceLineNo">040</span>    {<a name="line.40"></a>
@@ -52,9 +52,9 @@
 <span class="sourceLineNo">044</span>    {<a name="line.44"></a>
 <span class="sourceLineNo">045</span>      p_implData.setBcv("");<a name="line.45"></a>
 <span class="sourceLineNo">046</span>    }<a name="line.46"></a>
-<span class="sourceLineNo">047</span>    if(! p_implData.getFormat__IsNotDefault())<a name="line.47"></a>
+<span class="sourceLineNo">047</span>    if(! p_implData.getBcn__IsNotDefault())<a name="line.47"></a>
 <span class="sourceLineNo">048</span>    {<a name="line.48"></a>
-<span class="sourceLineNo">049</span>      p_implData.setFormat("html");<a name="line.49"></a>
+<span class="sourceLineNo">049</span>      p_implData.setBcn("");<a name="line.49"></a>
 <span class="sourceLineNo">050</span>    }<a name="line.50"></a>
 <span class="sourceLineNo">051</span>    return p_implData;<a name="line.51"></a>
 <span class="sourceLineNo">052</span>  }<a name="line.52"></a>
@@ -62,10 +62,10 @@
 <span class="sourceLineNo">054</span>  {<a name="line.54"></a>
 <span class="sourceLineNo">055</span>    super(p_templateManager, __jamon_setOptionalArguments(p_implData));<a name="line.55"></a>
 <span class="sourceLineNo">056</span>    regionServer = p_implData.getRegionServer();<a name="line.56"></a>
-<span class="sourceLineNo">057</span>    bcn = p_implData.getBcn();<a name="line.57"></a>
+<span class="sourceLineNo">057</span>    format = p_implData.getFormat();<a name="line.57"></a>
 <span class="sourceLineNo">058</span>    filter = p_implData.getFilter();<a name="line.58"></a>
 <span class="sourceLineNo">059</span>    bcv = p_implData.getBcv();<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    format = p_implData.getFormat();<a name="line.60"></a>
+<span class="sourceLineNo">060</span>    bcn = p_implData.getBcn();<a name="line.60"></a>
 <span class="sourceLineNo">061</span>  }<a name="line.61"></a>
 <span class="sourceLineNo">062</span>  <a name="line.62"></a>
 <span class="sourceLineNo">063</span>  @Override public void renderNoFlush(final java.io.Writer jamonWriter)<a name="line.63"></a>
@@ -94,8 +94,8 @@
 <span class="sourceLineNo">086</span>      // 41, 3<a name="line.86"></a>
 <span class="sourceLineNo">087</span>      {<a name="line.87"></a>
 <span class="sourceLineNo">088</span>        org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl __jamon__var_7 = new org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl(this.getTemplateManager());<a name="line.88"></a>
-<span class="sourceLineNo">089</span>        __jamon__var_7.setFilter(filter);<a name="line.89"></a>
-<span class="sourceLineNo">090</span>        __jamon__var_7.setFormat("json" );<a name="line.90"></a>
+<span class="sourceLineNo">089</span>        __jamon__var_7.setFormat("json" );<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        __jamon__var_7.setFilter(filter);<a name="line.90"></a>
 <span class="sourceLineNo">091</span>        __jamon__var_7.renderNoFlush(jamonWriter);<a name="line.91"></a>
 <span class="sourceLineNo">092</span>      }<a name="line.92"></a>
 <span class="sourceLineNo">093</span>      // 41, 68<a name="line.93"></a>


[06/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html
index 22e0fbd..c2b04b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html
@@ -57,7 +57,7 @@
 <span class="sourceLineNo">049</span>  //   - INIT: Procedure submitted by the user (also known as 'root procedure')<a name="line.49"></a>
 <span class="sourceLineNo">050</span>  //   - INSERT: Children added to the procedure &lt;parentId&gt;:[&lt;childId&gt;, ...]<a name="line.50"></a>
 <span class="sourceLineNo">051</span>  //   - UPDATE: The specified procedure was updated<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  //   - DELETE: The procedure was removed (completed/rolledback and result TTL expired)<a name="line.52"></a>
+<span class="sourceLineNo">052</span>  //   - DELETE: The procedure was removed (finished/rolledback and result TTL expired)<a name="line.52"></a>
 <span class="sourceLineNo">053</span>  //<a name="line.53"></a>
 <span class="sourceLineNo">054</span>  // In the WAL we can find multiple times the same procedure as UPDATE or INSERT.<a name="line.54"></a>
 <span class="sourceLineNo">055</span>  // We read the WAL from top to bottom, so every time we find an entry of the<a name="line.55"></a>
@@ -334,505 +334,504 @@
 <span class="sourceLineNo">326</span>    public boolean hasParent() { return proto.hasParentId(); }<a name="line.326"></a>
 <span class="sourceLineNo">327</span>    public boolean isReady() { return ready; }<a name="line.327"></a>
 <span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span>    public boolean isCompleted() {<a name="line.329"></a>
+<span class="sourceLineNo">329</span>    public boolean isFinished() {<a name="line.329"></a>
 <span class="sourceLineNo">330</span>      if (!hasParent()) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        // we only consider 'root' procedures. because for the user 'completed'<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        // means when everything up to the 'root' is complete.<a name="line.332"></a>
+<span class="sourceLineNo">331</span>        // we only consider 'root' procedures. because for the user 'finished'<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        // means when everything up to the 'root' is finished.<a name="line.332"></a>
 <span class="sourceLineNo">333</span>        switch (proto.getState()) {<a name="line.333"></a>
 <span class="sourceLineNo">334</span>          case ROLLEDBACK:<a name="line.334"></a>
-<span class="sourceLineNo">335</span>            return true;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>          case FINISHED:<a name="line.336"></a>
-<span class="sourceLineNo">337</span>            return !proto.hasException();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>          default:<a name="line.338"></a>
-<span class="sourceLineNo">339</span>            break;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>        }<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      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>    public Procedure convert() throws IOException {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      if (procedure == null) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        procedure = ProcedureUtil.convertToProcedure(proto);<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      }<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      return procedure;<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>    public ProcedureInfo convertToInfo() {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      return ProcedureUtil.convertToProcedureInfo(proto);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>    @Override<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    public String toString() {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      final StringBuilder sb = new StringBuilder();<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      sb.append("Entry(");<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      sb.append(getProcId());<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      sb.append(", parentId=");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      sb.append(getParentId());<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      sb.append(", class=");<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      sb.append(proto.getClassName());<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      sb.append(")");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      return sb.toString();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  }<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>  private static class EntryIterator implements ProcedureIterator {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    private final Entry replayHead;<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    private Entry current;<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span>    public EntryIterator(Entry replayHead) {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      this.replayHead = replayHead;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      this.current = replayHead;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>    @Override<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    public void reset() {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      this.current = replayHead;<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>    @Override<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    public boolean hasNext() {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      return current != null;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>    @Override<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    public boolean isNextCompleted() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      return current != null &amp;&amp; current.isCompleted();<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    @Override<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    public void skipNext() {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      current = current.replayNext;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    }<a name="line.397"></a>
-<span class="sourceLineNo">398</span><a name="line.398"></a>
-<span class="sourceLineNo">399</span>    @Override<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    public Procedure nextAsProcedure() throws IOException {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      try {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        return current.convert();<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      } finally {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        current = current.replayNext;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      }<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    @Override<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    public ProcedureInfo nextAsProcedureInfo() {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      try {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        return current.convertToInfo();<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      } finally {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        current = current.replayNext;<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      }<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>  private static class WalProcedureMap {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    // procedure hash table<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    private Entry[] procedureMap;<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>    // replay-order double-linked-list<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    private Entry replayOrderHead;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    private Entry replayOrderTail;<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    // root linked-list<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    private Entry rootHead;<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // pending unlinked children (root not present yet)<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    private Entry childUnlinkedHead;<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>    // Track ProcId range<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    private long minProcId = Long.MAX_VALUE;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    private long maxProcId = Long.MIN_VALUE;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>    public WalProcedureMap(int size) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      procedureMap = new Entry[size];<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      replayOrderHead = null;<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      replayOrderTail = null;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      rootHead = null;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      childUnlinkedHead = null;<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span>    public void add(ProcedureProtos.Procedure procProto) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      trackProcIds(procProto.getProcId());<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      Entry entry = addToMap(procProto.getProcId(), procProto.hasParentId());<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      boolean isNew = entry.proto == null;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      entry.proto = procProto;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      addToReplayList(entry);<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>      if (isNew) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        if (procProto.hasParentId()) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>          childUnlinkedHead = addToLinkList(entry, childUnlinkedHead);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        } else {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>          rootHead = addToLinkList(entry, rootHead);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        }<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span>    public boolean remove(long procId) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      trackProcIds(procId);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      Entry entry = removeFromMap(procId);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      if (entry != null) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>        unlinkFromReplayList(entry);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>        unlinkFromLinkList(entry);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>        return true;<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      }<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      return false;<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>    private void trackProcIds(long procId) {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      minProcId = Math.min(minProcId, procId);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      maxProcId = Math.max(maxProcId, procId);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
-<span class="sourceLineNo">475</span><a name="line.475"></a>
-<span class="sourceLineNo">476</span>    public long getMinProcId() {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      return minProcId;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span>    public long getMaxProcId() {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      return maxProcId;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    }<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>    public boolean contains(long procId) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      return getProcedure(procId) != null;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    }<a name="line.486"></a>
-<span class="sourceLineNo">487</span><a name="line.487"></a>
-<span class="sourceLineNo">488</span>    public boolean isEmpty() {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      return replayOrderHead == null;<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>    public void clear() {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        procedureMap[i] = null;<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      }<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      replayOrderHead = null;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      replayOrderTail = null;<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      rootHead = null;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      childUnlinkedHead = null;<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      minProcId = Long.MAX_VALUE;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      maxProcId = Long.MIN_VALUE;<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    }<a name="line.502"></a>
-<span class="sourceLineNo">503</span><a name="line.503"></a>
-<span class="sourceLineNo">504</span>    /*<a name="line.504"></a>
-<span class="sourceLineNo">505</span>     * Merges two WalProcedureMap,<a name="line.505"></a>
-<span class="sourceLineNo">506</span>     * the target is the "global" map, the source is the "local" map.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>     *  - The entries in the hashtables are guaranteed to be unique.<a name="line.507"></a>
-<span class="sourceLineNo">508</span>     *    On replay we don't load procedures that already exist in the "global"<a name="line.508"></a>
-<span class="sourceLineNo">509</span>     *    map (the one we are merging the "local" in to).<a name="line.509"></a>
-<span class="sourceLineNo">510</span>     *  - The replayOrderList of the "local" nao will be appended to the "global"<a name="line.510"></a>
-<span class="sourceLineNo">511</span>     *    map replay list.<a name="line.511"></a>
-<span class="sourceLineNo">512</span>     *  - The "local" map will be cleared at the end of the operation.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>     */<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    public void mergeTail(WalProcedureMap other) {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      for (Entry p = other.replayOrderHead; p != null; p = p.replayNext) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        int slotIndex = getMapSlot(p.getProcId());<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        p.hashNext = procedureMap[slotIndex];<a name="line.517"></a>
-<span class="sourceLineNo">518</span>        procedureMap[slotIndex] = p;<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      }<a name="line.519"></a>
-<span class="sourceLineNo">520</span><a name="line.520"></a>
-<span class="sourceLineNo">521</span>      if (replayOrderHead == null) {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        replayOrderHead = other.replayOrderHead;<a name="line.522"></a>
-<span class="sourceLineNo">523</span>        replayOrderTail = other.replayOrderTail;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>        rootHead = other.rootHead;<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        childUnlinkedHead = other.childUnlinkedHead;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      } else {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        // append replay list<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        assert replayOrderTail.replayNext == null;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>        assert other.replayOrderHead.replayPrev == null;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>        replayOrderTail.replayNext = other.replayOrderHead;<a name="line.530"></a>
-<span class="sourceLineNo">531</span>        other.replayOrderHead.replayPrev = replayOrderTail;<a name="line.531"></a>
-<span class="sourceLineNo">532</span>        replayOrderTail = other.replayOrderTail;<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>        // merge rootHead<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        if (rootHead == null) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          rootHead = other.rootHead;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        } else if (other.rootHead != null) {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          Entry otherTail = findLinkListTail(other.rootHead);<a name="line.538"></a>
-<span class="sourceLineNo">539</span>          otherTail.linkNext = rootHead;<a name="line.539"></a>
-<span class="sourceLineNo">540</span>          rootHead.linkPrev = otherTail;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>          rootHead = other.rootHead;<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>        // merge childUnlinkedHead<a name="line.544"></a>
-<span class="sourceLineNo">545</span>        if (childUnlinkedHead == null) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>          childUnlinkedHead = other.childUnlinkedHead;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>        } else if (other.childUnlinkedHead != null) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>          Entry otherTail = findLinkListTail(other.childUnlinkedHead);<a name="line.548"></a>
-<span class="sourceLineNo">549</span>          otherTail.linkNext = childUnlinkedHead;<a name="line.549"></a>
-<span class="sourceLineNo">550</span>          childUnlinkedHead.linkPrev = otherTail;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>          childUnlinkedHead = other.childUnlinkedHead;<a name="line.551"></a>
-<span class="sourceLineNo">552</span>        }<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      }<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      maxProcId = Math.max(maxProcId, other.maxProcId);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      minProcId = Math.max(minProcId, other.minProcId);<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>      other.clear();<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    /*<a name="line.560"></a>
-<span class="sourceLineNo">561</span>     * Returns an EntryIterator with the list of procedures ready<a name="line.561"></a>
-<span class="sourceLineNo">562</span>     * to be added to the executor.<a name="line.562"></a>
-<span class="sourceLineNo">563</span>     * A Procedure is ready if its children and parent are ready.<a name="line.563"></a>
-<span class="sourceLineNo">564</span>     */<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    public EntryIterator fetchReady() {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      buildGraph();<a name="line.566"></a>
-<span class="sourceLineNo">567</span><a name="line.567"></a>
-<span class="sourceLineNo">568</span>      Entry readyHead = null;<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      Entry readyTail = null;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      Entry p = replayOrderHead;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      while (p != null) {<a name="line.571"></a>
-<span class="sourceLineNo">572</span>        Entry next = p.replayNext;<a name="line.572"></a>
-<span class="sourceLineNo">573</span>        if (p.isReady()) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          unlinkFromReplayList(p);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>          if (readyTail != null) {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>            readyTail.replayNext = p;<a name="line.576"></a>
-<span class="sourceLineNo">577</span>            p.replayPrev = readyTail;<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          } else {<a name="line.578"></a>
-<span class="sourceLineNo">579</span>            p.replayPrev = null;<a name="line.579"></a>
-<span class="sourceLineNo">580</span>            readyHead = p;<a name="line.580"></a>
-<span class="sourceLineNo">581</span>          }<a name="line.581"></a>
-<span class="sourceLineNo">582</span>          readyTail = p;<a name="line.582"></a>
-<span class="sourceLineNo">583</span>          p.replayNext = null;<a name="line.583"></a>
-<span class="sourceLineNo">584</span>        }<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        p = next;<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      }<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      // we need the hash-table lookups for parents, so this must be done<a name="line.587"></a>
-<span class="sourceLineNo">588</span>      // out of the loop where we check isReadyToRun()<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      for (p = readyHead; p != null; p = p.replayNext) {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>        removeFromMap(p.getProcId());<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        unlinkFromLinkList(p);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      }<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      return readyHead != null ? new EntryIterator(readyHead) : null;<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    }<a name="line.594"></a>
-<span class="sourceLineNo">595</span><a name="line.595"></a>
-<span class="sourceLineNo">596</span>    /*<a name="line.596"></a>
-<span class="sourceLineNo">597</span>     * Drain this map and return all procedures in it.<a name="line.597"></a>
-<span class="sourceLineNo">598</span>     */<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    public EntryIterator fetchAll() {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      Entry head = replayOrderHead;<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      for (Entry p = head; p != null; p = p.replayNext) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>        removeFromMap(p.getProcId());<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      }<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>        assert procedureMap[i] == null : "map not empty i=" + i;<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      }<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      replayOrderHead = null;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>      replayOrderTail = null;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      childUnlinkedHead = null;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      rootHead = null;<a name="line.610"></a>
-<span class="sourceLineNo">611</span>      return head != null ? new EntryIterator(head) : null;<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>    private void buildGraph() {<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      Entry p = childUnlinkedHead;<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      while (p != null) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        Entry next = p.linkNext;<a name="line.617"></a>
-<span class="sourceLineNo">618</span>        Entry rootProc = getRootProcedure(p);<a name="line.618"></a>
-<span class="sourceLineNo">619</span>        if (rootProc != null) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          rootProc.childHead = addToLinkList(p, rootProc.childHead);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>        }<a name="line.621"></a>
-<span class="sourceLineNo">622</span>        p = next;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>      for (p = rootHead; p != null; p = p.linkNext) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        checkReadyToRun(p);<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><a name="line.629"></a>
-<span class="sourceLineNo">630</span>    private Entry getRootProcedure(Entry entry) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      while (entry != null &amp;&amp; entry.hasParent()) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>        entry = getProcedure(entry.getParentId());<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      return entry;<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>    /*<a name="line.637"></a>
-<span class="sourceLineNo">638</span>     * (see the comprehensive explaination in the beginning of the file)<a name="line.638"></a>
-<span class="sourceLineNo">639</span>     * A Procedure is ready when parent and children are ready.<a name="line.639"></a>
-<span class="sourceLineNo">640</span>     * "ready" means that we all the information that we need in-memory.<a name="line.640"></a>
-<span class="sourceLineNo">641</span>     *<a name="line.641"></a>
-<span class="sourceLineNo">642</span>     * Example-1:<a name="line.642"></a>
-<span class="sourceLineNo">643</span>     * We have two WALs, we start reading fronm the newest (wal-2)<a name="line.643"></a>
-<span class="sourceLineNo">644</span>     *    wal-2 | C B |<a name="line.644"></a>
-<span class="sourceLineNo">645</span>     *    wal-1 | A B C |<a name="line.645"></a>
-<span class="sourceLineNo">646</span>     *<a name="line.646"></a>
-<span class="sourceLineNo">647</span>     * If C and B don't depend on A (A is not the parent), we can start them<a name="line.647"></a>
-<span class="sourceLineNo">648</span>     * before reading wal-1. If B is the only one with parent A we can start C<a name="line.648"></a>
-<span class="sourceLineNo">649</span>     * and read one more WAL before being able to start B.<a name="line.649"></a>
-<span class="sourceLineNo">650</span>     *<a name="line.650"></a>
-<span class="sourceLineNo">651</span>     * How do we know with the only information in B that we are not ready.<a name="line.651"></a>
-<span class="sourceLineNo">652</span>     *  - easy case, the parent is missing from the global map<a name="line.652"></a>
-<span class="sourceLineNo">653</span>     *  - more complex case we look at the Stack IDs<a name="line.653"></a>
-<span class="sourceLineNo">654</span>     *<a name="line.654"></a>
-<span class="sourceLineNo">655</span>     * The Stack-IDs are added to the procedure order as incremental index<a name="line.655"></a>
-<span class="sourceLineNo">656</span>     * tracking how many times that procedure was executed, which is equivalent<a name="line.656"></a>
-<span class="sourceLineNo">657</span>     * at the number of times we wrote the procedure to the WAL.<a name="line.657"></a>
-<span class="sourceLineNo">658</span>     * In the example above:<a name="line.658"></a>
-<span class="sourceLineNo">659</span>     *   wal-2: B has stackId = [1, 2]<a name="line.659"></a>
-<span class="sourceLineNo">660</span>     *   wal-1: B has stackId = [1]<a name="line.660"></a>
-<span class="sourceLineNo">661</span>     *   wal-1: A has stackId = [0]<a name="line.661"></a>
-<span class="sourceLineNo">662</span>     *<a name="line.662"></a>
-<span class="sourceLineNo">663</span>     * Since we know that the Stack-IDs are incremental for a Procedure,<a name="line.663"></a>
-<span class="sourceLineNo">664</span>     * we notice that there is a gap in the stackIds of B, so something was<a name="line.664"></a>
-<span class="sourceLineNo">665</span>     * executed before.<a name="line.665"></a>
-<span class="sourceLineNo">666</span>     * To identify when a Procedure is ready we do the sum of the stackIds of<a name="line.666"></a>
-<span class="sourceLineNo">667</span>     * the procedure and the parent. if the stackIdSum is equals to the<a name="line.667"></a>
-<span class="sourceLineNo">668</span>     * sum of {1..maxStackId} then everything we need is avaiable.<a name="line.668"></a>
-<span class="sourceLineNo">669</span>     *<a name="line.669"></a>
-<span class="sourceLineNo">670</span>     * Example-2<a name="line.670"></a>
-<span class="sourceLineNo">671</span>     *    wal-2 | A |              A stackIds = [0, 2]<a name="line.671"></a>
-<span class="sourceLineNo">672</span>     *    wal-1 | A B |            B stackIds = [1]<a name="line.672"></a>
-<span class="sourceLineNo">673</span>     *<a name="line.673"></a>
-<span class="sourceLineNo">674</span>     * There is a gap between A stackIds so something was executed in between.<a name="line.674"></a>
-<span class="sourceLineNo">675</span>     */<a name="line.675"></a>
-<span class="sourceLineNo">676</span>    private boolean checkReadyToRun(Entry rootEntry) {<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      assert !rootEntry.hasParent() : "expected root procedure, got " + rootEntry;<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span>      if (rootEntry.isCompleted()) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>        // if the root procedure is completed, sub-procedures should be gone<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        if (rootEntry.childHead != null) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>          LOG.error("unexpected active children for root-procedure: " + rootEntry);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>            LOG.error("unexpected active children: " + p);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>          }<a name="line.685"></a>
-<span class="sourceLineNo">686</span>        }<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>        assert rootEntry.childHead == null : "unexpected children on root completion. " + rootEntry;<a name="line.688"></a>
-<span class="sourceLineNo">689</span>        rootEntry.ready = true;<a name="line.689"></a>
-<span class="sourceLineNo">690</span>        return true;<a name="line.690"></a>
-<span class="sourceLineNo">691</span>      }<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span>      int stackIdSum = 0;<a name="line.693"></a>
-<span class="sourceLineNo">694</span>      int maxStackId = 0;<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      for (int i = 0; i &lt; rootEntry.proto.getStackIdCount(); ++i) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>        int stackId = 1 + rootEntry.proto.getStackId(i);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>        maxStackId  = Math.max(maxStackId, stackId);<a name="line.697"></a>
-<span class="sourceLineNo">698</span>        stackIdSum += stackId;<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>      for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span>        for (int i = 0; i &lt; p.proto.getStackIdCount(); ++i) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span>          int stackId = 1 + p.proto.getStackId(i);<a name="line.703"></a>
-<span class="sourceLineNo">704</span>          maxStackId  = Math.max(maxStackId, stackId);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>          stackIdSum += stackId;<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        }<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      }<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      final int cmpStackIdSum = (maxStackId * (maxStackId + 1) / 2);<a name="line.708"></a>
-<span class="sourceLineNo">709</span>      if (cmpStackIdSum == stackIdSum) {<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        rootEntry.ready = true;<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>          p.ready = true;<a name="line.712"></a>
-<span class="sourceLineNo">713</span>        }<a name="line.713"></a>
-<span class="sourceLineNo">714</span>        return true;<a name="line.714"></a>
-<span class="sourceLineNo">715</span>      }<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      return false;<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    }<a name="line.717"></a>
-<span class="sourceLineNo">718</span><a name="line.718"></a>
-<span class="sourceLineNo">719</span>    private void unlinkFromReplayList(Entry entry) {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      if (replayOrderHead == entry) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>        replayOrderHead = entry.replayNext;<a name="line.721"></a>
-<span class="sourceLineNo">722</span>      }<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      if (replayOrderTail == entry) {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>        replayOrderTail = entry.replayPrev;<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      }<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      if (entry.replayPrev != null) {<a name="line.726"></a>
-<span class="sourceLineNo">727</span>        entry.replayPrev.replayNext = entry.replayNext;<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      }<a name="line.728"></a>
-<span class="sourceLineNo">729</span>      if (entry.replayNext != null) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        entry.replayNext.replayPrev = entry.replayPrev;<a name="line.730"></a>
-<span class="sourceLineNo">731</span>      }<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    }<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>    private void addToReplayList(final Entry entry) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>      unlinkFromReplayList(entry);<a name="line.735"></a>
-<span class="sourceLineNo">736</span>      entry.replayNext = replayOrderHead;<a name="line.736"></a>
-<span class="sourceLineNo">737</span>      entry.replayPrev = null;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>      if (replayOrderHead != null) {<a name="line.738"></a>
-<span class="sourceLineNo">739</span>        replayOrderHead.replayPrev = entry;<a name="line.739"></a>
-<span class="sourceLineNo">740</span>      } else {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>        replayOrderTail = entry;<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      }<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      replayOrderHead = entry;<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>    private void unlinkFromLinkList(Entry entry) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>      if (entry == rootHead) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>        rootHead = entry.linkNext;<a name="line.748"></a>
-<span class="sourceLineNo">749</span>      } else if (entry == childUnlinkedHead) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>        childUnlinkedHead = entry.linkNext;<a name="line.750"></a>
-<span class="sourceLineNo">751</span>      }<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      if (entry.linkPrev != null) {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        entry.linkPrev.linkNext = entry.linkNext;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>      if (entry.linkNext != null) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span>        entry.linkNext.linkPrev = entry.linkPrev;<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><a name="line.759"></a>
-<span class="sourceLineNo">760</span>    private Entry addToLinkList(Entry entry, Entry linkHead) {<a name="line.760"></a>
-<span class="sourceLineNo">761</span>      unlinkFromLinkList(entry);<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      entry.linkNext = linkHead;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      entry.linkPrev = null;<a name="line.763"></a>
-<span class="sourceLineNo">764</span>      if (linkHead != null) {<a name="line.764"></a>
-<span class="sourceLineNo">765</span>        linkHead.linkPrev = entry;<a name="line.765"></a>
-<span class="sourceLineNo">766</span>      }<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      return entry;<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    }<a name="line.768"></a>
-<span class="sourceLineNo">769</span><a name="line.769"></a>
-<span class="sourceLineNo">770</span>    private Entry findLinkListTail(Entry linkHead) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>      Entry tail = linkHead;<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      while (tail.linkNext != null) {<a name="line.772"></a>
-<span class="sourceLineNo">773</span>        tail = tail.linkNext;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>      }<a name="line.774"></a>
-<span class="sourceLineNo">775</span>      return tail;<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    }<a name="line.776"></a>
-<span class="sourceLineNo">777</span><a name="line.777"></a>
-<span class="sourceLineNo">778</span>    private Entry addToMap(final long procId, final boolean hasParent) {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      int slotIndex = getMapSlot(procId);<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      Entry entry = getProcedure(slotIndex, procId);<a name="line.780"></a>
-<span class="sourceLineNo">781</span>      if (entry != null) return entry;<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>      entry = new Entry(procedureMap[slotIndex]);<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      procedureMap[slotIndex] = entry;<a name="line.784"></a>
-<span class="sourceLineNo">785</span>      return entry;<a name="line.785"></a>
-<span class="sourceLineNo">786</span>    }<a name="line.786"></a>
-<span class="sourceLineNo">787</span><a name="line.787"></a>
-<span class="sourceLineNo">788</span>    private Entry removeFromMap(final long procId) {<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      int slotIndex = getMapSlot(procId);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      Entry prev = null;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>      Entry entry = procedureMap[slotIndex];<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      while (entry != null) {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>        if (procId == entry.getProcId()) {<a name="line.793"></a>
-<span class="sourceLineNo">794</span>          if (prev != null) {<a name="line.794"></a>
-<span class="sourceLineNo">795</span>            prev.hashNext = entry.hashNext;<a name="line.795"></a>
-<span class="sourceLineNo">796</span>          } else {<a name="line.796"></a>
-<span class="sourceLineNo">797</span>            procedureMap[slotIndex] = entry.hashNext;<a name="line.797"></a>
-<span class="sourceLineNo">798</span>          }<a name="line.798"></a>
-<span class="sourceLineNo">799</span>          entry.hashNext = null;<a name="line.799"></a>
-<span class="sourceLineNo">800</span>          return entry;<a name="line.800"></a>
-<span class="sourceLineNo">801</span>        }<a name="line.801"></a>
-<span class="sourceLineNo">802</span>        prev = entry;<a name="line.802"></a>
-<span class="sourceLineNo">803</span>        entry = entry.hashNext;<a name="line.803"></a>
-<span class="sourceLineNo">804</span>      }<a name="line.804"></a>
-<span class="sourceLineNo">805</span>      return null;<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    }<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span>    private Entry getProcedure(final long procId) {<a name="line.808"></a>
-<span class="sourceLineNo">809</span>      return getProcedure(getMapSlot(procId), procId);<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    }<a name="line.810"></a>
-<span class="sourceLineNo">811</span><a name="line.811"></a>
-<span class="sourceLineNo">812</span>    private Entry getProcedure(final int slotIndex, final long procId) {<a name="line.812"></a>
-<span class="sourceLineNo">813</span>      Entry entry = procedureMap[slotIndex];<a name="line.813"></a>
-<span class="sourceLineNo">814</span>      while (entry != null) {<a name="line.814"></a>
-<span class="sourceLineNo">815</span>        if (procId == entry.getProcId()) {<a name="line.815"></a>
-<span class="sourceLineNo">816</span>          return entry;<a name="line.816"></a>
-<span class="sourceLineNo">817</span>        }<a name="line.817"></a>
-<span class="sourceLineNo">818</span>        entry = entry.hashNext;<a name="line.818"></a>
-<span class="sourceLineNo">819</span>      }<a name="line.819"></a>
-<span class="sourceLineNo">820</span>      return null;<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>    private int getMapSlot(final long procId) {<a name="line.823"></a>
-<span class="sourceLineNo">824</span>      return (int)(Procedure.getProcIdHashCode(procId) % procedureMap.length);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    }<a name="line.825"></a>
-<span class="sourceLineNo">826</span>  }<a name="line.826"></a>
-<span class="sourceLineNo">827</span>}<a name="line.827"></a>
+<span class="sourceLineNo">335</span>          case SUCCESS:<a name="line.335"></a>
+<span class="sourceLineNo">336</span>            return true;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>          default:<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            break;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        }<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      }<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      return false;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    }<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>    public Procedure convert() throws IOException {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      if (procedure == null) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        procedure = ProcedureUtil.convertToProcedure(proto);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      }<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      return procedure;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span>    public ProcedureInfo convertToInfo() {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      return ProcedureUtil.convertToProcedureInfo(proto);<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>    @Override<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    public String toString() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      final StringBuilder sb = new StringBuilder();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      sb.append("Entry(");<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      sb.append(getProcId());<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      sb.append(", parentId=");<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      sb.append(getParentId());<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      sb.append(", class=");<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      sb.append(proto.getClassName());<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      sb.append(")");<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      return sb.toString();<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span>  }<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span>  private static class EntryIterator implements ProcedureIterator {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    private final Entry replayHead;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    private Entry current;<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>    public EntryIterator(Entry replayHead) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      this.replayHead = replayHead;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      this.current = replayHead;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>    @Override<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    public void reset() {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      this.current = replayHead;<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>    @Override<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    public boolean hasNext() {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      return current != null;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    }<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span>    @Override<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    public boolean isNextFinished() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      return current != null &amp;&amp; current.isFinished();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span>    @Override<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    public void skipNext() {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>      current = current.replayNext;<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    }<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span>    @Override<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    public Procedure nextAsProcedure() throws IOException {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        return current.convert();<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      } finally {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        current = current.replayNext;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      }<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    }<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span>    @Override<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    public ProcedureInfo nextAsProcedureInfo() {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      try {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        return current.convertToInfo();<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      } finally {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        current = current.replayNext;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      }<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  }<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span>  private static class WalProcedureMap {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    // procedure hash table<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    private Entry[] procedureMap;<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span>    // replay-order double-linked-list<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    private Entry replayOrderHead;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    private Entry replayOrderTail;<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>    // root linked-list<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    private Entry rootHead;<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span>    // pending unlinked children (root not present yet)<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    private Entry childUnlinkedHead;<a name="line.429"></a>
+<span class="sourceLineNo">430</span><a name="line.430"></a>
+<span class="sourceLineNo">431</span>    // Track ProcId range<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    private long minProcId = Long.MAX_VALUE;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    private long maxProcId = Long.MIN_VALUE;<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>    public WalProcedureMap(int size) {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      procedureMap = new Entry[size];<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      replayOrderHead = null;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      replayOrderTail = null;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      rootHead = null;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      childUnlinkedHead = null;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    }<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>    public void add(ProcedureProtos.Procedure procProto) {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      trackProcIds(procProto.getProcId());<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      Entry entry = addToMap(procProto.getProcId(), procProto.hasParentId());<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      boolean isNew = entry.proto == null;<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      entry.proto = procProto;<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      addToReplayList(entry);<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>      if (isNew) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        if (procProto.hasParentId()) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          childUnlinkedHead = addToLinkList(entry, childUnlinkedHead);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        } else {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>          rootHead = addToLinkList(entry, rootHead);<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>    }<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>    public boolean remove(long procId) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      trackProcIds(procId);<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      Entry entry = removeFromMap(procId);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      if (entry != null) {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        unlinkFromReplayList(entry);<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        unlinkFromLinkList(entry);<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        return true;<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      }<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      return false;<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>    private void trackProcIds(long procId) {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      minProcId = Math.min(minProcId, procId);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      maxProcId = Math.max(maxProcId, procId);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    }<a name="line.473"></a>
+<span class="sourceLineNo">474</span><a name="line.474"></a>
+<span class="sourceLineNo">475</span>    public long getMinProcId() {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      return minProcId;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    public long getMaxProcId() {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      return maxProcId;<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>    public boolean contains(long procId) {<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      return getProcedure(procId) != null;<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    }<a name="line.485"></a>
+<span class="sourceLineNo">486</span><a name="line.486"></a>
+<span class="sourceLineNo">487</span>    public boolean isEmpty() {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      return replayOrderHead == null;<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>    public void clear() {<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.492"></a>
+<span class="sourceLineNo">493</span>        procedureMap[i] = null;<a name="line.493"></a>
+<span class="sourceLineNo">494</span>      }<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      replayOrderHead = null;<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      replayOrderTail = null;<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      rootHead = null;<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      childUnlinkedHead = null;<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      minProcId = Long.MAX_VALUE;<a name="line.499"></a>
+<span class="sourceLineNo">500</span>      maxProcId = Long.MIN_VALUE;<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>    /*<a name="line.503"></a>
+<span class="sourceLineNo">504</span>     * Merges two WalProcedureMap,<a name="line.504"></a>
+<span class="sourceLineNo">505</span>     * the target is the "global" map, the source is the "local" map.<a name="line.505"></a>
+<span class="sourceLineNo">506</span>     *  - The entries in the hashtables are guaranteed to be unique.<a name="line.506"></a>
+<span class="sourceLineNo">507</span>     *    On replay we don't load procedures that already exist in the "global"<a name="line.507"></a>
+<span class="sourceLineNo">508</span>     *    map (the one we are merging the "local" in to).<a name="line.508"></a>
+<span class="sourceLineNo">509</span>     *  - The replayOrderList of the "local" nao will be appended to the "global"<a name="line.509"></a>
+<span class="sourceLineNo">510</span>     *    map replay list.<a name="line.510"></a>
+<span class="sourceLineNo">511</span>     *  - The "local" map will be cleared at the end of the operation.<a name="line.511"></a>
+<span class="sourceLineNo">512</span>     */<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    public void mergeTail(WalProcedureMap other) {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      for (Entry p = other.replayOrderHead; p != null; p = p.replayNext) {<a name="line.514"></a>
+<span class="sourceLineNo">515</span>        int slotIndex = getMapSlot(p.getProcId());<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        p.hashNext = procedureMap[slotIndex];<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        procedureMap[slotIndex] = p;<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span><a name="line.519"></a>
+<span class="sourceLineNo">520</span>      if (replayOrderHead == null) {<a name="line.520"></a>
+<span class="sourceLineNo">521</span>        replayOrderHead = other.replayOrderHead;<a name="line.521"></a>
+<span class="sourceLineNo">522</span>        replayOrderTail = other.replayOrderTail;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>        rootHead = other.rootHead;<a name="line.523"></a>
+<span class="sourceLineNo">524</span>        childUnlinkedHead = other.childUnlinkedHead;<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      } else {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>        // append replay list<a name="line.526"></a>
+<span class="sourceLineNo">527</span>        assert replayOrderTail.replayNext == null;<a name="line.527"></a>
+<span class="sourceLineNo">528</span>        assert other.replayOrderHead.replayPrev == null;<a name="line.528"></a>
+<span class="sourceLineNo">529</span>        replayOrderTail.replayNext = other.replayOrderHead;<a name="line.529"></a>
+<span class="sourceLineNo">530</span>        other.replayOrderHead.replayPrev = replayOrderTail;<a name="line.530"></a>
+<span class="sourceLineNo">531</span>        replayOrderTail = other.replayOrderTail;<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>        // merge rootHead<a name="line.533"></a>
+<span class="sourceLineNo">534</span>        if (rootHead == null) {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>          rootHead = other.rootHead;<a name="line.535"></a>
+<span class="sourceLineNo">536</span>        } else if (other.rootHead != null) {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>          Entry otherTail = findLinkListTail(other.rootHead);<a name="line.537"></a>
+<span class="sourceLineNo">538</span>          otherTail.linkNext = rootHead;<a name="line.538"></a>
+<span class="sourceLineNo">539</span>          rootHead.linkPrev = otherTail;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>          rootHead = other.rootHead;<a name="line.540"></a>
+<span class="sourceLineNo">541</span>        }<a name="line.541"></a>
+<span class="sourceLineNo">542</span><a name="line.542"></a>
+<span class="sourceLineNo">543</span>        // merge childUnlinkedHead<a name="line.543"></a>
+<span class="sourceLineNo">544</span>        if (childUnlinkedHead == null) {<a name="line.544"></a>
+<span class="sourceLineNo">545</span>          childUnlinkedHead = other.childUnlinkedHead;<a name="line.545"></a>
+<span class="sourceLineNo">546</span>        } else if (other.childUnlinkedHead != null) {<a name="line.546"></a>
+<span class="sourceLineNo">547</span>          Entry otherTail = findLinkListTail(other.childUnlinkedHead);<a name="line.547"></a>
+<span class="sourceLineNo">548</span>          otherTail.linkNext = childUnlinkedHead;<a name="line.548"></a>
+<span class="sourceLineNo">549</span>          childUnlinkedHead.linkPrev = otherTail;<a name="line.549"></a>
+<span class="sourceLineNo">550</span>          childUnlinkedHead = other.childUnlinkedHead;<a name="line.550"></a>
+<span class="sourceLineNo">551</span>        }<a name="line.551"></a>
+<span class="sourceLineNo">552</span>      }<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      maxProcId = Math.max(maxProcId, other.maxProcId);<a name="line.553"></a>
+<span class="sourceLineNo">554</span>      minProcId = Math.max(minProcId, other.minProcId);<a name="line.554"></a>
+<span class="sourceLineNo">555</span><a name="line.555"></a>
+<span class="sourceLineNo">556</span>      other.clear();<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    }<a name="line.557"></a>
+<span class="sourceLineNo">558</span><a name="line.558"></a>
+<span class="sourceLineNo">559</span>    /*<a name="line.559"></a>
+<span class="sourceLineNo">560</span>     * Returns an EntryIterator with the list of procedures ready<a name="line.560"></a>
+<span class="sourceLineNo">561</span>     * to be added to the executor.<a name="line.561"></a>
+<span class="sourceLineNo">562</span>     * A Procedure is ready if its children and parent are ready.<a name="line.562"></a>
+<span class="sourceLineNo">563</span>     */<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    public EntryIterator fetchReady() {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      buildGraph();<a name="line.565"></a>
+<span class="sourceLineNo">566</span><a name="line.566"></a>
+<span class="sourceLineNo">567</span>      Entry readyHead = null;<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      Entry readyTail = null;<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      Entry p = replayOrderHead;<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      while (p != null) {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>        Entry next = p.replayNext;<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        if (p.isReady()) {<a name="line.572"></a>
+<span class="sourceLineNo">573</span>          unlinkFromReplayList(p);<a name="line.573"></a>
+<span class="sourceLineNo">574</span>          if (readyTail != null) {<a name="line.574"></a>
+<span class="sourceLineNo">575</span>            readyTail.replayNext = p;<a name="line.575"></a>
+<span class="sourceLineNo">576</span>            p.replayPrev = readyTail;<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          } else {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>            p.replayPrev = null;<a name="line.578"></a>
+<span class="sourceLineNo">579</span>            readyHead = p;<a name="line.579"></a>
+<span class="sourceLineNo">580</span>          }<a name="line.580"></a>
+<span class="sourceLineNo">581</span>          readyTail = p;<a name="line.581"></a>
+<span class="sourceLineNo">582</span>          p.replayNext = null;<a name="line.582"></a>
+<span class="sourceLineNo">583</span>        }<a name="line.583"></a>
+<span class="sourceLineNo">584</span>        p = next;<a name="line.584"></a>
+<span class="sourceLineNo">585</span>      }<a name="line.585"></a>
+<span class="sourceLineNo">586</span>      // we need the hash-table lookups for parents, so this must be done<a name="line.586"></a>
+<span class="sourceLineNo">587</span>      // out of the loop where we check isReadyToRun()<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      for (p = readyHead; p != null; p = p.replayNext) {<a name="line.588"></a>
+<span class="sourceLineNo">589</span>        removeFromMap(p.getProcId());<a name="line.589"></a>
+<span class="sourceLineNo">590</span>        unlinkFromLinkList(p);<a name="line.590"></a>
+<span class="sourceLineNo">591</span>      }<a name="line.591"></a>
+<span class="sourceLineNo">592</span>      return readyHead != null ? new EntryIterator(readyHead) : null;<a name="line.592"></a>
+<span class="sourceLineNo">593</span>    }<a name="line.593"></a>
+<span class="sourceLineNo">594</span><a name="line.594"></a>
+<span class="sourceLineNo">595</span>    /*<a name="line.595"></a>
+<span class="sourceLineNo">596</span>     * Drain this map and return all procedures in it.<a name="line.596"></a>
+<span class="sourceLineNo">597</span>     */<a name="line.597"></a>
+<span class="sourceLineNo">598</span>    public EntryIterator fetchAll() {<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      Entry head = replayOrderHead;<a name="line.599"></a>
+<span class="sourceLineNo">600</span>      for (Entry p = head; p != null; p = p.replayNext) {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>        removeFromMap(p.getProcId());<a name="line.601"></a>
+<span class="sourceLineNo">602</span>      }<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>        assert procedureMap[i] == null : "map not empty i=" + i;<a name="line.604"></a>
+<span class="sourceLineNo">605</span>      }<a name="line.605"></a>
+<span class="sourceLineNo">606</span>      replayOrderHead = null;<a name="line.606"></a>
+<span class="sourceLineNo">607</span>      replayOrderTail = null;<a name="line.607"></a>
+<span class="sourceLineNo">608</span>      childUnlinkedHead = null;<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      rootHead = null;<a name="line.609"></a>
+<span class="sourceLineNo">610</span>      return head != null ? new EntryIterator(head) : null;<a name="line.610"></a>
+<span class="sourceLineNo">611</span>    }<a name="line.611"></a>
+<span class="sourceLineNo">612</span><a name="line.612"></a>
+<span class="sourceLineNo">613</span>    private void buildGraph() {<a name="line.613"></a>
+<span class="sourceLineNo">614</span>      Entry p = childUnlinkedHead;<a name="line.614"></a>
+<span class="sourceLineNo">615</span>      while (p != null) {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>        Entry next = p.linkNext;<a name="line.616"></a>
+<span class="sourceLineNo">617</span>        Entry rootProc = getRootProcedure(p);<a name="line.617"></a>
+<span class="sourceLineNo">618</span>        if (rootProc != null) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>          rootProc.childHead = addToLinkList(p, rootProc.childHead);<a name="line.619"></a>
+<span class="sourceLineNo">620</span>        }<a name="line.620"></a>
+<span class="sourceLineNo">621</span>        p = next;<a name="line.621"></a>
+<span class="sourceLineNo">622</span>      }<a name="line.622"></a>
+<span class="sourceLineNo">623</span><a name="line.623"></a>
+<span class="sourceLineNo">624</span>      for (p = rootHead; p != null; p = p.linkNext) {<a name="line.624"></a>
+<span class="sourceLineNo">625</span>        checkReadyToRun(p);<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>    private Entry getRootProcedure(Entry entry) {<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      while (entry != null &amp;&amp; entry.hasParent()) {<a name="line.630"></a>
+<span class="sourceLineNo">631</span>        entry = getProcedure(entry.getParentId());<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      }<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      return entry;<a name="line.633"></a>
+<span class="sourceLineNo">634</span>    }<a name="line.634"></a>
+<span class="sourceLineNo">635</span><a name="line.635"></a>
+<span class="sourceLineNo">636</span>    /*<a name="line.636"></a>
+<span class="sourceLineNo">637</span>     * (see the comprehensive explaination in the beginning of the file)<a name="line.637"></a>
+<span class="sourceLineNo">638</span>     * A Procedure is ready when parent and children are ready.<a name="line.638"></a>
+<span class="sourceLineNo">639</span>     * "ready" means that we all the information that we need in-memory.<a name="line.639"></a>
+<span class="sourceLineNo">640</span>     *<a name="line.640"></a>
+<span class="sourceLineNo">641</span>     * Example-1:<a name="line.641"></a>
+<span class="sourceLineNo">642</span>     * We have two WALs, we start reading fronm the newest (wal-2)<a name="line.642"></a>
+<span class="sourceLineNo">643</span>     *    wal-2 | C B |<a name="line.643"></a>
+<span class="sourceLineNo">644</span>     *    wal-1 | A B C |<a name="line.644"></a>
+<span class="sourceLineNo">645</span>     *<a name="line.645"></a>
+<span class="sourceLineNo">646</span>     * If C and B don't depend on A (A is not the parent), we can start them<a name="line.646"></a>
+<span class="sourceLineNo">647</span>     * before reading wal-1. If B is the only one with parent A we can start C<a name="line.647"></a>
+<span class="sourceLineNo">648</span>     * and read one more WAL before being able to start B.<a name="line.648"></a>
+<span class="sourceLineNo">649</span>     *<a name="line.649"></a>
+<span class="sourceLineNo">650</span>     * How do we know with the only information in B that we are not ready.<a name="line.650"></a>
+<span class="sourceLineNo">651</span>     *  - easy case, the parent is missing from the global map<a name="line.651"></a>
+<span class="sourceLineNo">652</span>     *  - more complex case we look at the Stack IDs<a name="line.652"></a>
+<span class="sourceLineNo">653</span>     *<a name="line.653"></a>
+<span class="sourceLineNo">654</span>     * The Stack-IDs are added to the procedure order as incremental index<a name="line.654"></a>
+<span class="sourceLineNo">655</span>     * tracking how many times that procedure was executed, which is equivalent<a name="line.655"></a>
+<span class="sourceLineNo">656</span>     * at the number of times we wrote the procedure to the WAL.<a name="line.656"></a>
+<span class="sourceLineNo">657</span>     * In the example above:<a name="line.657"></a>
+<span class="sourceLineNo">658</span>     *   wal-2: B has stackId = [1, 2]<a name="line.658"></a>
+<span class="sourceLineNo">659</span>     *   wal-1: B has stackId = [1]<a name="line.659"></a>
+<span class="sourceLineNo">660</span>     *   wal-1: A has stackId = [0]<a name="line.660"></a>
+<span class="sourceLineNo">661</span>     *<a name="line.661"></a>
+<span class="sourceLineNo">662</span>     * Since we know that the Stack-IDs are incremental for a Procedure,<a name="line.662"></a>
+<span class="sourceLineNo">663</span>     * we notice that there is a gap in the stackIds of B, so something was<a name="line.663"></a>
+<span class="sourceLineNo">664</span>     * executed before.<a name="line.664"></a>
+<span class="sourceLineNo">665</span>     * To identify when a Procedure is ready we do the sum of the stackIds of<a name="line.665"></a>
+<span class="sourceLineNo">666</span>     * the procedure and the parent. if the stackIdSum is equals to the<a name="line.666"></a>
+<span class="sourceLineNo">667</span>     * sum of {1..maxStackId} then everything we need is avaiable.<a name="line.667"></a>
+<span class="sourceLineNo">668</span>     *<a name="line.668"></a>
+<span class="sourceLineNo">669</span>     * Example-2<a name="line.669"></a>
+<span class="sourceLineNo">670</span>     *    wal-2 | A |              A stackIds = [0, 2]<a name="line.670"></a>
+<span class="sourceLineNo">671</span>     *    wal-1 | A B |            B stackIds = [1]<a name="line.671"></a>
+<span class="sourceLineNo">672</span>     *<a name="line.672"></a>
+<span class="sourceLineNo">673</span>     * There is a gap between A stackIds so something was executed in between.<a name="line.673"></a>
+<span class="sourceLineNo">674</span>     */<a name="line.674"></a>
+<span class="sourceLineNo">675</span>    private boolean checkReadyToRun(Entry rootEntry) {<a name="line.675"></a>
+<span class="sourceLineNo">676</span>      assert !rootEntry.hasParent() : "expected root procedure, got " + rootEntry;<a name="line.676"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span>      if (rootEntry.isFinished()) {<a name="line.678"></a>
+<span class="sourceLineNo">679</span>        // if the root procedure is finished, sub-procedures should be gone<a name="line.679"></a>
+<span class="sourceLineNo">680</span>        if (rootEntry.childHead != null) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span>          LOG.error("unexpected active children for root-procedure: " + rootEntry);<a name="line.681"></a>
+<span class="sourceLineNo">682</span>          for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>            LOG.error("unexpected active children: " + p);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>          }<a name="line.684"></a>
+<span class="sourceLineNo">685</span>        }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span>        assert rootEntry.childHead == null : "unexpected children on root completion. " + rootEntry;<a name="line.687"></a>
+<span class="sourceLineNo">688</span>        rootEntry.ready = true;<a name="line.688"></a>
+<span class="sourceLineNo">689</span>        return true;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>      }<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span>      int stackIdSum = 0;<a name="line.692"></a>
+<span class="sourceLineNo">693</span>      int maxStackId = 0;<a name="line.693"></a>
+<span class="sourceLineNo">694</span>      for (int i = 0; i &lt; rootEntry.proto.getStackIdCount(); ++i) {<a name="line.694"></a>
+<span class="sourceLineNo">695</span>        int stackId = 1 + rootEntry.proto.getStackId(i);<a name="line.695"></a>
+<span class="sourceLineNo">696</span>        maxStackId  = Math.max(maxStackId, stackId);<a name="line.696"></a>
+<span class="sourceLineNo">697</span>        stackIdSum += stackId;<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>      for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.700"></a>
+<span class="sourceLineNo">701</span>        for (int i = 0; i &lt; p.proto.getStackIdCount(); ++i) {<a name="line.701"></a>
+<span class="sourceLineNo">702</span>          int stackId = 1 + p.proto.getStackId(i);<a name="line.702"></a>
+<span class="sourceLineNo">703</span>          maxStackId  = Math.max(maxStackId, stackId);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>          stackIdSum += stackId;<a name="line.704"></a>
+<span class="sourceLineNo">705</span>        }<a name="line.705"></a>
+<span class="sourceLineNo">706</span>      }<a name="line.706"></a>
+<span class="sourceLineNo">707</span>      final int cmpStackIdSum = (maxStackId * (maxStackId + 1) / 2);<a name="line.707"></a>
+<span class="sourceLineNo">708</span>      if (cmpStackIdSum == stackIdSum) {<a name="line.708"></a>
+<span class="sourceLineNo">709</span>        rootEntry.ready = true;<a name="line.709"></a>
+<span class="sourceLineNo">710</span>        for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span>          p.ready = true;<a name="line.711"></a>
+<span class="sourceLineNo">712</span>        }<a name="line.712"></a>
+<span class="sourceLineNo">713</span>        return true;<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      }<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      return false;<a name="line.715"></a>
+<span class="sourceLineNo">716</span>    }<a name="line.716"></a>
+<span class="sourceLineNo">717</span><a name="line.717"></a>
+<span class="sourceLineNo">718</span>    private void unlinkFromReplayList(Entry entry) {<a name="line.718"></a>
+<span class="sourceLineNo">719</span>      if (replayOrderHead == entry) {<a name="line.719"></a>
+<span class="sourceLineNo">720</span>        replayOrderHead = entry.replayNext;<a name="line.720"></a>
+<span class="sourceLineNo">721</span>      }<a name="line.721"></a>
+<span class="sourceLineNo">722</span>      if (replayOrderTail == entry) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>        replayOrderTail = entry.replayPrev;<a name="line.723"></a>
+<span class="sourceLineNo">724</span>      }<a name="line.724"></a>
+<span class="sourceLineNo">725</span>      if (entry.replayPrev != null) {<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        entry.replayPrev.replayNext = entry.replayNext;<a name="line.726"></a>
+<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
+<span class="sourceLineNo">728</span>      if (entry.replayNext != null) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span>        entry.replayNext.replayPrev = entry.replayPrev;<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
+<span class="sourceLineNo">731</span>    }<a name="line.731"></a>
+<span class="sourceLineNo">732</span><a name="line.732"></a>
+<span class="sourceLineNo">733</span>    private void addToReplayList(final Entry entry) {<a name="line.733"></a>
+<span class="sourceLineNo">734</span>      unlinkFromReplayList(entry);<a name="line.734"></a>
+<span class="sourceLineNo">735</span>      entry.replayNext = replayOrderHead;<a name="line.735"></a>
+<span class="sourceLineNo">736</span>      entry.replayPrev = null;<a name="line.736"></a>
+<span class="sourceLineNo">737</span>      if (replayOrderHead != null) {<a name="line.737"></a>
+<span class="sourceLineNo">738</span>        replayOrderHead.replayPrev = entry;<a name="line.738"></a>
+<span class="sourceLineNo">739</span>      } else {<a name="line.739"></a>
+<span class="sourceLineNo">740</span>        replayOrderTail = entry;<a name="line.740"></a>
+<span class="sourceLineNo">741</span>      }<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      replayOrderHead = entry;<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    }<a name="line.743"></a>
+<span class="sourceLineNo">744</span><a name="line.744"></a>
+<span class="sourceLineNo">745</span>    private void unlinkFromLinkList(Entry entry) {<a name="line.745"></a>
+<span class="sourceLineNo">746</span>      if (entry == rootHead) {<a name="line.746"></a>
+<span class="sourceLineNo">747</span>        rootHead = entry.linkNext;<a name="line.747"></a>
+<span class="sourceLineNo">748</span>      } else if (entry == childUnlinkedHead) {<a name="line.748"></a>
+<span class="sourceLineNo">749</span>        childUnlinkedHead = entry.linkNext;<a name="line.749"></a>
+<span class="sourceLineNo">750</span>      }<a name="line.750"></a>
+<span class="sourceLineNo">751</span>      if (entry.linkPrev != null) {<a name="line.751"></a>
+<span class="sourceLineNo">752</span>        entry.linkPrev.linkNext = entry.linkNext;<a name="line.752"></a>
+<span class="sourceLineNo">753</span>      }<a name="line.753"></a>
+<span class="sourceLineNo">754</span>      if (entry.linkNext != null) {<a name="line.754"></a>
+<span class="sourceLineNo">755</span>        entry.linkNext.linkPrev = entry.linkPrev;<a name="line.755"></a>
+<span class="sourceLineNo">756</span>      }<a name="line.756"></a>
+<span class="sourceLineNo">757</span>    }<a name="line.757"></a>
+<span class="sourceLineNo">758</span><a name="line.758"></a>
+<span class="sourceLineNo">759</span>    private Entry addToLinkList(Entry entry, Entry linkHead) {<a name="line.759"></a>
+<span class="sourceLineNo">760</span>      unlinkFromLinkList(entry);<a name="line.760"></a>
+<span class="sourceLineNo">761</span>      entry.linkNext = linkHead;<a name="line.761"></a>
+<span class="sourceLineNo">762</span>      entry.linkPrev = null;<a name="line.762"></a>
+<span class="sourceLineNo">763</span>      if (linkHead != null) {<a name="line.763"></a>
+<span class="sourceLineNo">764</span>        linkHead.linkPrev = entry;<a name="line.764"></a>
+<span class="sourceLineNo">765</span>      }<a name="line.765"></a>
+<span class="sourceLineNo">766</span>      return entry;<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    }<a name="line.767"></a>
+<span class="sourceLineNo">768</span><a name="line.768"></a>
+<span class="sourceLineNo">769</span>    private Entry findLinkListTail(Entry linkHead) {<a name="line.769"></a>
+<span class="sourceLineNo">770</span>      Entry tail = linkHead;<a name="line.770"></a>
+<span class="sourceLineNo">771</span>      while (tail.linkNext != null) {<a name="line.771"></a>
+<span class="sourceLineNo">772</span>        tail = tail.linkNext;<a name="line.772"></a>
+<span class="sourceLineNo">773</span>      }<a name="line.773"></a>
+<span class="sourceLineNo">774</span>      return tail;<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    }<a name="line.775"></a>
+<span class="sourceLineNo">776</span><a name="line.776"></a>
+<span class="sourceLineNo">777</span>    private Entry addToMap(final long procId, final boolean hasParent) {<a name="line.777"></a>
+<span class="sourceLineNo">778</span>      int slotIndex = getMapSlot(procId);<a name="line.778"></a>
+<span class="sourceLineNo">779</span>      Entry entry = getProcedure(slotIndex, procId);<a name="line.779"></a>
+<span class="sourceLineNo">780</span>      if (entry != null) return entry;<a name="line.780"></a>
+<span class="sourceLineNo">781</span><a name="line.781"></a>
+<span class="sourceLineNo">782</span>      entry = new Entry(procedureMap[slotIndex]);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>      procedureMap[slotIndex] = entry;<a name="line.783"></a>
+<span class="sourceLineNo">784</span>      return entry;<a name="line.784"></a>
+<span class="sourceLineNo">785</span>    }<a name="line.785"></a>
+<span class="sourceLineNo">786</span><a name="line.786"></a>
+<span class="sourceLineNo">787</span>    private Entry removeFromMap

<TRUNCATED>

[05/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html
index 22e0fbd..c2b04b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html
@@ -57,7 +57,7 @@
 <span class="sourceLineNo">049</span>  //   - INIT: Procedure submitted by the user (also known as 'root procedure')<a name="line.49"></a>
 <span class="sourceLineNo">050</span>  //   - INSERT: Children added to the procedure &lt;parentId&gt;:[&lt;childId&gt;, ...]<a name="line.50"></a>
 <span class="sourceLineNo">051</span>  //   - UPDATE: The specified procedure was updated<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  //   - DELETE: The procedure was removed (completed/rolledback and result TTL expired)<a name="line.52"></a>
+<span class="sourceLineNo">052</span>  //   - DELETE: The procedure was removed (finished/rolledback and result TTL expired)<a name="line.52"></a>
 <span class="sourceLineNo">053</span>  //<a name="line.53"></a>
 <span class="sourceLineNo">054</span>  // In the WAL we can find multiple times the same procedure as UPDATE or INSERT.<a name="line.54"></a>
 <span class="sourceLineNo">055</span>  // We read the WAL from top to bottom, so every time we find an entry of the<a name="line.55"></a>
@@ -334,505 +334,504 @@
 <span class="sourceLineNo">326</span>    public boolean hasParent() { return proto.hasParentId(); }<a name="line.326"></a>
 <span class="sourceLineNo">327</span>    public boolean isReady() { return ready; }<a name="line.327"></a>
 <span class="sourceLineNo">328</span><a name="line.328"></a>
-<span class="sourceLineNo">329</span>    public boolean isCompleted() {<a name="line.329"></a>
+<span class="sourceLineNo">329</span>    public boolean isFinished() {<a name="line.329"></a>
 <span class="sourceLineNo">330</span>      if (!hasParent()) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        // we only consider 'root' procedures. because for the user 'completed'<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        // means when everything up to the 'root' is complete.<a name="line.332"></a>
+<span class="sourceLineNo">331</span>        // we only consider 'root' procedures. because for the user 'finished'<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        // means when everything up to the 'root' is finished.<a name="line.332"></a>
 <span class="sourceLineNo">333</span>        switch (proto.getState()) {<a name="line.333"></a>
 <span class="sourceLineNo">334</span>          case ROLLEDBACK:<a name="line.334"></a>
-<span class="sourceLineNo">335</span>            return true;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>          case FINISHED:<a name="line.336"></a>
-<span class="sourceLineNo">337</span>            return !proto.hasException();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>          default:<a name="line.338"></a>
-<span class="sourceLineNo">339</span>            break;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>        }<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      }<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      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>    public Procedure convert() throws IOException {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      if (procedure == null) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        procedure = ProcedureUtil.convertToProcedure(proto);<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      }<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      return procedure;<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>    public ProcedureInfo convertToInfo() {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      return ProcedureUtil.convertToProcedureInfo(proto);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>    @Override<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    public String toString() {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      final StringBuilder sb = new StringBuilder();<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      sb.append("Entry(");<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      sb.append(getProcId());<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      sb.append(", parentId=");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      sb.append(getParentId());<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      sb.append(", class=");<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      sb.append(proto.getClassName());<a name="line.364"></a>
-<span class="sourceLineNo">365</span>      sb.append(")");<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      return sb.toString();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  }<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>  private static class EntryIterator implements ProcedureIterator {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    private final Entry replayHead;<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    private Entry current;<a name="line.372"></a>
-<span class="sourceLineNo">373</span><a name="line.373"></a>
-<span class="sourceLineNo">374</span>    public EntryIterator(Entry replayHead) {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      this.replayHead = replayHead;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      this.current = replayHead;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>    @Override<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    public void reset() {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      this.current = replayHead;<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>    @Override<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    public boolean hasNext() {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      return current != null;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>    @Override<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    public boolean isNextCompleted() {<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      return current != null &amp;&amp; current.isCompleted();<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    @Override<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    public void skipNext() {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      current = current.replayNext;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>    }<a name="line.397"></a>
-<span class="sourceLineNo">398</span><a name="line.398"></a>
-<span class="sourceLineNo">399</span>    @Override<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    public Procedure nextAsProcedure() throws IOException {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      try {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        return current.convert();<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      } finally {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        current = current.replayNext;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      }<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    @Override<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    public ProcedureInfo nextAsProcedureInfo() {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      try {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        return current.convertToInfo();<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      } finally {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        current = current.replayNext;<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      }<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>  private static class WalProcedureMap {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    // procedure hash table<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    private Entry[] procedureMap;<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>    // replay-order double-linked-list<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    private Entry replayOrderHead;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    private Entry replayOrderTail;<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    // root linked-list<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    private Entry rootHead;<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // pending unlinked children (root not present yet)<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    private Entry childUnlinkedHead;<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>    // Track ProcId range<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    private long minProcId = Long.MAX_VALUE;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    private long maxProcId = Long.MIN_VALUE;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>    public WalProcedureMap(int size) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      procedureMap = new Entry[size];<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      replayOrderHead = null;<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      replayOrderTail = null;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      rootHead = null;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      childUnlinkedHead = null;<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span>    public void add(ProcedureProtos.Procedure procProto) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      trackProcIds(procProto.getProcId());<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      Entry entry = addToMap(procProto.getProcId(), procProto.hasParentId());<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      boolean isNew = entry.proto == null;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      entry.proto = procProto;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      addToReplayList(entry);<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>      if (isNew) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        if (procProto.hasParentId()) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>          childUnlinkedHead = addToLinkList(entry, childUnlinkedHead);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        } else {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>          rootHead = addToLinkList(entry, rootHead);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        }<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    }<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span>    public boolean remove(long procId) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      trackProcIds(procId);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      Entry entry = removeFromMap(procId);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      if (entry != null) {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>        unlinkFromReplayList(entry);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>        unlinkFromLinkList(entry);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>        return true;<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      }<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      return false;<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>    private void trackProcIds(long procId) {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      minProcId = Math.min(minProcId, procId);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      maxProcId = Math.max(maxProcId, procId);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
-<span class="sourceLineNo">475</span><a name="line.475"></a>
-<span class="sourceLineNo">476</span>    public long getMinProcId() {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      return minProcId;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
-<span class="sourceLineNo">479</span><a name="line.479"></a>
-<span class="sourceLineNo">480</span>    public long getMaxProcId() {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      return maxProcId;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    }<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>    public boolean contains(long procId) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      return getProcedure(procId) != null;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    }<a name="line.486"></a>
-<span class="sourceLineNo">487</span><a name="line.487"></a>
-<span class="sourceLineNo">488</span>    public boolean isEmpty() {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      return replayOrderHead == null;<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>    public void clear() {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>      for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        procedureMap[i] = null;<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      }<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      replayOrderHead = null;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      replayOrderTail = null;<a name="line.497"></a>
-<span class="sourceLineNo">498</span>      rootHead = null;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      childUnlinkedHead = null;<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      minProcId = Long.MAX_VALUE;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      maxProcId = Long.MIN_VALUE;<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    }<a name="line.502"></a>
-<span class="sourceLineNo">503</span><a name="line.503"></a>
-<span class="sourceLineNo">504</span>    /*<a name="line.504"></a>
-<span class="sourceLineNo">505</span>     * Merges two WalProcedureMap,<a name="line.505"></a>
-<span class="sourceLineNo">506</span>     * the target is the "global" map, the source is the "local" map.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>     *  - The entries in the hashtables are guaranteed to be unique.<a name="line.507"></a>
-<span class="sourceLineNo">508</span>     *    On replay we don't load procedures that already exist in the "global"<a name="line.508"></a>
-<span class="sourceLineNo">509</span>     *    map (the one we are merging the "local" in to).<a name="line.509"></a>
-<span class="sourceLineNo">510</span>     *  - The replayOrderList of the "local" nao will be appended to the "global"<a name="line.510"></a>
-<span class="sourceLineNo">511</span>     *    map replay list.<a name="line.511"></a>
-<span class="sourceLineNo">512</span>     *  - The "local" map will be cleared at the end of the operation.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>     */<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    public void mergeTail(WalProcedureMap other) {<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      for (Entry p = other.replayOrderHead; p != null; p = p.replayNext) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        int slotIndex = getMapSlot(p.getProcId());<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        p.hashNext = procedureMap[slotIndex];<a name="line.517"></a>
-<span class="sourceLineNo">518</span>        procedureMap[slotIndex] = p;<a name="line.518"></a>
-<span class="sourceLineNo">519</span>      }<a name="line.519"></a>
-<span class="sourceLineNo">520</span><a name="line.520"></a>
-<span class="sourceLineNo">521</span>      if (replayOrderHead == null) {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        replayOrderHead = other.replayOrderHead;<a name="line.522"></a>
-<span class="sourceLineNo">523</span>        replayOrderTail = other.replayOrderTail;<a name="line.523"></a>
-<span class="sourceLineNo">524</span>        rootHead = other.rootHead;<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        childUnlinkedHead = other.childUnlinkedHead;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>      } else {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        // append replay list<a name="line.527"></a>
-<span class="sourceLineNo">528</span>        assert replayOrderTail.replayNext == null;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>        assert other.replayOrderHead.replayPrev == null;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>        replayOrderTail.replayNext = other.replayOrderHead;<a name="line.530"></a>
-<span class="sourceLineNo">531</span>        other.replayOrderHead.replayPrev = replayOrderTail;<a name="line.531"></a>
-<span class="sourceLineNo">532</span>        replayOrderTail = other.replayOrderTail;<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>        // merge rootHead<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        if (rootHead == null) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          rootHead = other.rootHead;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        } else if (other.rootHead != null) {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          Entry otherTail = findLinkListTail(other.rootHead);<a name="line.538"></a>
-<span class="sourceLineNo">539</span>          otherTail.linkNext = rootHead;<a name="line.539"></a>
-<span class="sourceLineNo">540</span>          rootHead.linkPrev = otherTail;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>          rootHead = other.rootHead;<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>        // merge childUnlinkedHead<a name="line.544"></a>
-<span class="sourceLineNo">545</span>        if (childUnlinkedHead == null) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>          childUnlinkedHead = other.childUnlinkedHead;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>        } else if (other.childUnlinkedHead != null) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>          Entry otherTail = findLinkListTail(other.childUnlinkedHead);<a name="line.548"></a>
-<span class="sourceLineNo">549</span>          otherTail.linkNext = childUnlinkedHead;<a name="line.549"></a>
-<span class="sourceLineNo">550</span>          childUnlinkedHead.linkPrev = otherTail;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>          childUnlinkedHead = other.childUnlinkedHead;<a name="line.551"></a>
-<span class="sourceLineNo">552</span>        }<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      }<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      maxProcId = Math.max(maxProcId, other.maxProcId);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      minProcId = Math.max(minProcId, other.minProcId);<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>      other.clear();<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
-<span class="sourceLineNo">559</span><a name="line.559"></a>
-<span class="sourceLineNo">560</span>    /*<a name="line.560"></a>
-<span class="sourceLineNo">561</span>     * Returns an EntryIterator with the list of procedures ready<a name="line.561"></a>
-<span class="sourceLineNo">562</span>     * to be added to the executor.<a name="line.562"></a>
-<span class="sourceLineNo">563</span>     * A Procedure is ready if its children and parent are ready.<a name="line.563"></a>
-<span class="sourceLineNo">564</span>     */<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    public EntryIterator fetchReady() {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      buildGraph();<a name="line.566"></a>
-<span class="sourceLineNo">567</span><a name="line.567"></a>
-<span class="sourceLineNo">568</span>      Entry readyHead = null;<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      Entry readyTail = null;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      Entry p = replayOrderHead;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      while (p != null) {<a name="line.571"></a>
-<span class="sourceLineNo">572</span>        Entry next = p.replayNext;<a name="line.572"></a>
-<span class="sourceLineNo">573</span>        if (p.isReady()) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          unlinkFromReplayList(p);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>          if (readyTail != null) {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>            readyTail.replayNext = p;<a name="line.576"></a>
-<span class="sourceLineNo">577</span>            p.replayPrev = readyTail;<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          } else {<a name="line.578"></a>
-<span class="sourceLineNo">579</span>            p.replayPrev = null;<a name="line.579"></a>
-<span class="sourceLineNo">580</span>            readyHead = p;<a name="line.580"></a>
-<span class="sourceLineNo">581</span>          }<a name="line.581"></a>
-<span class="sourceLineNo">582</span>          readyTail = p;<a name="line.582"></a>
-<span class="sourceLineNo">583</span>          p.replayNext = null;<a name="line.583"></a>
-<span class="sourceLineNo">584</span>        }<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        p = next;<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      }<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      // we need the hash-table lookups for parents, so this must be done<a name="line.587"></a>
-<span class="sourceLineNo">588</span>      // out of the loop where we check isReadyToRun()<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      for (p = readyHead; p != null; p = p.replayNext) {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>        removeFromMap(p.getProcId());<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        unlinkFromLinkList(p);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      }<a name="line.592"></a>
-<span class="sourceLineNo">593</span>      return readyHead != null ? new EntryIterator(readyHead) : null;<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    }<a name="line.594"></a>
-<span class="sourceLineNo">595</span><a name="line.595"></a>
-<span class="sourceLineNo">596</span>    /*<a name="line.596"></a>
-<span class="sourceLineNo">597</span>     * Drain this map and return all procedures in it.<a name="line.597"></a>
-<span class="sourceLineNo">598</span>     */<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    public EntryIterator fetchAll() {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      Entry head = replayOrderHead;<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      for (Entry p = head; p != null; p = p.replayNext) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>        removeFromMap(p.getProcId());<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      }<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>        assert procedureMap[i] == null : "map not empty i=" + i;<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      }<a name="line.606"></a>
-<span class="sourceLineNo">607</span>      replayOrderHead = null;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>      replayOrderTail = null;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      childUnlinkedHead = null;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      rootHead = null;<a name="line.610"></a>
-<span class="sourceLineNo">611</span>      return head != null ? new EntryIterator(head) : null;<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>    private void buildGraph() {<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      Entry p = childUnlinkedHead;<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      while (p != null) {<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        Entry next = p.linkNext;<a name="line.617"></a>
-<span class="sourceLineNo">618</span>        Entry rootProc = getRootProcedure(p);<a name="line.618"></a>
-<span class="sourceLineNo">619</span>        if (rootProc != null) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          rootProc.childHead = addToLinkList(p, rootProc.childHead);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>        }<a name="line.621"></a>
-<span class="sourceLineNo">622</span>        p = next;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>      for (p = rootHead; p != null; p = p.linkNext) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        checkReadyToRun(p);<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><a name="line.629"></a>
-<span class="sourceLineNo">630</span>    private Entry getRootProcedure(Entry entry) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      while (entry != null &amp;&amp; entry.hasParent()) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>        entry = getProcedure(entry.getParentId());<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      return entry;<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>    /*<a name="line.637"></a>
-<span class="sourceLineNo">638</span>     * (see the comprehensive explaination in the beginning of the file)<a name="line.638"></a>
-<span class="sourceLineNo">639</span>     * A Procedure is ready when parent and children are ready.<a name="line.639"></a>
-<span class="sourceLineNo">640</span>     * "ready" means that we all the information that we need in-memory.<a name="line.640"></a>
-<span class="sourceLineNo">641</span>     *<a name="line.641"></a>
-<span class="sourceLineNo">642</span>     * Example-1:<a name="line.642"></a>
-<span class="sourceLineNo">643</span>     * We have two WALs, we start reading fronm the newest (wal-2)<a name="line.643"></a>
-<span class="sourceLineNo">644</span>     *    wal-2 | C B |<a name="line.644"></a>
-<span class="sourceLineNo">645</span>     *    wal-1 | A B C |<a name="line.645"></a>
-<span class="sourceLineNo">646</span>     *<a name="line.646"></a>
-<span class="sourceLineNo">647</span>     * If C and B don't depend on A (A is not the parent), we can start them<a name="line.647"></a>
-<span class="sourceLineNo">648</span>     * before reading wal-1. If B is the only one with parent A we can start C<a name="line.648"></a>
-<span class="sourceLineNo">649</span>     * and read one more WAL before being able to start B.<a name="line.649"></a>
-<span class="sourceLineNo">650</span>     *<a name="line.650"></a>
-<span class="sourceLineNo">651</span>     * How do we know with the only information in B that we are not ready.<a name="line.651"></a>
-<span class="sourceLineNo">652</span>     *  - easy case, the parent is missing from the global map<a name="line.652"></a>
-<span class="sourceLineNo">653</span>     *  - more complex case we look at the Stack IDs<a name="line.653"></a>
-<span class="sourceLineNo">654</span>     *<a name="line.654"></a>
-<span class="sourceLineNo">655</span>     * The Stack-IDs are added to the procedure order as incremental index<a name="line.655"></a>
-<span class="sourceLineNo">656</span>     * tracking how many times that procedure was executed, which is equivalent<a name="line.656"></a>
-<span class="sourceLineNo">657</span>     * at the number of times we wrote the procedure to the WAL.<a name="line.657"></a>
-<span class="sourceLineNo">658</span>     * In the example above:<a name="line.658"></a>
-<span class="sourceLineNo">659</span>     *   wal-2: B has stackId = [1, 2]<a name="line.659"></a>
-<span class="sourceLineNo">660</span>     *   wal-1: B has stackId = [1]<a name="line.660"></a>
-<span class="sourceLineNo">661</span>     *   wal-1: A has stackId = [0]<a name="line.661"></a>
-<span class="sourceLineNo">662</span>     *<a name="line.662"></a>
-<span class="sourceLineNo">663</span>     * Since we know that the Stack-IDs are incremental for a Procedure,<a name="line.663"></a>
-<span class="sourceLineNo">664</span>     * we notice that there is a gap in the stackIds of B, so something was<a name="line.664"></a>
-<span class="sourceLineNo">665</span>     * executed before.<a name="line.665"></a>
-<span class="sourceLineNo">666</span>     * To identify when a Procedure is ready we do the sum of the stackIds of<a name="line.666"></a>
-<span class="sourceLineNo">667</span>     * the procedure and the parent. if the stackIdSum is equals to the<a name="line.667"></a>
-<span class="sourceLineNo">668</span>     * sum of {1..maxStackId} then everything we need is avaiable.<a name="line.668"></a>
-<span class="sourceLineNo">669</span>     *<a name="line.669"></a>
-<span class="sourceLineNo">670</span>     * Example-2<a name="line.670"></a>
-<span class="sourceLineNo">671</span>     *    wal-2 | A |              A stackIds = [0, 2]<a name="line.671"></a>
-<span class="sourceLineNo">672</span>     *    wal-1 | A B |            B stackIds = [1]<a name="line.672"></a>
-<span class="sourceLineNo">673</span>     *<a name="line.673"></a>
-<span class="sourceLineNo">674</span>     * There is a gap between A stackIds so something was executed in between.<a name="line.674"></a>
-<span class="sourceLineNo">675</span>     */<a name="line.675"></a>
-<span class="sourceLineNo">676</span>    private boolean checkReadyToRun(Entry rootEntry) {<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      assert !rootEntry.hasParent() : "expected root procedure, got " + rootEntry;<a name="line.677"></a>
-<span class="sourceLineNo">678</span><a name="line.678"></a>
-<span class="sourceLineNo">679</span>      if (rootEntry.isCompleted()) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>        // if the root procedure is completed, sub-procedures should be gone<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        if (rootEntry.childHead != null) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>          LOG.error("unexpected active children for root-procedure: " + rootEntry);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>            LOG.error("unexpected active children: " + p);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>          }<a name="line.685"></a>
-<span class="sourceLineNo">686</span>        }<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>        assert rootEntry.childHead == null : "unexpected children on root completion. " + rootEntry;<a name="line.688"></a>
-<span class="sourceLineNo">689</span>        rootEntry.ready = true;<a name="line.689"></a>
-<span class="sourceLineNo">690</span>        return true;<a name="line.690"></a>
-<span class="sourceLineNo">691</span>      }<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span>      int stackIdSum = 0;<a name="line.693"></a>
-<span class="sourceLineNo">694</span>      int maxStackId = 0;<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      for (int i = 0; i &lt; rootEntry.proto.getStackIdCount(); ++i) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>        int stackId = 1 + rootEntry.proto.getStackId(i);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>        maxStackId  = Math.max(maxStackId, stackId);<a name="line.697"></a>
-<span class="sourceLineNo">698</span>        stackIdSum += stackId;<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>      for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span>        for (int i = 0; i &lt; p.proto.getStackIdCount(); ++i) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span>          int stackId = 1 + p.proto.getStackId(i);<a name="line.703"></a>
-<span class="sourceLineNo">704</span>          maxStackId  = Math.max(maxStackId, stackId);<a name="line.704"></a>
-<span class="sourceLineNo">705</span>          stackIdSum += stackId;<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        }<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      }<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      final int cmpStackIdSum = (maxStackId * (maxStackId + 1) / 2);<a name="line.708"></a>
-<span class="sourceLineNo">709</span>      if (cmpStackIdSum == stackIdSum) {<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        rootEntry.ready = true;<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>          p.ready = true;<a name="line.712"></a>
-<span class="sourceLineNo">713</span>        }<a name="line.713"></a>
-<span class="sourceLineNo">714</span>        return true;<a name="line.714"></a>
-<span class="sourceLineNo">715</span>      }<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      return false;<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    }<a name="line.717"></a>
-<span class="sourceLineNo">718</span><a name="line.718"></a>
-<span class="sourceLineNo">719</span>    private void unlinkFromReplayList(Entry entry) {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      if (replayOrderHead == entry) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>        replayOrderHead = entry.replayNext;<a name="line.721"></a>
-<span class="sourceLineNo">722</span>      }<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      if (replayOrderTail == entry) {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>        replayOrderTail = entry.replayPrev;<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      }<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      if (entry.replayPrev != null) {<a name="line.726"></a>
-<span class="sourceLineNo">727</span>        entry.replayPrev.replayNext = entry.replayNext;<a name="line.727"></a>
-<span class="sourceLineNo">728</span>      }<a name="line.728"></a>
-<span class="sourceLineNo">729</span>      if (entry.replayNext != null) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        entry.replayNext.replayPrev = entry.replayPrev;<a name="line.730"></a>
-<span class="sourceLineNo">731</span>      }<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    }<a name="line.732"></a>
-<span class="sourceLineNo">733</span><a name="line.733"></a>
-<span class="sourceLineNo">734</span>    private void addToReplayList(final Entry entry) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>      unlinkFromReplayList(entry);<a name="line.735"></a>
-<span class="sourceLineNo">736</span>      entry.replayNext = replayOrderHead;<a name="line.736"></a>
-<span class="sourceLineNo">737</span>      entry.replayPrev = null;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>      if (replayOrderHead != null) {<a name="line.738"></a>
-<span class="sourceLineNo">739</span>        replayOrderHead.replayPrev = entry;<a name="line.739"></a>
-<span class="sourceLineNo">740</span>      } else {<a name="line.740"></a>
-<span class="sourceLineNo">741</span>        replayOrderTail = entry;<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      }<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      replayOrderHead = entry;<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>    private void unlinkFromLinkList(Entry entry) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>      if (entry == rootHead) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>        rootHead = entry.linkNext;<a name="line.748"></a>
-<span class="sourceLineNo">749</span>      } else if (entry == childUnlinkedHead) {<a name="line.749"></a>
-<span class="sourceLineNo">750</span>        childUnlinkedHead = entry.linkNext;<a name="line.750"></a>
-<span class="sourceLineNo">751</span>      }<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      if (entry.linkPrev != null) {<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        entry.linkPrev.linkNext = entry.linkNext;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>      }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>      if (entry.linkNext != null) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span>        entry.linkNext.linkPrev = entry.linkPrev;<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><a name="line.759"></a>
-<span class="sourceLineNo">760</span>    private Entry addToLinkList(Entry entry, Entry linkHead) {<a name="line.760"></a>
-<span class="sourceLineNo">761</span>      unlinkFromLinkList(entry);<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      entry.linkNext = linkHead;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      entry.linkPrev = null;<a name="line.763"></a>
-<span class="sourceLineNo">764</span>      if (linkHead != null) {<a name="line.764"></a>
-<span class="sourceLineNo">765</span>        linkHead.linkPrev = entry;<a name="line.765"></a>
-<span class="sourceLineNo">766</span>      }<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      return entry;<a name="line.767"></a>
-<span class="sourceLineNo">768</span>    }<a name="line.768"></a>
-<span class="sourceLineNo">769</span><a name="line.769"></a>
-<span class="sourceLineNo">770</span>    private Entry findLinkListTail(Entry linkHead) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>      Entry tail = linkHead;<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      while (tail.linkNext != null) {<a name="line.772"></a>
-<span class="sourceLineNo">773</span>        tail = tail.linkNext;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>      }<a name="line.774"></a>
-<span class="sourceLineNo">775</span>      return tail;<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    }<a name="line.776"></a>
-<span class="sourceLineNo">777</span><a name="line.777"></a>
-<span class="sourceLineNo">778</span>    private Entry addToMap(final long procId, final boolean hasParent) {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      int slotIndex = getMapSlot(procId);<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      Entry entry = getProcedure(slotIndex, procId);<a name="line.780"></a>
-<span class="sourceLineNo">781</span>      if (entry != null) return entry;<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>      entry = new Entry(procedureMap[slotIndex]);<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      procedureMap[slotIndex] = entry;<a name="line.784"></a>
-<span class="sourceLineNo">785</span>      return entry;<a name="line.785"></a>
-<span class="sourceLineNo">786</span>    }<a name="line.786"></a>
-<span class="sourceLineNo">787</span><a name="line.787"></a>
-<span class="sourceLineNo">788</span>    private Entry removeFromMap(final long procId) {<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      int slotIndex = getMapSlot(procId);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      Entry prev = null;<a name="line.790"></a>
-<span class="sourceLineNo">791</span>      Entry entry = procedureMap[slotIndex];<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      while (entry != null) {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>        if (procId == entry.getProcId()) {<a name="line.793"></a>
-<span class="sourceLineNo">794</span>          if (prev != null) {<a name="line.794"></a>
-<span class="sourceLineNo">795</span>            prev.hashNext = entry.hashNext;<a name="line.795"></a>
-<span class="sourceLineNo">796</span>          } else {<a name="line.796"></a>
-<span class="sourceLineNo">797</span>            procedureMap[slotIndex] = entry.hashNext;<a name="line.797"></a>
-<span class="sourceLineNo">798</span>          }<a name="line.798"></a>
-<span class="sourceLineNo">799</span>          entry.hashNext = null;<a name="line.799"></a>
-<span class="sourceLineNo">800</span>          return entry;<a name="line.800"></a>
-<span class="sourceLineNo">801</span>        }<a name="line.801"></a>
-<span class="sourceLineNo">802</span>        prev = entry;<a name="line.802"></a>
-<span class="sourceLineNo">803</span>        entry = entry.hashNext;<a name="line.803"></a>
-<span class="sourceLineNo">804</span>      }<a name="line.804"></a>
-<span class="sourceLineNo">805</span>      return null;<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    }<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span>    private Entry getProcedure(final long procId) {<a name="line.808"></a>
-<span class="sourceLineNo">809</span>      return getProcedure(getMapSlot(procId), procId);<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    }<a name="line.810"></a>
-<span class="sourceLineNo">811</span><a name="line.811"></a>
-<span class="sourceLineNo">812</span>    private Entry getProcedure(final int slotIndex, final long procId) {<a name="line.812"></a>
-<span class="sourceLineNo">813</span>      Entry entry = procedureMap[slotIndex];<a name="line.813"></a>
-<span class="sourceLineNo">814</span>      while (entry != null) {<a name="line.814"></a>
-<span class="sourceLineNo">815</span>        if (procId == entry.getProcId()) {<a name="line.815"></a>
-<span class="sourceLineNo">816</span>          return entry;<a name="line.816"></a>
-<span class="sourceLineNo">817</span>        }<a name="line.817"></a>
-<span class="sourceLineNo">818</span>        entry = entry.hashNext;<a name="line.818"></a>
-<span class="sourceLineNo">819</span>      }<a name="line.819"></a>
-<span class="sourceLineNo">820</span>      return null;<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>    private int getMapSlot(final long procId) {<a name="line.823"></a>
-<span class="sourceLineNo">824</span>      return (int)(Procedure.getProcIdHashCode(procId) % procedureMap.length);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    }<a name="line.825"></a>
-<span class="sourceLineNo">826</span>  }<a name="line.826"></a>
-<span class="sourceLineNo">827</span>}<a name="line.827"></a>
+<span class="sourceLineNo">335</span>          case SUCCESS:<a name="line.335"></a>
+<span class="sourceLineNo">336</span>            return true;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>          default:<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            break;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        }<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      }<a name="line.340"></a>
+<span class="sourceLineNo">341</span>      return false;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    }<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span>    public Procedure convert() throws IOException {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      if (procedure == null) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        procedure = ProcedureUtil.convertToProcedure(proto);<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      }<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      return procedure;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    }<a name="line.349"></a>
+<span class="sourceLineNo">350</span><a name="line.350"></a>
+<span class="sourceLineNo">351</span>    public ProcedureInfo convertToInfo() {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      return ProcedureUtil.convertToProcedureInfo(proto);<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>    @Override<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    public String toString() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      final StringBuilder sb = new StringBuilder();<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      sb.append("Entry(");<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      sb.append(getProcId());<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      sb.append(", parentId=");<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      sb.append(getParentId());<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      sb.append(", class=");<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      sb.append(proto.getClassName());<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      sb.append(")");<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      return sb.toString();<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span>  }<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span>  private static class EntryIterator implements ProcedureIterator {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    private final Entry replayHead;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    private Entry current;<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>    public EntryIterator(Entry replayHead) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      this.replayHead = replayHead;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      this.current = replayHead;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>    @Override<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    public void reset() {<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      this.current = replayHead;<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>    @Override<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    public boolean hasNext() {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      return current != null;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    }<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span>    @Override<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    public boolean isNextFinished() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>      return current != null &amp;&amp; current.isFinished();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span>    @Override<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    public void skipNext() {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>      current = current.replayNext;<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    }<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span>    @Override<a name="line.398"></a>
+<span class="sourceLineNo">399</span>    public Procedure nextAsProcedure() throws IOException {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      try {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        return current.convert();<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      } finally {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        current = current.replayNext;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      }<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    }<a name="line.405"></a>
+<span class="sourceLineNo">406</span><a name="line.406"></a>
+<span class="sourceLineNo">407</span>    @Override<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    public ProcedureInfo nextAsProcedureInfo() {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      try {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        return current.convertToInfo();<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      } finally {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        current = current.replayNext;<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      }<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  }<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span>  private static class WalProcedureMap {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    // procedure hash table<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    private Entry[] procedureMap;<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span>    // replay-order double-linked-list<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    private Entry replayOrderHead;<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    private Entry replayOrderTail;<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>    // root linked-list<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    private Entry rootHead;<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span>    // pending unlinked children (root not present yet)<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    private Entry childUnlinkedHead;<a name="line.429"></a>
+<span class="sourceLineNo">430</span><a name="line.430"></a>
+<span class="sourceLineNo">431</span>    // Track ProcId range<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    private long minProcId = Long.MAX_VALUE;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    private long maxProcId = Long.MIN_VALUE;<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>    public WalProcedureMap(int size) {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      procedureMap = new Entry[size];<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      replayOrderHead = null;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      replayOrderTail = null;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      rootHead = null;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      childUnlinkedHead = null;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    }<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>    public void add(ProcedureProtos.Procedure procProto) {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      trackProcIds(procProto.getProcId());<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      Entry entry = addToMap(procProto.getProcId(), procProto.hasParentId());<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      boolean isNew = entry.proto == null;<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      entry.proto = procProto;<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      addToReplayList(entry);<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>      if (isNew) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        if (procProto.hasParentId()) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          childUnlinkedHead = addToLinkList(entry, childUnlinkedHead);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        } else {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>          rootHead = addToLinkList(entry, rootHead);<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>    }<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>    public boolean remove(long procId) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      trackProcIds(procId);<a name="line.460"></a>
+<span class="sourceLineNo">461</span>      Entry entry = removeFromMap(procId);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      if (entry != null) {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>        unlinkFromReplayList(entry);<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        unlinkFromLinkList(entry);<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        return true;<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      }<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      return false;<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>    private void trackProcIds(long procId) {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      minProcId = Math.min(minProcId, procId);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      maxProcId = Math.max(maxProcId, procId);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    }<a name="line.473"></a>
+<span class="sourceLineNo">474</span><a name="line.474"></a>
+<span class="sourceLineNo">475</span>    public long getMinProcId() {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      return minProcId;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    public long getMaxProcId() {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      return maxProcId;<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>    public boolean contains(long procId) {<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      return getProcedure(procId) != null;<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    }<a name="line.485"></a>
+<span class="sourceLineNo">486</span><a name="line.486"></a>
+<span class="sourceLineNo">487</span>    public boolean isEmpty() {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      return replayOrderHead == null;<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>    public void clear() {<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.492"></a>
+<span class="sourceLineNo">493</span>        procedureMap[i] = null;<a name="line.493"></a>
+<span class="sourceLineNo">494</span>      }<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      replayOrderHead = null;<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      replayOrderTail = null;<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      rootHead = null;<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      childUnlinkedHead = null;<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      minProcId = Long.MAX_VALUE;<a name="line.499"></a>
+<span class="sourceLineNo">500</span>      maxProcId = Long.MIN_VALUE;<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>    /*<a name="line.503"></a>
+<span class="sourceLineNo">504</span>     * Merges two WalProcedureMap,<a name="line.504"></a>
+<span class="sourceLineNo">505</span>     * the target is the "global" map, the source is the "local" map.<a name="line.505"></a>
+<span class="sourceLineNo">506</span>     *  - The entries in the hashtables are guaranteed to be unique.<a name="line.506"></a>
+<span class="sourceLineNo">507</span>     *    On replay we don't load procedures that already exist in the "global"<a name="line.507"></a>
+<span class="sourceLineNo">508</span>     *    map (the one we are merging the "local" in to).<a name="line.508"></a>
+<span class="sourceLineNo">509</span>     *  - The replayOrderList of the "local" nao will be appended to the "global"<a name="line.509"></a>
+<span class="sourceLineNo">510</span>     *    map replay list.<a name="line.510"></a>
+<span class="sourceLineNo">511</span>     *  - The "local" map will be cleared at the end of the operation.<a name="line.511"></a>
+<span class="sourceLineNo">512</span>     */<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    public void mergeTail(WalProcedureMap other) {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      for (Entry p = other.replayOrderHead; p != null; p = p.replayNext) {<a name="line.514"></a>
+<span class="sourceLineNo">515</span>        int slotIndex = getMapSlot(p.getProcId());<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        p.hashNext = procedureMap[slotIndex];<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        procedureMap[slotIndex] = p;<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span><a name="line.519"></a>
+<span class="sourceLineNo">520</span>      if (replayOrderHead == null) {<a name="line.520"></a>
+<span class="sourceLineNo">521</span>        replayOrderHead = other.replayOrderHead;<a name="line.521"></a>
+<span class="sourceLineNo">522</span>        replayOrderTail = other.replayOrderTail;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>        rootHead = other.rootHead;<a name="line.523"></a>
+<span class="sourceLineNo">524</span>        childUnlinkedHead = other.childUnlinkedHead;<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      } else {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>        // append replay list<a name="line.526"></a>
+<span class="sourceLineNo">527</span>        assert replayOrderTail.replayNext == null;<a name="line.527"></a>
+<span class="sourceLineNo">528</span>        assert other.replayOrderHead.replayPrev == null;<a name="line.528"></a>
+<span class="sourceLineNo">529</span>        replayOrderTail.replayNext = other.replayOrderHead;<a name="line.529"></a>
+<span class="sourceLineNo">530</span>        other.replayOrderHead.replayPrev = replayOrderTail;<a name="line.530"></a>
+<span class="sourceLineNo">531</span>        replayOrderTail = other.replayOrderTail;<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>        // merge rootHead<a name="line.533"></a>
+<span class="sourceLineNo">534</span>        if (rootHead == null) {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>          rootHead = other.rootHead;<a name="line.535"></a>
+<span class="sourceLineNo">536</span>        } else if (other.rootHead != null) {<a name="line.536"></a>
+<span class="sourceLineNo">537</span>          Entry otherTail = findLinkListTail(other.rootHead);<a name="line.537"></a>
+<span class="sourceLineNo">538</span>          otherTail.linkNext = rootHead;<a name="line.538"></a>
+<span class="sourceLineNo">539</span>          rootHead.linkPrev = otherTail;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>          rootHead = other.rootHead;<a name="line.540"></a>
+<span class="sourceLineNo">541</span>        }<a name="line.541"></a>
+<span class="sourceLineNo">542</span><a name="line.542"></a>
+<span class="sourceLineNo">543</span>        // merge childUnlinkedHead<a name="line.543"></a>
+<span class="sourceLineNo">544</span>        if (childUnlinkedHead == null) {<a name="line.544"></a>
+<span class="sourceLineNo">545</span>          childUnlinkedHead = other.childUnlinkedHead;<a name="line.545"></a>
+<span class="sourceLineNo">546</span>        } else if (other.childUnlinkedHead != null) {<a name="line.546"></a>
+<span class="sourceLineNo">547</span>          Entry otherTail = findLinkListTail(other.childUnlinkedHead);<a name="line.547"></a>
+<span class="sourceLineNo">548</span>          otherTail.linkNext = childUnlinkedHead;<a name="line.548"></a>
+<span class="sourceLineNo">549</span>          childUnlinkedHead.linkPrev = otherTail;<a name="line.549"></a>
+<span class="sourceLineNo">550</span>          childUnlinkedHead = other.childUnlinkedHead;<a name="line.550"></a>
+<span class="sourceLineNo">551</span>        }<a name="line.551"></a>
+<span class="sourceLineNo">552</span>      }<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      maxProcId = Math.max(maxProcId, other.maxProcId);<a name="line.553"></a>
+<span class="sourceLineNo">554</span>      minProcId = Math.max(minProcId, other.minProcId);<a name="line.554"></a>
+<span class="sourceLineNo">555</span><a name="line.555"></a>
+<span class="sourceLineNo">556</span>      other.clear();<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    }<a name="line.557"></a>
+<span class="sourceLineNo">558</span><a name="line.558"></a>
+<span class="sourceLineNo">559</span>    /*<a name="line.559"></a>
+<span class="sourceLineNo">560</span>     * Returns an EntryIterator with the list of procedures ready<a name="line.560"></a>
+<span class="sourceLineNo">561</span>     * to be added to the executor.<a name="line.561"></a>
+<span class="sourceLineNo">562</span>     * A Procedure is ready if its children and parent are ready.<a name="line.562"></a>
+<span class="sourceLineNo">563</span>     */<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    public EntryIterator fetchReady() {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      buildGraph();<a name="line.565"></a>
+<span class="sourceLineNo">566</span><a name="line.566"></a>
+<span class="sourceLineNo">567</span>      Entry readyHead = null;<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      Entry readyTail = null;<a name="line.568"></a>
+<span class="sourceLineNo">569</span>      Entry p = replayOrderHead;<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      while (p != null) {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>        Entry next = p.replayNext;<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        if (p.isReady()) {<a name="line.572"></a>
+<span class="sourceLineNo">573</span>          unlinkFromReplayList(p);<a name="line.573"></a>
+<span class="sourceLineNo">574</span>          if (readyTail != null) {<a name="line.574"></a>
+<span class="sourceLineNo">575</span>            readyTail.replayNext = p;<a name="line.575"></a>
+<span class="sourceLineNo">576</span>            p.replayPrev = readyTail;<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          } else {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>            p.replayPrev = null;<a name="line.578"></a>
+<span class="sourceLineNo">579</span>            readyHead = p;<a name="line.579"></a>
+<span class="sourceLineNo">580</span>          }<a name="line.580"></a>
+<span class="sourceLineNo">581</span>          readyTail = p;<a name="line.581"></a>
+<span class="sourceLineNo">582</span>          p.replayNext = null;<a name="line.582"></a>
+<span class="sourceLineNo">583</span>        }<a name="line.583"></a>
+<span class="sourceLineNo">584</span>        p = next;<a name="line.584"></a>
+<span class="sourceLineNo">585</span>      }<a name="line.585"></a>
+<span class="sourceLineNo">586</span>      // we need the hash-table lookups for parents, so this must be done<a name="line.586"></a>
+<span class="sourceLineNo">587</span>      // out of the loop where we check isReadyToRun()<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      for (p = readyHead; p != null; p = p.replayNext) {<a name="line.588"></a>
+<span class="sourceLineNo">589</span>        removeFromMap(p.getProcId());<a name="line.589"></a>
+<span class="sourceLineNo">590</span>        unlinkFromLinkList(p);<a name="line.590"></a>
+<span class="sourceLineNo">591</span>      }<a name="line.591"></a>
+<span class="sourceLineNo">592</span>      return readyHead != null ? new EntryIterator(readyHead) : null;<a name="line.592"></a>
+<span class="sourceLineNo">593</span>    }<a name="line.593"></a>
+<span class="sourceLineNo">594</span><a name="line.594"></a>
+<span class="sourceLineNo">595</span>    /*<a name="line.595"></a>
+<span class="sourceLineNo">596</span>     * Drain this map and return all procedures in it.<a name="line.596"></a>
+<span class="sourceLineNo">597</span>     */<a name="line.597"></a>
+<span class="sourceLineNo">598</span>    public EntryIterator fetchAll() {<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      Entry head = replayOrderHead;<a name="line.599"></a>
+<span class="sourceLineNo">600</span>      for (Entry p = head; p != null; p = p.replayNext) {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>        removeFromMap(p.getProcId());<a name="line.601"></a>
+<span class="sourceLineNo">602</span>      }<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      for (int i = 0; i &lt; procedureMap.length; ++i) {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>        assert procedureMap[i] == null : "map not empty i=" + i;<a name="line.604"></a>
+<span class="sourceLineNo">605</span>      }<a name="line.605"></a>
+<span class="sourceLineNo">606</span>      replayOrderHead = null;<a name="line.606"></a>
+<span class="sourceLineNo">607</span>      replayOrderTail = null;<a name="line.607"></a>
+<span class="sourceLineNo">608</span>      childUnlinkedHead = null;<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      rootHead = null;<a name="line.609"></a>
+<span class="sourceLineNo">610</span>      return head != null ? new EntryIterator(head) : null;<a name="line.610"></a>
+<span class="sourceLineNo">611</span>    }<a name="line.611"></a>
+<span class="sourceLineNo">612</span><a name="line.612"></a>
+<span class="sourceLineNo">613</span>    private void buildGraph() {<a name="line.613"></a>
+<span class="sourceLineNo">614</span>      Entry p = childUnlinkedHead;<a name="line.614"></a>
+<span class="sourceLineNo">615</span>      while (p != null) {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>        Entry next = p.linkNext;<a name="line.616"></a>
+<span class="sourceLineNo">617</span>        Entry rootProc = getRootProcedure(p);<a name="line.617"></a>
+<span class="sourceLineNo">618</span>        if (rootProc != null) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>          rootProc.childHead = addToLinkList(p, rootProc.childHead);<a name="line.619"></a>
+<span class="sourceLineNo">620</span>        }<a name="line.620"></a>
+<span class="sourceLineNo">621</span>        p = next;<a name="line.621"></a>
+<span class="sourceLineNo">622</span>      }<a name="line.622"></a>
+<span class="sourceLineNo">623</span><a name="line.623"></a>
+<span class="sourceLineNo">624</span>      for (p = rootHead; p != null; p = p.linkNext) {<a name="line.624"></a>
+<span class="sourceLineNo">625</span>        checkReadyToRun(p);<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>    private Entry getRootProcedure(Entry entry) {<a name="line.629"></a>
+<span class="sourceLineNo">630</span>      while (entry != null &amp;&amp; entry.hasParent()) {<a name="line.630"></a>
+<span class="sourceLineNo">631</span>        entry = getProcedure(entry.getParentId());<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      }<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      return entry;<a name="line.633"></a>
+<span class="sourceLineNo">634</span>    }<a name="line.634"></a>
+<span class="sourceLineNo">635</span><a name="line.635"></a>
+<span class="sourceLineNo">636</span>    /*<a name="line.636"></a>
+<span class="sourceLineNo">637</span>     * (see the comprehensive explaination in the beginning of the file)<a name="line.637"></a>
+<span class="sourceLineNo">638</span>     * A Procedure is ready when parent and children are ready.<a name="line.638"></a>
+<span class="sourceLineNo">639</span>     * "ready" means that we all the information that we need in-memory.<a name="line.639"></a>
+<span class="sourceLineNo">640</span>     *<a name="line.640"></a>
+<span class="sourceLineNo">641</span>     * Example-1:<a name="line.641"></a>
+<span class="sourceLineNo">642</span>     * We have two WALs, we start reading fronm the newest (wal-2)<a name="line.642"></a>
+<span class="sourceLineNo">643</span>     *    wal-2 | C B |<a name="line.643"></a>
+<span class="sourceLineNo">644</span>     *    wal-1 | A B C |<a name="line.644"></a>
+<span class="sourceLineNo">645</span>     *<a name="line.645"></a>
+<span class="sourceLineNo">646</span>     * If C and B don't depend on A (A is not the parent), we can start them<a name="line.646"></a>
+<span class="sourceLineNo">647</span>     * before reading wal-1. If B is the only one with parent A we can start C<a name="line.647"></a>
+<span class="sourceLineNo">648</span>     * and read one more WAL before being able to start B.<a name="line.648"></a>
+<span class="sourceLineNo">649</span>     *<a name="line.649"></a>
+<span class="sourceLineNo">650</span>     * How do we know with the only information in B that we are not ready.<a name="line.650"></a>
+<span class="sourceLineNo">651</span>     *  - easy case, the parent is missing from the global map<a name="line.651"></a>
+<span class="sourceLineNo">652</span>     *  - more complex case we look at the Stack IDs<a name="line.652"></a>
+<span class="sourceLineNo">653</span>     *<a name="line.653"></a>
+<span class="sourceLineNo">654</span>     * The Stack-IDs are added to the procedure order as incremental index<a name="line.654"></a>
+<span class="sourceLineNo">655</span>     * tracking how many times that procedure was executed, which is equivalent<a name="line.655"></a>
+<span class="sourceLineNo">656</span>     * at the number of times we wrote the procedure to the WAL.<a name="line.656"></a>
+<span class="sourceLineNo">657</span>     * In the example above:<a name="line.657"></a>
+<span class="sourceLineNo">658</span>     *   wal-2: B has stackId = [1, 2]<a name="line.658"></a>
+<span class="sourceLineNo">659</span>     *   wal-1: B has stackId = [1]<a name="line.659"></a>
+<span class="sourceLineNo">660</span>     *   wal-1: A has stackId = [0]<a name="line.660"></a>
+<span class="sourceLineNo">661</span>     *<a name="line.661"></a>
+<span class="sourceLineNo">662</span>     * Since we know that the Stack-IDs are incremental for a Procedure,<a name="line.662"></a>
+<span class="sourceLineNo">663</span>     * we notice that there is a gap in the stackIds of B, so something was<a name="line.663"></a>
+<span class="sourceLineNo">664</span>     * executed before.<a name="line.664"></a>
+<span class="sourceLineNo">665</span>     * To identify when a Procedure is ready we do the sum of the stackIds of<a name="line.665"></a>
+<span class="sourceLineNo">666</span>     * the procedure and the parent. if the stackIdSum is equals to the<a name="line.666"></a>
+<span class="sourceLineNo">667</span>     * sum of {1..maxStackId} then everything we need is avaiable.<a name="line.667"></a>
+<span class="sourceLineNo">668</span>     *<a name="line.668"></a>
+<span class="sourceLineNo">669</span>     * Example-2<a name="line.669"></a>
+<span class="sourceLineNo">670</span>     *    wal-2 | A |              A stackIds = [0, 2]<a name="line.670"></a>
+<span class="sourceLineNo">671</span>     *    wal-1 | A B |            B stackIds = [1]<a name="line.671"></a>
+<span class="sourceLineNo">672</span>     *<a name="line.672"></a>
+<span class="sourceLineNo">673</span>     * There is a gap between A stackIds so something was executed in between.<a name="line.673"></a>
+<span class="sourceLineNo">674</span>     */<a name="line.674"></a>
+<span class="sourceLineNo">675</span>    private boolean checkReadyToRun(Entry rootEntry) {<a name="line.675"></a>
+<span class="sourceLineNo">676</span>      assert !rootEntry.hasParent() : "expected root procedure, got " + rootEntry;<a name="line.676"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span>      if (rootEntry.isFinished()) {<a name="line.678"></a>
+<span class="sourceLineNo">679</span>        // if the root procedure is finished, sub-procedures should be gone<a name="line.679"></a>
+<span class="sourceLineNo">680</span>        if (rootEntry.childHead != null) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span>          LOG.error("unexpected active children for root-procedure: " + rootEntry);<a name="line.681"></a>
+<span class="sourceLineNo">682</span>          for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>            LOG.error("unexpected active children: " + p);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>          }<a name="line.684"></a>
+<span class="sourceLineNo">685</span>        }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span>        assert rootEntry.childHead == null : "unexpected children on root completion. " + rootEntry;<a name="line.687"></a>
+<span class="sourceLineNo">688</span>        rootEntry.ready = true;<a name="line.688"></a>
+<span class="sourceLineNo">689</span>        return true;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>      }<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span>      int stackIdSum = 0;<a name="line.692"></a>
+<span class="sourceLineNo">693</span>      int maxStackId = 0;<a name="line.693"></a>
+<span class="sourceLineNo">694</span>      for (int i = 0; i &lt; rootEntry.proto.getStackIdCount(); ++i) {<a name="line.694"></a>
+<span class="sourceLineNo">695</span>        int stackId = 1 + rootEntry.proto.getStackId(i);<a name="line.695"></a>
+<span class="sourceLineNo">696</span>        maxStackId  = Math.max(maxStackId, stackId);<a name="line.696"></a>
+<span class="sourceLineNo">697</span>        stackIdSum += stackId;<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>      for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.700"></a>
+<span class="sourceLineNo">701</span>        for (int i = 0; i &lt; p.proto.getStackIdCount(); ++i) {<a name="line.701"></a>
+<span class="sourceLineNo">702</span>          int stackId = 1 + p.proto.getStackId(i);<a name="line.702"></a>
+<span class="sourceLineNo">703</span>          maxStackId  = Math.max(maxStackId, stackId);<a name="line.703"></a>
+<span class="sourceLineNo">704</span>          stackIdSum += stackId;<a name="line.704"></a>
+<span class="sourceLineNo">705</span>        }<a name="line.705"></a>
+<span class="sourceLineNo">706</span>      }<a name="line.706"></a>
+<span class="sourceLineNo">707</span>      final int cmpStackIdSum = (maxStackId * (maxStackId + 1) / 2);<a name="line.707"></a>
+<span class="sourceLineNo">708</span>      if (cmpStackIdSum == stackIdSum) {<a name="line.708"></a>
+<span class="sourceLineNo">709</span>        rootEntry.ready = true;<a name="line.709"></a>
+<span class="sourceLineNo">710</span>        for (Entry p = rootEntry.childHead; p != null; p = p.linkNext) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span>          p.ready = true;<a name="line.711"></a>
+<span class="sourceLineNo">712</span>        }<a name="line.712"></a>
+<span class="sourceLineNo">713</span>        return true;<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      }<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      return false;<a name="line.715"></a>
+<span class="sourceLineNo">716</span>    }<a name="line.716"></a>
+<span class="sourceLineNo">717</span><a name="line.717"></a>
+<span class="sourceLineNo">718</span>    private void unlinkFromReplayList(Entry entry) {<a name="line.718"></a>
+<span class="sourceLineNo">719</span>      if (replayOrderHead == entry) {<a name="line.719"></a>
+<span class="sourceLineNo">720</span>        replayOrderHead = entry.replayNext;<a name="line.720"></a>
+<span class="sourceLineNo">721</span>      }<a name="line.721"></a>
+<span class="sourceLineNo">722</span>      if (replayOrderTail == entry) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>        replayOrderTail = entry.replayPrev;<a name="line.723"></a>
+<span class="sourceLineNo">724</span>      }<a name="line.724"></a>
+<span class="sourceLineNo">725</span>      if (entry.replayPrev != null) {<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        entry.replayPrev.replayNext = entry.replayNext;<a name="line.726"></a>
+<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
+<span class="sourceLineNo">728</span>      if (entry.replayNext != null) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span>        entry.replayNext.replayPrev = entry.replayPrev;<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
+<span class="sourceLineNo">731</span>    }<a name="line.731"></a>
+<span class="sourceLineNo">732</span><a name="line.732"></a>
+<span class="sourceLineNo">733</span>    private void addToReplayList(final Entry entry) {<a name="line.733"></a>
+<span class="sourceLineNo">734</span>      unlinkFromReplayList(entry);<a name="line.734"></a>
+<span class="sourceLineNo">735</span>      entry.replayNext = replayOrderHead;<a name="line.735"></a>
+<span class="sourceLineNo">736</span>      entry.replayPrev = null;<a name="line.736"></a>
+<span class="sourceLineNo">737</span>      if (replayOrderHead != null) {<a name="line.737"></a>
+<span class="sourceLineNo">738</span>        replayOrderHead.replayPrev = entry;<a name="line.738"></a>
+<span class="sourceLineNo">739</span>      } else {<a name="line.739"></a>
+<span class="sourceLineNo">740</span>        replayOrderTail = entry;<a name="line.740"></a>
+<span class="sourceLineNo">741</span>      }<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      replayOrderHead = entry;<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    }<a name="line.743"></a>
+<span class="sourceLineNo">744</span><a name="line.744"></a>
+<span class="sourceLineNo">745</span>    private void unlinkFromLinkList(Entry entry) {<a name="line.745"></a>
+<span class="sourceLineNo">746</span>      if (entry == rootHead) {<a name="line.746"></a>
+<span class="sourceLineNo">747</span>        rootHead = entry.linkNext;<a name="line.747"></a>
+<span class="sourceLineNo">748</span>      } else if (entry == childUnlinkedHead) {<a name="line.748"></a>
+<span class="sourceLineNo">749</span>        childUnlinkedHead = entry.linkNext;<a name="line.749"></a>
+<span class="sourceLineNo">750</span>      }<a name="line.750"></a>
+<span class="sourceLineNo">751</span>      if (entry.linkPrev != null) {<a name="line.751"></a>
+<span class="sourceLineNo">752</span>        entry.linkPrev.linkNext = entry.linkNext;<a name="line.752"></a>
+<span class="sourceLineNo">753</span>      }<a name="line.753"></a>
+<span class="sourceLineNo">754</span>      if (entry.linkNext != null) {<a name="line.754"></a>
+<span class="sourceLineNo">755</span>        entry.linkNext.linkPrev = entry.linkPrev;<a name="line.755"></a>
+<span class="sourceLineNo">756</span>      }<a name="line.756"></a>
+<span class="sourceLineNo">757</span>    }<a name="line.757"></a>
+<span class="sourceLineNo">758</span><a name="line.758"></a>
+<span class="sourceLineNo">759</span>    private Entry addToLinkList(Entry entry, Entry linkHead) {<a name="line.759"></a>
+<span class="sourceLineNo">760</span>      unlinkFromLinkList(entry);<a name="line.760"></a>
+<span class="sourceLineNo">761</span>      entry.linkNext = linkHead;<a name="line.761"></a>
+<span class="sourceLineNo">762</span>      entry.linkPrev = null;<a name="line.762"></a>
+<span class="sourceLineNo">763</span>      if (linkHead != null) {<a name="line.763"></a>
+<span class="sourceLineNo">764</span>        linkHead.linkPrev = entry;<a name="line.764"></a>
+<span class="sourceLineNo">765</span>      }<a name="line.765"></a>
+<span class="sourceLineNo">766</span>      return entry;<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    }<a name="line.767"></a>
+<span class="sourceLineNo">768</span><a name="line.768"></a>
+<span class="sourceLineNo">769</span>    private Entry findLinkListTail(Entry linkHead) {<a name="line.769"></a>
+<span class="sourceLineNo">770</span>      Entry tail = linkHead;<a name="line.770"></a>
+<span class="sourceLineNo">771</span>      while (tail.linkNext != null) {<a name="line.771"></a>
+<span class="sourceLineNo">772</span>        tail = tail.linkNext;<a name="line.772"></a>
+<span class="sourceLineNo">773</span>      }<a name="line.773"></a>
+<span class="sourceLineNo">774</span>      return tail;<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    }<a name="line.775"></a>
+<span class="sourceLineNo">776</span><a name="line.776"></a>
+<span class="sourceLineNo">777</span>    private Entry addToMap(final long procId, final boolean hasParent) {<a name="line.777"></a>
+<span class="sourceLineNo">778</span>      int slotIndex = getMapSlot(procId);<a name="line.778"></a>
+<span class="sourceLineNo">779</span>      Entry entry = getProcedure(slotIndex, procId);<a name="line.779"></a>
+<span class="sourceLineNo">780</span>      if (entry != null) return entry;<a name="line.780"></a>
+<span class="sourceLineNo">781</span><a name="line.781"></a>
+<span class="sourceLineNo">782</span>      entry = new Entry(procedureMap[slotIndex]);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>      procedureMap[slotIndex] = entry;<a name="line.783"></a>
+<span class="sourceLineNo">784</span>      return entry;<a name="line.784"></a>
+<span class="sourceLineNo">785</span>    }<a name="line.785"></a>
+<span class="sourceLineNo">786</span><a name="line.786"></a>
+<span class="sourceLineNo">787</span>    private Entry rem

<TRUNCATED>

[23/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index ea1372d..c64c838 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -26,7 +26,7 @@ under the License.
     <copyright>&#169;2007 - 2017 The Apache Software Foundation</copyright>
     <item>
       <title>File: 2145,
-             Errors: 14243,
+             Errors: 14244,
              Warnings: 0,
              Infos: 0
       </title>
@@ -15329,7 +15329,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  3
+                  4
                 </td>
               </tr>
                           <tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index baf8760..605405d 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3775,21 +3775,21 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://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>"Thu Apr  6 19:09:43 UTC 2017"</code></td>
+<td class="colLast"><code>"Thu Apr  6 19:39:38 UTC 2017"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#revision">revision</a></code></td>
-<td class="colLast"><code>"ec5188df3090d42088b6f4cb8f0c2fd49425f8c1"</code></td>
+<td class="colLast"><code>"9109803891e256f8c047af72572f07695e604a3f"</code></td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.srcChecksum">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://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>"94c3021046b3fe0722ae960aa2896c3a"</code></td>
+<td class="colLast"><code>"af28e08995ce91fe0c9b2e749adfbd6b"</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/ddcd3ebf/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index ebd9a01..f6eb818 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -55681,8 +55681,6 @@
 <dd>
 <div class="block">Check if the entire procedure has globally completed, or has been aborted.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#isCompleted--">isCompleted()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html#isCompleted--">isCompleted()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/bucket/BucketAllocator.Bucket.html#isCompletelyFree--">isCompletelyFree()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="org/apache/hadoop/hbase/io/hfile/bucket/BucketAllocator.Bucket.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketAllocator.Bucket</a></dt>
@@ -56131,6 +56129,8 @@
 <dd>
 <div class="block">Return true if the procedure is finished.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html#isFinished--">isFinished()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.Entry.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.Entry</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/filter/GZIPRequestStream.html#isFinished--">isFinished()</a></span> - Method in class org.apache.hadoop.hbase.rest.filter.<a href="org/apache/hadoop/hbase/rest/filter/GZIPRequestStream.html" title="class in org.apache.hadoop.hbase.rest.filter">GZIPRequestStream</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/encoding/CompressionState.html#isFirst--">isFirst()</a></span> - Method in class org.apache.hadoop.hbase.io.encoding.<a href="org/apache/hadoop/hbase/io/encoding/CompressionState.html" title="class in org.apache.hadoop.hbase.io.encoding">CompressionState</a></dt>
@@ -56652,9 +56652,9 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.HFileScannerImpl.html#isNextBlock--">isNextBlock()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.HFileScannerImpl.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl.HFileScannerImpl</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#isNextCompleted--">isNextCompleted()</a></span> - Method in interface org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html#isNextFinished--">isNextFinished()</a></span> - Method in interface org.apache.hadoop.hbase.procedure2.store.<a href="org/apache/hadoop/hbase/procedure2/store/ProcedureStore.ProcedureIterator.html" title="interface in org.apache.hadoop.hbase.procedure2.store">ProcedureStore.ProcedureIterator</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#isNextCompleted--">isNextCompleted()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html#isNextFinished--">isNextFinished()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.EntryIterator.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.EntryIterator</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HTableDescriptor.html#isNormalizationEnabled--">isNormalizationEnabled()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></dt>
 <dd>
@@ -57937,7 +57937,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/Procedure.html#isYieldAfterExecutionStep-TEnvironment-">isYieldAfterExecutionStep(TEnvironment)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></dt>
 <dd>
-<div class="block">By default, the executor will try ro run procedures start to finish.</div>
+<div class="block">By default, the executor will try to run procedures start to finish.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#isYieldAfterExecutionStep-TEnvironment-">isYieldAfterExecutionStep(TEnvironment)</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">StateMachineProcedure</a></dt>
 <dd>&nbsp;</dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/ProcedureState.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ProcedureState.html b/devapidocs/org/apache/hadoop/hbase/ProcedureState.html
index 772dfbb..ed2fdf1 100644
--- a/devapidocs/org/apache/hadoop/hbase/ProcedureState.html
+++ b/devapidocs/org/apache/hadoop/hbase/ProcedureState.html
@@ -140,7 +140,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is
 <th class="colOne" scope="col">Enum Constant and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ProcedureState.html#FINISHED">FINISHED</a></span></code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ProcedureState.html#FAILED">FAILED</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ProcedureState.html#INITIALIZING">INITIALIZING</a></span></code>&nbsp;</td>
@@ -152,9 +152,12 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ProcedureState.html#RUNNABLE">RUNNABLE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ProcedureState.html#WAITING">WAITING</a></span></code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ProcedureState.html#SUCCESS">SUCCESS</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ProcedureState.html#WAITING">WAITING</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colOne"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/ProcedureState.html#WAITING_TIMEOUT">WAITING_TIMEOUT</a></span></code>&nbsp;</td>
 </tr>
 </table>
@@ -259,13 +262,22 @@ the order they are declared.</div>
 <pre>public static final&nbsp;<a href="../../../../org/apache/hadoop/hbase/ProcedureState.html" title="enum in org.apache.hadoop.hbase">ProcedureState</a> <a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureState.html#line.27">ROLLEDBACK</a></pre>
 </li>
 </ul>
-<a name="FINISHED">
+<a name="SUCCESS">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>SUCCESS</h4>
+<pre>public static final&nbsp;<a href="../../../../org/apache/hadoop/hbase/ProcedureState.html" title="enum in org.apache.hadoop.hbase">ProcedureState</a> <a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureState.html#line.27">SUCCESS</a></pre>
+</li>
+</ul>
+<a name="FAILED">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>FINISHED</h4>
-<pre>public static final&nbsp;<a href="../../../../org/apache/hadoop/hbase/ProcedureState.html" title="enum in org.apache.hadoop.hbase">ProcedureState</a> <a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureState.html#line.27">FINISHED</a></pre>
+<h4>FAILED</h4>
+<pre>public static final&nbsp;<a href="../../../../org/apache/hadoop/hbase/ProcedureState.html" title="enum in org.apache.hadoop.hbase">ProcedureState</a> <a href="../../../../src-html/org/apache/hadoop/hbase/ProcedureState.html#line.27">FAILED</a></pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 52166f6..7908e83 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -165,10 +165,10 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html b/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html
index ef8c3ea..8f61464 100644
--- a/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html
@@ -88,12 +88,12 @@
 </ul>
 <h2 title="Annotation Type Hierarchy">Annotation Type Hierarchy</h2>
 <ul>
-<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="typeNameLink">InterfaceAudience.Private</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Stable.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="typeNameLink">InterfaceStability.Stable</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Unstable.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="typeNameLink">InterfaceStability.Unstable</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Public.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="typeNameLink">InterfaceAudience.Public</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Evolving.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="typeNameLink">InterfaceStability.Evolving</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Stable.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="typeNameLink">InterfaceStability.Stable</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.LimitedPrivate.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="typeNameLink">InterfaceAudience.LimitedPrivate</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Evolving.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="typeNameLink">InterfaceStability.Evolving</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Public.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="typeNameLink">InterfaceAudience.Public</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="typeNameLink">InterfaceAudience.Private</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 </ul>
 </div>
 <!-- ======= START OF BOTTOM NAVBAR ====== -->

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index f9c704b..5288f5a 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -514,25 +514,25 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.ReplicationState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">HBaseAdmin.ReplicationState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.ReplicationState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">HBaseAdmin.ReplicationState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
index 98fe2a3..96f0b14 100644
--- a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
@@ -104,8 +104,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">ExecutorType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/EventType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">EventType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">ExecutorType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index 048581e..d873f60 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -175,14 +175,14 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">CompareFilter.CompareOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">CompareFilter.CompareOp</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index 8832747..1d3b48b 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -274,10 +274,10 @@
 <li type="circle">java.lang.<a href="http://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="http://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="http://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/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheConfig.ExternalBlockCaches</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
index 07cb975..6275773 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -326,8 +326,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
index 2a07d75..41fd636 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -281,10 +281,10 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index 45667b1..fdfd436 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -322,11 +322,11 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index 445c941..232894a 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -422,16 +422,16 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://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/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ProcedureState.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ProcedureState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.Modify.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.Modify</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ProcedureState.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ProcedureState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/procedure2/Procedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/Procedure.html b/devapidocs/org/apache/hadoop/hbase/procedure2/Procedure.html
index a66897c..e4ec821 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/Procedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/Procedure.html
@@ -496,7 +496,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparabl
 <tr id="i46" class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#isYieldAfterExecutionStep-TEnvironment-">isYieldAfterExecutionStep</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</code>
-<div class="block">By default, the executor will try ro run procedures start to finish.</div>
+<div class="block">By default, the executor will try to run procedures start to finish.</div>
 </td>
 </tr>
 <tr id="i47" class="rowColor">
@@ -1091,9 +1091,9 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparabl
 <li class="blockList">
 <h4>isYieldAfterExecutionStep</h4>
 <pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.226">isYieldAfterExecutionStep</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</pre>
-<div class="block">By default, the executor will try ro run procedures start to finish.
+<div class="block">By default, the executor will try to run procedures start to finish.
  Return true to make the executor yield between each execution step to
- give other procedures time to run their steps.</div>
+ give other procedures a chance to run.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>env</code> - the environment passed to the ProcedureExecutor</dd>
@@ -1478,7 +1478,7 @@ protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>isRunnable</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.511">isRunnable</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.530">isRunnable</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if the procedure is in a RUNNABLE state.</dd>
@@ -1491,7 +1491,7 @@ protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>isInitializing</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.515">isInitializing</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.534">isInitializing</a>()</pre>
 </li>
 </ul>
 <a name="isFailed--">
@@ -1500,11 +1500,10 @@ protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>isFailed</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.523">isFailed</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.541">isFailed</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>true if the procedure has failed.
-         true may mean failed but not yet rolledback or failed and rolledback.</dd>
+<dd>true if the procedure has failed. It may or may not have rolled back.</dd>
 </dl>
 </li>
 </ul>
@@ -1514,7 +1513,7 @@ protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>isSuccess</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.530">isSuccess</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.548">isSuccess</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if the procedure is finished successfully.</dd>
@@ -1527,11 +1526,11 @@ protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>isFinished</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.538">isFinished</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.556">isFinished</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>true if the procedure is finished. The Procedure may be completed
-         successfuly or failed and rolledback.</dd>
+<dd>true if the procedure is finished. The Procedure may be completed successfully or
+ rolledback.</dd>
 </dl>
 </li>
 </ul>
@@ -1541,7 +1540,7 @@ protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>isWaiting</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.553">isWaiting</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.563">isWaiting</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if the procedure is waiting for a child to finish or for an external event.</dd>
@@ -1555,7 +1554,7 @@ protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>setState</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.566">setState</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState&nbsp;state)</pre>
+protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.576">setState</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState&nbsp;state)</pre>
 </li>
 </ul>
 <a name="getState--">
@@ -1565,7 +1564,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>getState</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.572">getState</a>()</pre>
+protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.ProcedureState&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.582">getState</a>()</pre>
 </li>
 </ul>
 <a name="setFailure-java.lang.String-java.lang.Throwable-">
@@ -1574,7 +1573,7 @@ protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos
 <ul class="blockList">
 <li class="blockList">
 <h4>setFailure</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.576">setFailure</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;source,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.586">setFailure</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;source,
                           <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cause)</pre>
 </li>
 </ul>
@@ -1584,7 +1583,7 @@ protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos
 <ul class="blockList">
 <li class="blockList">
 <h4>setFailure</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.580">setFailure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureException</a>&nbsp;exception)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.590">setFailure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureException</a>&nbsp;exception)</pre>
 </li>
 </ul>
 <a name="setAbortFailure-java.lang.String-java.lang.String-">
@@ -1593,7 +1592,7 @@ protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos
 <ul class="blockList">
 <li class="blockList">
 <h4>setAbortFailure</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.587">setAbortFailure</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;source,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.597">setAbortFailure</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;source,
                                <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
 </li>
 </ul>
@@ -1605,7 +1604,7 @@ protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos
 <ul class="blockList">
 <li class="blockList">
 <h4>setTimeoutFailure</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.596">setTimeoutFailure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.606">setTimeoutFailure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</pre>
 <div class="block">Called by the ProcedureExecutor when the timeout set by setTimeout() is expired.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1620,7 +1619,7 @@ protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos
 <ul class="blockList">
 <li class="blockList">
 <h4>hasException</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.606">hasException</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.616">hasException</a>()</pre>
 </li>
 </ul>
 <a name="getException--">
@@ -1629,7 +1628,7 @@ protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos
 <ul class="blockList">
 <li class="blockList">
 <h4>getException</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureException</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.610">getException</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureException</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.620">getException</a>()</pre>
 </li>
 </ul>
 <a name="setChildrenLatch-int-">
@@ -1639,7 +1638,7 @@ protected&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos
 <li class="blockList">
 <h4>setChildrenLatch</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.618">setChildrenLatch</a>(int&nbsp;numChildren)</pre>
+protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.628">setChildrenLatch</a>(int&nbsp;numChildren)</pre>
 <div class="block">Called by the ProcedureExecutor on procedure-load to restore the latch state</div>
 </li>
 </ul>
@@ -1650,7 +1649,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>incChildrenLatch</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.626">incChildrenLatch</a>()</pre>
+protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.636">incChildrenLatch</a>()</pre>
 <div class="block">Called by the ProcedureExecutor on procedure-load to restore the latch state</div>
 </li>
 </ul>
@@ -1661,7 +1660,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>childrenCountDown</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.635">childrenCountDown</a>()</pre>
+protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.645">childrenCountDown</a>()</pre>
 <div class="block">Called by the ProcedureExecutor to notify that one of the sub-procedures has completed.</div>
 </li>
 </ul>
@@ -1672,7 +1671,7 @@ protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/h
 <li class="blockList">
 <h4>hasChildren</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.641">hasChildren</a>()</pre>
+protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.651">hasChildren</a>()</pre>
 </li>
 </ul>
 <a name="getChildrenLatch--">
@@ -1682,7 +1681,7 @@ protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/h
 <li class="blockList">
 <h4>getChildrenLatch</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.646">getChildrenLatch</a>()</pre>
+protected&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.656">getChildrenLatch</a>()</pre>
 </li>
 </ul>
 <a name="addStackIndex-int-">
@@ -1692,7 +1691,7 @@ protected&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase
 <li class="blockList">
 <h4>addStackIndex</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.655">addStackIndex</a>(int&nbsp;index)</pre>
+protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.665">addStackIndex</a>(int&nbsp;index)</pre>
 <div class="block">Called by the RootProcedureState on procedure execution.
  Each procedure store its stack-index positions.</div>
 </li>
@@ -1704,7 +1703,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>removeStackIndex</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.666">removeStackIndex</a>()</pre>
+protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.676">removeStackIndex</a>()</pre>
 </li>
 </ul>
 <a name="setStackIndexes-java.util.List-">
@@ -1714,7 +1713,7 @@ protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/h
 <li class="blockList">
 <h4>setStackIndexes</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.681">setStackIndexes</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;stackIndexes)</pre>
+protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.691">setStackIndexes</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;stackIndexes)</pre>
 <div class="block">Called on store load to initialize the Procedure internals after
  the creation/deserialization.</div>
 </li>
@@ -1726,7 +1725,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>wasExecuted</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.689">wasExecuted</a>()</pre>
+protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.699">wasExecuted</a>()</pre>
 </li>
 </ul>
 <a name="getStackIndexes--">
@@ -1736,7 +1735,7 @@ protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/h
 <li class="blockList">
 <h4>getStackIndexes</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;int[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.694">getStackIndexes</a>()</pre>
+protected&nbsp;int[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.704">getStackIndexes</a>()</pre>
 </li>
 </ul>
 <a name="doExecute-java.lang.Object-">
@@ -1748,7 +1747,7 @@ protected&nbsp;int[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hba
 <li class="blockList">
 <h4>doExecute</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.706">doExecute</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)
+protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.716">doExecute</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)
                                                     throws <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureYieldException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureYieldException</a>,
                                                            <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a>,
                                                            <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -1770,7 +1769,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Proced
 <li class="blockList">
 <h4>doRollback</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.720">doRollback</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)
+protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.730">doRollback</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)
                                               throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                                      <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Internal method called by the ProcedureExecutor that starts the user-level code rollback().</div>
@@ -1790,7 +1789,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>doAcquireLock</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.734">doAcquireLock</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</pre>
+protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.744">doAcquireLock</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</pre>
 <div class="block">Internal method called by the ProcedureExecutor that starts the user-level code acquireLock().</div>
 </li>
 </ul>
@@ -1803,7 +1802,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Proced
 <li class="blockList">
 <h4>doReleaseLock</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.742">doReleaseLock</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</pre>
+protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.752">doReleaseLock</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="type parameter in Procedure">TEnvironment</a>&nbsp;env)</pre>
 <div class="block">Internal method called by the ProcedureExecutor that starts the user-level code releaseLock().</div>
 </li>
 </ul>
@@ -1813,7 +1812,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTo</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.747">compareTo</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;other)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.757">compareTo</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;other)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true#compareTo-T-" title="class or interface in java.lang">compareTo</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&gt;</code></dd>
@@ -1826,7 +1825,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcIdHashCode</h4>
-<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.759">getProcIdHashCode</a>(long&nbsp;procId)</pre>
+<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.769">getProcIdHashCode</a>(long&nbsp;procId)</pre>
 <div class="block">Get an hashcode for the specified Procedure ID</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1841,7 +1840,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>getRootProcedureId</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-protected static&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.773">getRootProcedureId</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&gt;&nbsp;procedures,
+protected static&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.783">getRootProcedureId</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&gt;&nbsp;procedures,
                                                                     <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;proc)</pre>
 </li>
 </ul>
@@ -1851,7 +1850,7 @@ protected static&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lan
 <ul class="blockListLast">
 <li class="blockList">
 <h4>haveSameParent</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.786">haveSameParent</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;a,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/Procedure.html#line.796">haveSameParent</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;a,
                                      <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;b)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.DelayedProcedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.DelayedProcedure.html b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.DelayedProcedure.html
index 04c9e04..86ffeb0 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.DelayedProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.DelayedProcedure.html
@@ -126,7 +126,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1710">ProcedureExecutor.DelayedProcedure</a>
+<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1708">ProcedureExecutor.DelayedProcedure</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/util/DelayedUtil.DelayedContainerWithTimestamp.html" title="class in org.apache.hadoop.hbase.procedure2.util">DelayedUtil.DelayedContainerWithTimestamp</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&gt;</pre>
 </li>
 </ul>
@@ -205,7 +205,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/util/DelayedU
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DelayedProcedure</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.DelayedProcedure.html#line.1712">DelayedProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;procedure)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.DelayedProcedure.html#line.1710">DelayedProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>&nbsp;procedure)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html
index 7277499..c0f5943 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html
@@ -126,7 +126,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1744">ProcedureExecutor.InlineChore</a>
+<pre>private abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1742">ProcedureExecutor.InlineChore</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/util/DelayedUtil.DelayedObject.html" title="class in org.apache.hadoop.hbase.procedure2.util">DelayedUtil.DelayedObject</a>
 implements <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></pre>
 </li>
@@ -239,7 +239,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>timeout</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html#line.1745">timeout</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html#line.1743">timeout</a></pre>
 </li>
 </ul>
 </li>
@@ -256,7 +256,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>InlineChore</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html#line.1744">InlineChore</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html#line.1742">InlineChore</a>()</pre>
 </li>
 </ul>
 </li>
@@ -273,7 +273,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>getTimeoutInterval</h4>
-<pre>public abstract&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html#line.1747">getTimeoutInterval</a>()</pre>
+<pre>public abstract&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html#line.1745">getTimeoutInterval</a>()</pre>
 </li>
 </ul>
 <a name="refreshTimeout--">
@@ -282,7 +282,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshTimeout</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html#line.1749">refreshTimeout</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html#line.1747">refreshTimeout</a>()</pre>
 </li>
 </ul>
 <a name="getTimeout--">
@@ -291,7 +291,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getTimeout</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html#line.1754">getTimeout</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html#line.1752">getTimeout</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/procedure2/util/DelayedUtil.DelayedWithTimeout.html#getTimeout--">getTimeout</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/util/DelayedUtil.DelayedWithTimeout.html" title="interface in org.apache.hadoop.hbase.procedure2.util">DelayedUtil.DelayedWithTimeout</a></code></dd>


[14/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html
index 35cebd9..b6b4cb6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html
@@ -321,7 +321,7 @@
 <span class="sourceLineNo">313</span>      final NonceKey nonceKey;<a name="line.313"></a>
 <span class="sourceLineNo">314</span>      final long procId;<a name="line.314"></a>
 <span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>      if (procIter.isNextCompleted()) {<a name="line.316"></a>
+<span class="sourceLineNo">316</span>      if (procIter.isNextFinished()) {<a name="line.316"></a>
 <span class="sourceLineNo">317</span>        ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.317"></a>
 <span class="sourceLineNo">318</span>        nonceKey = proc.getNonceKey();<a name="line.318"></a>
 <span class="sourceLineNo">319</span>        procId = proc.getProcId();<a name="line.319"></a>
@@ -359,7 +359,7 @@
 <span class="sourceLineNo">351</span>    HashSet&lt;Procedure&gt; waitingSet = null;<a name="line.351"></a>
 <span class="sourceLineNo">352</span>    procIter.reset();<a name="line.352"></a>
 <span class="sourceLineNo">353</span>    while (procIter.hasNext()) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (procIter.isNextCompleted()) {<a name="line.354"></a>
+<span class="sourceLineNo">354</span>      if (procIter.isNextFinished()) {<a name="line.354"></a>
 <span class="sourceLineNo">355</span>        procIter.skipNext();<a name="line.355"></a>
 <span class="sourceLineNo">356</span>        continue;<a name="line.356"></a>
 <span class="sourceLineNo">357</span>      }<a name="line.357"></a>
@@ -405,1450 +405,1448 @@
 <span class="sourceLineNo">397</span>          }<a name="line.397"></a>
 <span class="sourceLineNo">398</span>          waitingSet.add(proc);<a name="line.398"></a>
 <span class="sourceLineNo">399</span>          break;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        case FINISHED:<a name="line.400"></a>
-<span class="sourceLineNo">401</span>          if (proc.hasException()) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>            // add the proc to the scheduler to perform the rollback<a name="line.402"></a>
-<span class="sourceLineNo">403</span>            scheduler.addBack(proc);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          }<a name="line.404"></a>
-<span class="sourceLineNo">405</span>          break;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        case ROLLEDBACK:<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        case INITIALIZING:<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          LOG.error(msg);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          throw new UnsupportedOperationException(msg);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        default:<a name="line.411"></a>
-<span class="sourceLineNo">412</span>          break;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      }<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    // 3. Validate the stacks<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    int corruptedCount = 0;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    while (itStack.hasNext()) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      RootProcedureState procStack = entry.getValue();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      if (procStack.isValid()) continue;<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>      for (Procedure proc: procStack.getSubproceduresStack()) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        LOG.error("Corrupted " + proc);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        procedures.remove(proc.getProcId());<a name="line.426"></a>
-<span class="sourceLineNo">427</span>        runnableList.remove(proc);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        corruptedCount++;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      }<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      itStack.remove();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    // 4. Push the procedures to the timeout executor<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    if (waitingSet != null &amp;&amp; !waitingSet.isEmpty()) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      for (Procedure proc: waitingSet) {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        proc.afterReplay(getEnvironment());<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        timeoutExecutor.add(proc);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      }<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    }<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>    // 5. Push the procedure to the scheduler<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    if (!runnableList.isEmpty()) {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      // some procedure may be started way before this stuff.<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        Procedure proc = runnableList.get(i);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        proc.afterReplay(getEnvironment());<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        if (!proc.hasParent()) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        }<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        if (proc.wasExecuted()) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>          scheduler.addFront(proc);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        } else {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          // if it was not in execution, it can wait.<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          scheduler.addBack(proc);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        }<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    }<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>   * Start the procedure executor.<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   *<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * @param numThreads number of threads available for procedure execution.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   */<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    if (running.getAndSet(true)) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      LOG.warn("Already running");<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      return;<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>    // We have numThreads executor + one timer thread used for timing out<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    // procedures and triggering periodic procedures.<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    this.corePoolSize = numThreads;<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    LOG.info("Starting executor worker threads=" + corePoolSize);<a name="line.485"></a>
-<span class="sourceLineNo">486</span><a name="line.486"></a>
-<span class="sourceLineNo">487</span>    // Create the Thread Group for the executors<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    threadGroup = new ThreadGroup("ProcedureExecutor");<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>    // Create the timeout executor<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    timeoutExecutor = new TimeoutExecutorThread(threadGroup);<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>    // Create the workers<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    workerId.set(0);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    workerThreads = new CopyOnWriteArrayList&lt;&gt;();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    for (int i = 0; i &lt; corePoolSize; ++i) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      workerThreads.add(new WorkerThread(threadGroup));<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
+<span class="sourceLineNo">400</span>        case FAILED:<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          // add the proc to the scheduler to perform the rollback<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          scheduler.addBack(proc);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          break;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        case ROLLEDBACK:<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        case INITIALIZING:<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.406"></a>
+<span class="sourceLineNo">407</span>          LOG.error(msg);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>          throw new UnsupportedOperationException(msg);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        default:<a name="line.409"></a>
+<span class="sourceLineNo">410</span>          break;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    // 3. Validate the stacks<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    int corruptedCount = 0;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    while (itStack.hasNext()) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      RootProcedureState procStack = entry.getValue();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      if (procStack.isValid()) continue;<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span>      for (Procedure proc: procStack.getSubproceduresStack()) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        LOG.error("Corrupted " + proc);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        procedures.remove(proc.getProcId());<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        runnableList.remove(proc);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        corruptedCount++;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>      }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      itStack.remove();<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    }<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<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>    // 4. Push the procedures to the timeout executor<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    if (waitingSet != null &amp;&amp; !waitingSet.isEmpty()) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      for (Procedure proc: waitingSet) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        proc.afterReplay(getEnvironment());<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        timeoutExecutor.add(proc);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      }<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span>    // 5. Push the procedure to the scheduler<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    if (!runnableList.isEmpty()) {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      // some procedure may be started way before this stuff.<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>        Procedure proc = runnableList.get(i);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        proc.afterReplay(getEnvironment());<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        if (!proc.hasParent()) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        }<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        if (proc.wasExecuted()) {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          scheduler.addFront(proc);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>        } else {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          // if it was not in execution, it can wait.<a name="line.457"></a>
+<span class="sourceLineNo">458</span>          scheduler.addBack(proc);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      }<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  }<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>   * Start the procedure executor.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   *<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @param numThreads number of threads available for procedure execution.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   */<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    if (running.getAndSet(true)) {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      LOG.warn("Already running");<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      return;<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span><a name="line.479"></a>
+<span class="sourceLineNo">480</span>    // We have numThreads executor + one timer thread used for timing out<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    // procedures and triggering periodic procedures.<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    this.corePoolSize = numThreads;<a name="line.482"></a>
+<span class="sourceLineNo">483</span>    LOG.info("Starting executor worker threads=" + corePoolSize);<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // Create the Thread Group for the executors<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    threadGroup = new ThreadGroup("ProcedureExecutor");<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>    // Create the timeout executor<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    timeoutExecutor = new TimeoutExecutorThread(threadGroup);<a name="line.489"></a>
+<span class="sourceLineNo">490</span><a name="line.490"></a>
+<span class="sourceLineNo">491</span>    // Create the workers<a name="line.491"></a>
+<span class="sourceLineNo">492</span>    workerId.set(0);<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    workerThreads = new CopyOnWriteArrayList&lt;&gt;();<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    for (int i = 0; i &lt; corePoolSize; ++i) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      workerThreads.add(new WorkerThread(threadGroup));<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    }<a name="line.496"></a>
+<span class="sourceLineNo">497</span><a name="line.497"></a>
+<span class="sourceLineNo">498</span>    long st, et;<a name="line.498"></a>
 <span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>    long st, et;<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>    // Acquire the store lease.<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    store.recoverLease();<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    LOG.info(String.format("Recover store (%s) lease: %s",<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.507"></a>
-<span class="sourceLineNo">508</span><a name="line.508"></a>
-<span class="sourceLineNo">509</span>    // start the procedure scheduler<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    scheduler.start();<a name="line.510"></a>
-<span class="sourceLineNo">511</span><a name="line.511"></a>
-<span class="sourceLineNo">512</span>    // TODO: Split in two steps.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    // The first one will make sure that we have the latest id,<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    // so we can start the threads and accept new procedures.<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    // The second step will do the actual load of old procedures.<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    load(abortOnCorruption);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    LOG.info(String.format("Load store (%s): %s",<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (LOG.isTraceEnabled()) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.trace("Start workers " + workerThreads.size());<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    timeoutExecutor.start();<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    for (WorkerThread worker: workerThreads) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      worker.start();<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    // Internal chores<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    timeoutExecutor.add(new WorkerMonitor());<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>    // Add completed cleaner chore<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    addChore(new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  public void stop() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    if (!running.getAndSet(false)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>      return;<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>    LOG.info("Stopping");<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    scheduler.stop();<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    timeoutExecutor.sendStopSignal();<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  @VisibleForTesting<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  public void join() {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    assert !isRunning() : "expected not running";<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>    // stop the timeout executor<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    timeoutExecutor.awaitTermination();<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    timeoutExecutor = null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>    // stop the worker threads<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    for (WorkerThread worker: workerThreads) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      worker.awaitTermination();<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    workerThreads = null;<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    // Destroy the Thread Group for the executors<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    try {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      threadGroup.destroy();<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    } catch (IllegalThreadStateException e) {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      LOG.error("Thread group " + threadGroup + " contains running threads");<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      threadGroup.list();<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    } finally {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      threadGroup = null;<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>    // reset the in-memory state for testing<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    completed.clear();<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    rollbackStack.clear();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    procedures.clear();<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    nonceKeysToProcIdsMap.clear();<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    scheduler.clear();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    lastProcId.set(-1);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  }<a name="line.580"></a>
-<span class="sourceLineNo">581</span><a name="line.581"></a>
-<span class="sourceLineNo">582</span>  public void refreshConfiguration(final Configuration conf) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    this.conf = conf;<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  }<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
+<span class="sourceLineNo">500</span>    // Acquire the store lease.<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    store.recoverLease();<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    LOG.info(String.format("Recover store (%s) lease: %s",<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.505"></a>
+<span class="sourceLineNo">506</span><a name="line.506"></a>
+<span class="sourceLineNo">507</span>    // start the procedure scheduler<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    scheduler.start();<a name="line.508"></a>
+<span class="sourceLineNo">509</span><a name="line.509"></a>
+<span class="sourceLineNo">510</span>    // TODO: Split in two steps.<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    // The first one will make sure that we have the latest id,<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    // so we can start the threads and accept new procedures.<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    // The second step will do the actual load of old procedures.<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    load(abortOnCorruption);<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.517"></a>
+<span class="sourceLineNo">518</span>    LOG.info(String.format("Load store (%s): %s",<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    if (LOG.isTraceEnabled()) {<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      LOG.trace("Start workers " + workerThreads.size());<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    timeoutExecutor.start();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    for (WorkerThread worker: workerThreads) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      worker.start();<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
+<span class="sourceLineNo">529</span><a name="line.529"></a>
+<span class="sourceLineNo">530</span>    // Internal chores<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    timeoutExecutor.add(new WorkerMonitor());<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    // Add completed cleaner chore<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    addChore(new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.534"></a>
+<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>  public void stop() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    if (!running.getAndSet(false)) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      return;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    }<a name="line.540"></a>
+<span class="sourceLineNo">541</span><a name="line.541"></a>
+<span class="sourceLineNo">542</span>    LOG.info("Stopping");<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    scheduler.stop();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    timeoutExecutor.sendStopSignal();<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>  @VisibleForTesting<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  public void join() {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    assert !isRunning() : "expected not running";<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span>    // stop the timeout executor<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    timeoutExecutor.awaitTermination();<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    timeoutExecutor = null;<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    // stop the worker threads<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    for (WorkerThread worker: workerThreads) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      worker.awaitTermination();<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    workerThreads = null;<a name="line.559"></a>
+<span class="sourceLineNo">560</span><a name="line.560"></a>
+<span class="sourceLineNo">561</span>    // Destroy the Thread Group for the executors<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    try {<a name="line.562"></a>
+<span class="sourceLineNo">563</span>      threadGroup.destroy();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    } catch (IllegalThreadStateException e) {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      LOG.error("Thread group " + threadGroup + " contains running threads");<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      threadGroup.list();<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    } finally {<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      threadGroup = null;<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
+<span class="sourceLineNo">570</span><a name="line.570"></a>
+<span class="sourceLineNo">571</span>    // reset the in-memory state for testing<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    completed.clear();<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    rollbackStack.clear();<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    procedures.clear();<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    nonceKeysToProcIdsMap.clear();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    scheduler.clear();<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    lastProcId.set(-1);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
+<span class="sourceLineNo">579</span><a name="line.579"></a>
+<span class="sourceLineNo">580</span>  public void refreshConfiguration(final Configuration conf) {<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    this.conf = conf;<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.582"></a>
+<span class="sourceLineNo">583</span>        DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<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>  // ==========================================================================<a name="line.586"></a>
+<span class="sourceLineNo">587</span>  //  Accessors<a name="line.587"></a>
 <span class="sourceLineNo">588</span>  // ==========================================================================<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  //  Accessors<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  // ==========================================================================<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  public boolean isRunning() {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return running.get();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return the current number of worker threads.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   */<a name="line.597"></a>
-<span class="sourceLineNo">598</span>  public int getWorkerThreadCount() {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    return workerThreads.size();<a name="line.599"></a>
-<span class="sourceLineNo">600</span>  }<a name="line.600"></a>
-<span class="sourceLineNo">601</span><a name="line.601"></a>
-<span class="sourceLineNo">602</span>  /**<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   * @return the core pool size settings.<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   */<a name="line.604"></a>
-<span class="sourceLineNo">605</span>  public int getCorePoolSize() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    return corePoolSize;<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>  public int getActiveExecutorCount() {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    return activeExecutorCount.get();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  public TEnvironment getEnvironment() {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    return this.environment;<a name="line.614"></a>
-<span class="sourceLineNo">615</span>  }<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>  public ProcedureStore getStore() {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    return this.store;<a name="line.618"></a>
-<span class="sourceLineNo">619</span>  }<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>  protected ProcedureScheduler getScheduler() {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    return scheduler;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>  }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>  public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    this.scheduler.signalAll();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>  }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>  public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<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">589</span>  public boolean isRunning() {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    return running.get();<a name="line.590"></a>
+<span class="sourceLineNo">591</span>  }<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span>  /**<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @return the current number of worker threads.<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
+<span class="sourceLineNo">596</span>  public int getWorkerThreadCount() {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    return workerThreads.size();<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  }<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span>  /**<a name="line.600"></a>
+<span class="sourceLineNo">601</span>   * @return the core pool size settings.<a name="line.601"></a>
+<span class="sourceLineNo">602</span>   */<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  public int getCorePoolSize() {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    return corePoolSize;<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  }<a name="line.605"></a>
+<span class="sourceLineNo">606</span><a name="line.606"></a>
+<span class="sourceLineNo">607</span>  public int getActiveExecutorCount() {<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    return activeExecutorCount.get();<a name="line.608"></a>
+<span class="sourceLineNo">609</span>  }<a name="line.609"></a>
+<span class="sourceLineNo">610</span><a name="line.610"></a>
+<span class="sourceLineNo">611</span>  public TEnvironment getEnvironment() {<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    return this.environment;<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>  public ProcedureStore getStore() {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    return this.store;<a name="line.616"></a>
+<span class="sourceLineNo">617</span>  }<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>  protected ProcedureScheduler getScheduler() {<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    return scheduler;<a name="line.620"></a>
+<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>  public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    this.scheduler.signalAll();<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>  public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
+<span class="sourceLineNo">631</span><a name="line.631"></a>
+<span class="sourceLineNo">632</span>  // ==========================================================================<a name="line.632"></a>
+<span class="sourceLineNo">633</span>  //  Submit/Remove Chores<a name="line.633"></a>
 <span class="sourceLineNo">634</span>  // ==========================================================================<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  //  Submit/Remove Chores<a name="line.635"></a>
-<span class="sourceLineNo">636</span>  // ==========================================================================<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span>  /**<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * Add a chore procedure to the executor<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   * @param chore the chore to add<a name="line.640"></a>
-<span class="sourceLineNo">641</span>   */<a name="line.641"></a>
-<span class="sourceLineNo">642</span>  public void addChore(final ProcedureInMemoryChore chore) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    timeoutExecutor.add(chore);<a name="line.644"></a>
-<span class="sourceLineNo">645</span>  }<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>  /**<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   * Remove a chore procedure from the executor<a name="line.648"></a>
-<span class="sourceLineNo">649</span>   * @param chore the chore to remove<a name="line.649"></a>
-<span class="sourceLineNo">650</span>   * @return whether the chore is removed, or it will be removed later<a name="line.650"></a>
-<span class="sourceLineNo">651</span>   */<a name="line.651"></a>
-<span class="sourceLineNo">652</span>  public boolean removeChore(final ProcedureInMemoryChore chore) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    chore.setState(ProcedureState.FINISHED);<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    return timeoutExecutor.remove(chore);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>  }<a name="line.655"></a>
-<span class="sourceLineNo">656</span><a name="line.656"></a>
+<span class="sourceLineNo">635</span><a name="line.635"></a>
+<span class="sourceLineNo">636</span>  /**<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   * Add a chore procedure to the executor<a name="line.637"></a>
+<span class="sourceLineNo">638</span>   * @param chore the chore to add<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   */<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  public void addChore(final ProcedureInMemoryChore chore) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    timeoutExecutor.add(chore);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>  }<a name="line.643"></a>
+<span class="sourceLineNo">644</span><a name="line.644"></a>
+<span class="sourceLineNo">645</span>  /**<a name="line.645"></a>
+<span class="sourceLineNo">646</span>   * Remove a chore procedure from the executor<a name="line.646"></a>
+<span class="sourceLineNo">647</span>   * @param chore the chore to remove<a name="line.647"></a>
+<span class="sourceLineNo">648</span>   * @return whether the chore is removed, or it will be removed later<a name="line.648"></a>
+<span class="sourceLineNo">649</span>   */<a name="line.649"></a>
+<span class="sourceLineNo">650</span>  public boolean removeChore(final ProcedureInMemoryChore chore) {<a name="line.650"></a>
+<span class="sourceLineNo">651</span>    chore.setState(ProcedureState.SUCCESS);<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    return timeoutExecutor.remove(chore);<a name="line.652"></a>
+<span class="sourceLineNo">653</span>  }<a name="line.653"></a>
+<span class="sourceLineNo">654</span><a name="line.654"></a>
+<span class="sourceLineNo">655</span>  // ==========================================================================<a name="line.655"></a>
+<span class="sourceLineNo">656</span>  //  Nonce Procedure helpers<a name="line.656"></a>
 <span class="sourceLineNo">657</span>  // ==========================================================================<a name="line.657"></a>
-<span class="sourceLineNo">658</span>  //  Nonce Procedure helpers<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  // ==========================================================================<a name="line.659"></a>
-<span class="sourceLineNo">660</span>  /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * @param nonceGroup<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * @param nonce<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * @return the generated NonceKey<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>  }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>  /**<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   * Register a nonce for a procedure that is going to be submitted.<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   * A procId will be reserved and on submitProcedure(),<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   * the procedure with the specified nonce will take the reserved ProcId.<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   * otherwise an invalid procId will be returned. and the caller should procede<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   * and submit the procedure.<a name="line.676"></a>
-<span class="sourceLineNo">677</span>   *<a name="line.677"></a>
-<span class="sourceLineNo">678</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.678"></a>
-<span class="sourceLineNo">679</span>   * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.679"></a>
-<span class="sourceLineNo">680</span>   */<a name="line.680"></a>
-<span class="sourceLineNo">681</span>  public long registerNonce(final NonceKey nonceKey) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    if (nonceKey == null) return -1;<a name="line.682"></a>
-<span class="sourceLineNo">683</span><a name="line.683"></a>
-<span class="sourceLineNo">684</span>    // check if we have already a Reserved ID for the nonce<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    if (oldProcId == null) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      // reserve a new Procedure ID, this will be associated with the nonce<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      // and the procedure submitted with the specified nonce will use this ID.<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      final long newProcId = nextProcId();<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.690"></a>
-<span class="sourceLineNo">691</span>      if (oldProcId == null) return -1;<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>    // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    // since the client expect the procedure to be submitted, spin here until it is.<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    while (isRunning() &amp;&amp;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>           !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &amp;&amp;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>           nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      if (traceEnabled) {<a name="line.700"></a>
-<span class="sourceLineNo">701</span>        LOG.trace("Waiting for procId=" + oldProcId.longValue() + " to be submitted");<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      }<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      Threads.sleep(100);<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    }<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    return oldProcId.longValue();<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  }<a name="line.706"></a>
-<span class="sourceLineNo">707</span><a name="line.707"></a>
-<span class="sourceLineNo">708</span>  /**<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    if (nonceKey == null) return;<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    if (procId == null) return;<a name="line.716"></a>
-<span class="sourceLineNo">717</span><a name="line.717"></a>
-<span class="sourceLineNo">718</span>    // if the procedure was not submitted, remove the nonce<a name="line.718"></a>
-<span class="sourceLineNo">719</span>    if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    }<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  }<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>  /**<a name="line.724"></a>
-<span class="sourceLineNo">725</span>   * If the failure failed before submitting it, we may want to give back the<a name="line.725"></a>
-<span class="sourceLineNo">726</span>   * same error to the requests with the same nonceKey.<a name="line.726"></a>
-<span class="sourceLineNo">727</span>   *<a name="line.727"></a>
-<span class="sourceLineNo">728</span>   * @param nonceKey A unique identifier for this operation from the client or process<a name="line.728"></a>
-<span class="sourceLineNo">729</span>   * @param procName name of the procedure, used to inform the user<a name="line.729"></a>
-<span class="sourceLineNo">730</span>   * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * @param exception the failure to report to the user<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   */<a name="line.732"></a>
-<span class="sourceLineNo">733</span>  public void setFailureResultForNonce(final NonceKey nonceKey, final String procName,<a name="line.733"></a>
-<span class="sourceLineNo">734</span>      final User procOwner, final IOException exception) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    if (nonceKey == null) return;<a name="line.735"></a>
-<span class="sourceLineNo">736</span><a name="line.736"></a>
-<span class="sourceLineNo">737</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    if (procId == null || completed.containsKey(procId)) return;<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>    final long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    final ProcedureInfo result = new ProcedureInfo(procId.longValue(),<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      procName, procOwner != null ? procOwner.getShortName() : null,<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      ProcedureUtil.convertToProcedureState(ProcedureState.ROLLEDBACK),<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      -1, nonceKey, exception, currentTime, currentTime, null);<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    completed.putIfAbsent(procId, result);<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
-<span class="sourceLineNo">747</span><a name="line.747"></a>
+<span class="sourceLineNo">658</span>  /**<a name="line.658"></a>
+<span class="sourceLineNo">659</span>   * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.659"></a>
+<span class="sourceLineNo">660</span>   * @param nonceGroup<a name="line.660"></a>
+<span class="sourceLineNo">661</span>   * @param nonce<a name="line.661"></a>
+<span class="sourceLineNo">662</span>   * @return the generated NonceKey<a name="line.662"></a>
+<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
+<span class="sourceLineNo">664</span>  public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.665"></a>
+<span class="sourceLineNo">666</span>  }<a name="line.666"></a>
+<span class="sourceLineNo">667</span><a name="line.667"></a>
+<span class="sourceLineNo">668</span>  /**<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * Register a nonce for a procedure that is going to be submitted.<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * A procId will be reserved and on submitProcedure(),<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   * the procedure with the specified nonce will take the reserved ProcId.<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   * otherwise an invalid procId will be returned. and the caller should procede<a name="line.673"></a>
+<span class="sourceLineNo">674</span>   * and submit the procedure.<a name="line.674"></a>
+<span class="sourceLineNo">675</span>   *<a name="line.675"></a>
+<span class="sourceLineNo">676</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.676"></a>
+<span class="sourceLineNo">677</span>   * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.677"></a>
+<span class="sourceLineNo">678</span>   */<a name="line.678"></a>
+<span class="sourceLineNo">679</span>  public long registerNonce(final NonceKey nonceKey) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span>    if (nonceKey == null) return -1;<a name="line.680"></a>
+<span class="sourceLineNo">681</span><a name="line.681"></a>
+<span class="sourceLineNo">682</span>    // check if we have already a Reserved ID for the nonce<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>    if (oldProcId == null) {<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      // reserve a new Procedure ID, this will be associated with the nonce<a name="line.685"></a>
+<span class="sourceLineNo">686</span>      // and the procedure submitted with the specified nonce will use this ID.<a name="line.686"></a>
+<span class="sourceLineNo">687</span>      final long newProcId = nextProcId();<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      if (oldProcId == null) return -1;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>    }<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span>    // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    // since the client expect the procedure to be submitted, spin here until it is.<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    while (isRunning() &amp;&amp;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>           !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &amp;&amp;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>           nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.697"></a>
+<span class="sourceLineNo">698</span>      if (traceEnabled) {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>        LOG.trace("Waiting for procId=" + oldProcId.longValue() + " to be submitted");<a name="line.699"></a>
+<span class="sourceLineNo">700</span>      }<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      Threads.sleep(100);<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    }<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    return oldProcId.longValue();<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>  /**<a name="line.706"></a>
+<span class="sourceLineNo">707</span>   * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.707"></a>
+<span class="sourceLineNo">708</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.708"></a>
+<span class="sourceLineNo">709</span>   */<a name="line.709"></a>
+<span class="sourceLineNo">710</span>  public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    if (nonceKey == null) return;<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.713"></a>
+<span class="sourceLineNo">714</span>    if (procId == null) return;<a name="line.714"></a>
+<span class="sourceLineNo">715</span><a name="line.715"></a>
+<span class="sourceLineNo">716</span>    // if the procedure was not submitted, remove the nonce<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    }<a name="line.719"></a>
+<span class="sourceLineNo">720</span>  }<a name="line.720"></a>
+<span class="sourceLineNo">721</span><a name="line.721"></a>
+<span class="sourceLineNo">722</span>  /**<a name="line.722"></a>
+<span class="sourceLineNo">723</span>   * If the failure failed before submitting it, we may want to give back the<a name="line.723"></a>
+<span class="sourceLineNo">724</span>   * same error to the requests with the same nonceKey.<a name="line.724"></a>
+<span class="sourceLineNo">725</span>   *<a name="line.725"></a>
+<span class="sourceLineNo">726</span>   * @param nonceKey A unique identifier for this operation from the client or process<a name="line.726"></a>
+<span class="sourceLineNo">727</span>   * @param procName name of the procedure, used to inform the user<a name="line.727"></a>
+<span class="sourceLineNo">728</span>   * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.728"></a>
+<span class="sourceLineNo">729</span>   * @param exception the failure to report to the user<a name="line.729"></a>
+<span class="sourceLineNo">730</span>   */<a name="line.730"></a>
+<span class="sourceLineNo">731</span>  public void setFailureResultForNonce(final NonceKey nonceKey, final String procName,<a name="line.731"></a>
+<span class="sourceLineNo">732</span>      final User procOwner, final IOException exception) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    if (nonceKey == null) return;<a name="line.733"></a>
+<span class="sourceLineNo">734</span><a name="line.734"></a>
+<span class="sourceLineNo">735</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    if (procId == null || completed.containsKey(procId)) return;<a name="line.736"></a>
+<span class="sourceLineNo">737</span><a name="line.737"></a>
+<span class="sourceLineNo">738</span>    final long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.738"></a>
+<span class="sourceLineNo">739</span>    final ProcedureInfo result = new ProcedureInfo(procId.longValue(),<a name="line.739"></a>
+<span class="sourceLineNo">740</span>      procName, procOwner != null ? procOwner.getShortName() : null,<a name="line.740"></a>
+<span class="sourceLineNo">741</span>      ProcedureUtil.convertToProcedureState(ProcedureState.ROLLEDBACK),<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      -1, nonceKey, exception, currentTime, currentTime, null);<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    completed.putIfAbsent(procId, result);<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>  // ==========================================================================<a name="line.746"></a>
+<span class="sourceLineNo">747</span>  //  Submit/Abort Procedure<a name="line.747"></a>
 <span class="sourceLineNo">748</span>  // ==========================================================================<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  //  Submit/Abort Procedure<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>   * Add a new root-procedure to the executor.<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   * @param proc the new procedure to execute.<a name="line.753"></a>
-<span class="sourceLineNo">754</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.754"></a>
-<span class="sourceLineNo">755</span>   */<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  public long submitProcedure(final Procedure proc) {<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    return submitProcedure(proc, null);<a name="line.757"></a>
-<span class="sourceLineNo">758</span>  }<a name="line.758"></a>
-<span class="sourceLineNo">759</span><a name="line.759"></a>
-<span class="sourceLineNo">760</span>  /**<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   * Add a new root-procedure to the executor.<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * @param proc the new procedure to execute.<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   * @param nonceKey the registered unique identifier for this operation from the client or process.<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   */<a name="line.765"></a>
-<span class="sourceLineNo">766</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NP_NULL_ON_SOME_PATH",<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      justification = "FindBugs is blind to the check-for-null")<a name="line.767"></a>
-<span class="sourceLineNo">768</span>  public long submitProcedure(final Procedure proc, final NonceKey nonceKey) {<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.770"></a>
+<span class="sourceLineNo">749</span>  /**<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * Add a new root-procedure to the executor.<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   * @param proc the new procedure to execute.<a name="line.751"></a>
+<span class="sourceLineNo">752</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.752"></a>
+<span class="sourceLineNo">753</span>   */<a name="line.753"></a>
+<span class="sourceLineNo">754</span>  public long submitProcedure(final Procedure proc) {<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    return submitProcedure(proc, null);<a name="line.755"></a>
+<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
+<span class="sourceLineNo">757</span><a name="line.757"></a>
+<span class="sourceLineNo">758</span>  /**<a name="line.758"></a>
+<span class="sourceLineNo">759</span>   * Add a new root-procedure to the executor.<a name="line.759"></a>
+<span class="sourceLineNo">760</span>   * @param proc the new procedure to execute.<a name="line.760"></a>
+<span class="sourceLineNo">761</span>   * @param nonceKey the registered unique identifier for this operation from the client or process.<a name="line.761"></a>
+<span class="sourceLineNo">762</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.762"></a>
+<span class="sourceLineNo">763</span>   */<a name="line.763"></a>
+<span class="sourceLineNo">764</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NP_NULL_ON_SOME_PATH",<a name="line.764"></a>
+<span class="sourceLineNo">765</span>      justification = "FindBugs is blind to the check-for-null")<a name="line.765"></a>
+<span class="sourceLineNo">766</span>  public long submitProcedure(final Procedure proc, final NonceKey nonceKey) {<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.767"></a>
+<span class="sourceLineNo">768</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.768"></a>
+<span class="sourceLineNo">769</span><a name="line.769"></a>
+<span class="sourceLineNo">770</span>    prepareProcedure(proc);<a name="line.770"></a>
 <span class="sourceLineNo">771</span><a name="line.771"></a>
-<span class="sourceLineNo">772</span>    prepareProcedure(proc);<a name="line.772"></a>
-<span class="sourceLineNo">773</span><a name="line.773"></a>
-<span class="sourceLineNo">774</span>    final Long currentProcId;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    if (nonceKey != null) {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>      currentProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      Preconditions.checkArgument(currentProcId != null,<a name="line.777"></a>
-<span class="sourceLineNo">778</span>        "Expected nonceKey=" + nonceKey + " to be reserved, use registerNonce(); proc=" + proc);<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    } else {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      currentProcId = nextProcId();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>    // Initialize the procedure<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    proc.setNonceKey(nonceKey);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    proc.setProcId(currentProcId.longValue());<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span>    // Commit the transaction<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    store.insert(proc, null);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    if (LOG.isDebugEnabled()) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      LOG.debug("Stored " + proc);<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>    // Add the procedure to the executor<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    return pushProcedure(proc);<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>  /**<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * Add a set of new root-procedure to the executor.<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * @param procs the new procedures to execute.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   */<a name="line.800"></a>
-<span class="sourceLineNo">801</span>  // TODO: Do we need to take nonces here?<a name="line.801"></a>
-<span class="sourceLineNo">802</span>  public void submitProcedures(final Procedure[] procs) {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.804"></a>
-<span class="sourceLineNo">805</span><a name="line.805"></a>
-<span class="sourceLineNo">806</span>    // Prepare procedure<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.807"></a>
-<span class="sourceLineNo">808</span>      prepareProcedure(procs[i]).setProcId(nextProcId());<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    }<a name="line.809"></a>
-<span class="sourceLineNo">810</span><a name="line.810"></a>
-<span class="sourceLineNo">811</span>    // Commit the transaction<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    store.insert(procs);<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    if (LOG.isDebugEnabled()) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>      LOG.debug("Stored " + Arrays.toString(procs));<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>    // Add the procedure to the executor<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.818"></a>
-<span class="sourceLineNo">819</span>      pushProcedure(procs[i]);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    }<a name="line.820"></a>
-<span class="sourceLineNo">821</span>  }<a name="line.821"></a>
-<span class="sourceLineNo">822</span><a name="line.822"></a>
-<span class="sourceLineNo">823</span>  private Procedure prepareProcedure(final Procedure proc) {<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    Preconditions.checkArgument(!proc.hasParent(), "unexpected parent", proc);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    if (this.checkOwnerSet) {<a name="line.827"></a>
-<span class="sourceLineNo">828</span>      Preconditions.checkArgument(proc.hasOwner(), "missing owner");<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    }<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    return proc;<a name="line.830"></a>
-<span class="sourceLineNo">831</span>  }<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span>  private long pushProcedure(final Procedure proc) {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    final long currentProcId = proc.getProcId();<a name="line.834"></a>
-<span class="sourceLineNo">835</span><a name="line.835"></a>
-<span class="sourceLineNo">836</span>    // Create the rollback stack for the procedure<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    RootProcedureState stack = new RootProcedureState();<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    rollbackStack.put(currentProcId, stack);<a name="line.838"></a>
-<span class="sourceLineNo">839</span><a name="line.839"></a>
-<span class="sourceLineNo">840</span>    // Submit the new subprocedures<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    assert !procedures.containsKey(currentProcId);<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    procedures.put(currentProcId, proc);<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    sendProcedureAddedNotification(currentProcId);<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    scheduler.addBack(proc);<a name="line.844"></a>
-<span class="sourceLineNo">845</span>    return proc.getProcId();<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>  /**<a name="line.848"></a>
-<span class="sourceLineNo">849</span>   * Send an abort notification the specified procedure.<a name="line.849"></a>
-<span class="sourceLineNo">850</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.850"></a>
-<span class="sourceLineNo">851</span>   * @param procId the procedure to abort<a name="line.851"></a>
-<span class="sourceLineNo">852</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.852"></a>
-<span class="sourceLineNo">853</span>   */<a name="line.853"></a>
-<span class="sourceLineNo">854</span>  public boolean abort(final long procId) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    return abort(procId, true);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>  }<a name="line.856"></a>
-<span class="sourceLineNo">857</span><a name="line.857"></a>
-<span class="sourceLineNo">858</span>  /**<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * Send an abort notification the specified procedure.<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   * @param procId the procedure to abort<a name="line.861"></a>
-<span class="sourceLineNo">862</span>   * @param mayInterruptIfRunning if the proc completed at least one step, should it be aborted?<a name="line.862"></a>
-<span class="sourceLineNo">863</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.863"></a>
-<span class="sourceLineNo">864</span>   */<a name="line.864"></a>
-<span class="sourceLineNo">865</span>  public boolean abort(final long procId, final boolean mayInterruptIfRunning) {<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    final Procedure proc = procedures.get(procId);<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    if (proc != null) {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>      if (!mayInterruptIfRunning &amp;&amp; proc.wasExecuted()) {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        return false;<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      }<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      return proc.abort(getEnvironment());<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    }<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    return false;<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">772</span>    final Long currentProcId;<a name="line.772"></a>
+<span class="sourceLineNo">773</span>    if (nonceKey != null) {<a name="line.773"></a>
+<span class="sourceLineNo">774</span>      currentProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.774"></a>
+<span class="sourceLineNo">775</span>      Preconditions.checkArgument(currentProcId != null,<a name="line.775"></a>
+<span class="sourceLineNo">776</span>        "Expected nonceKey=" + nonceKey + " to be reserved, use registerNonce(); proc=" + proc);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    } else {<a name="line.777"></a>
+<span class="sourceLineNo">778</span>      currentProcId = nextProcId();<a name="line.778"></a>
+<span class="sourceLineNo">779</span>    }<a name="line.779"></a>
+<span class="sourceLineNo">780</span><a name="line.780"></a>
+<span class="sourceLineNo">781</span>    // Initialize the procedure<a name="line.781"></a>
+<span class="sourceLineNo">782</span>    proc.setNonceKey(nonceKey);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>    proc.setProcId(currentProcId.longValue());<a name="line.783"></a>
+<span class="sourceLineNo">784</span><a name="line.784"></a>
+<span class="sourceLineNo">785</span>    // Commit the transaction<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    store.insert(proc, null);<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    if (LOG.isDebugEnabled()) {<a name="line.787"></a>
+<span class="sourceLineNo">788</span>      LOG.debug("Stored " + proc);<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
+<span class="sourceLineNo">790</span><a name="line.790"></a>
+<span class="sourceLineNo">791</span>    // Add the procedure to the executor<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    return pushProcedure(proc);<a name="line.792"></a>
+<span class="sourceLineNo">793</span>  }<a name="line.793"></a>
+<span class="sourceLineNo">794</span><a name="line.794"></a>
+<span class="sourceLineNo">795</span>  /**<a name="line.795"></a>
+<span class="sourceLineNo">796</span>   * Add a set of new root-procedure to the executor.<a name="line.796"></a>
+<span class="sourceLineNo">797</span>   * @param procs the new procedures to execute.<a name="line.797"></a>
+<span class="sourceLineNo">798</span>   */<a name="line.798"></a>
+<span class="sourceLineNo">799</span>  // TODO: Do we need to take nonces here?<a name="line.799"></a>
+<span class="sourceLineNo">800</span>  public void submitProcedures(final Procedure[] procs) {<a name="line.800"></a>
+<span class="sourceLineNo">801</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.801"></a>
+<span class="sourceLineNo">802</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.802"></a>
+<span class="sourceLineNo">803</span><a name="line.803"></a>
+<span class="sourceLineNo">804</span>    // Prepare procedure<a name="line.804"></a>
+<span class="sourceLineNo">805</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.805"></a>
+<span class="sourceLineNo">806</span>      prepareProcedure(procs[i]).setProcId(nextProcId());<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    }<a name="line.807"></a>
+<span class="sourceLineNo">808</span><a name="line.808"></a>
+<span class="sourceLineNo">809</span>    // Commit the transaction<a name="line.809"></a>
+<span class="sourceLineNo">810</span>    store.insert(procs);<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    if (LOG.isDebugEnabled()) {<a name="line.811"></a>
+<span class="sourceLineNo">812</span>      LOG.debug("Stored " + Arrays.toString(procs));<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    }<a name="line.813"></a>
+<span class="sourceLineNo">814</span><a name="line.814"></a>
+<span class="sourceLineNo">815</span>    // Add the procedure to the executor<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.816"></a>
+<span class="sourceLineNo">817</span>      pushProcedure(procs[i]);<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
+<span class="sourceLineNo">819</span>  }<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span>  private Procedure prepareProcedure(final Procedure proc) {<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.822"></a>
+<span class="sourceLineNo">823</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.823"></a>
+<span class="sourceLineNo">824</span>    Preconditions.checkArgument(!proc.hasParent(), "unexpected parent", proc);<a name="line.824"></a>
+<span class="sourceLineNo">825</span>    if (this.checkOwnerSet) {<a name="line.825"></a>
+<span class="sourceLineNo">826</span>      Preconditions.checkArgument(proc.hasOwner(), "missing owner");<a name="line.826"></a>
+<span class="sourceLineNo">827</span>    }<a name="line.827"></a>
+<span class="sourceLineNo">828</span>    return proc;<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>  private long pushProcedure(final Procedure proc) {<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    final long currentProcId = proc.getProcId();<a name="line.832"></a>
+<span class="sourceLineNo">833</span><a name="line.833"></a>
+<span class="sourceLineNo">834</span>    // Create the rollback stack for the procedure<a name="line.834"></a>
+<span class="sourceLineNo">835</span>    RootProcedureState stack = new RootProcedureState();<a name="line.835"></a>
+<span class="sourceLineNo">836</span>    rollbackStack.put(currentProcId, stack);<a name="line.836"></a>
+<span class="sourceLineNo">837</span><a name="line.837"></a>
+<span class="sourceLineNo">838</span>    // Submit the new subprocedures<a name="line.838"></a>
+<span class="sourceLineNo">839</span>    assert !procedures.containsKey(currentProcId);<a name="line.839"></a>
+<span class="sourceLineNo">840</span>    procedures.put(curr

<TRUNCATED>

[20/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
index 668f7e9..6797ae6 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
@@ -393,76 +393,76 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.112">m_master</a></pre>
 </li>
 </ul>
-<a name="m_assignmentManager">
+<a name="m_servers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_assignmentManager</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.124">m_assignmentManager</a></pre>
+<h4>m_servers</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.124">m_servers</a></pre>
 </li>
 </ul>
-<a name="m_assignmentManager__IsNotDefault">
+<a name="m_servers__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_assignmentManager__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.129">m_assignmentManager__IsNotDefault</a></pre>
+<h4>m_servers__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.129">m_servers__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_metaLocation">
+<a name="m_format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_metaLocation</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.141">m_metaLocation</a></pre>
+<h4>m_format</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.141">m_format</a></pre>
 </li>
 </ul>
-<a name="m_metaLocation__IsNotDefault">
+<a name="m_format__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_metaLocation__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.146">m_metaLocation__IsNotDefault</a></pre>
+<h4>m_format__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.146">m_format__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_serverManager">
+<a name="m_catalogJanitorEnabled">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_serverManager</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.158">m_serverManager</a></pre>
+<h4>m_catalogJanitorEnabled</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.158">m_catalogJanitorEnabled</a></pre>
 </li>
 </ul>
-<a name="m_serverManager__IsNotDefault">
+<a name="m_catalogJanitorEnabled__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_serverManager__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.163">m_serverManager__IsNotDefault</a></pre>
+<h4>m_catalogJanitorEnabled__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.163">m_catalogJanitorEnabled__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_format">
+<a name="m_frags">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_format</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.175">m_format</a></pre>
+<h4>m_frags</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.175">m_frags</a></pre>
 </li>
 </ul>
-<a name="m_format__IsNotDefault">
+<a name="m_frags__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_format__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.180">m_format__IsNotDefault</a></pre>
+<h4>m_frags__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.180">m_frags__IsNotDefault</a></pre>
 </li>
 </ul>
 <a name="m_deadServers">
@@ -483,76 +483,76 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.197">m_deadServers__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_frags">
+<a name="m_assignmentManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_frags</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.209">m_frags</a></pre>
+<h4>m_assignmentManager</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.209">m_assignmentManager</a></pre>
 </li>
 </ul>
-<a name="m_frags__IsNotDefault">
+<a name="m_assignmentManager__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_frags__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.214">m_frags__IsNotDefault</a></pre>
+<h4>m_assignmentManager__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.214">m_assignmentManager__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_servers">
+<a name="m_metaLocation">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_servers</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.226">m_servers</a></pre>
+<h4>m_metaLocation</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.226">m_metaLocation</a></pre>
 </li>
 </ul>
-<a name="m_servers__IsNotDefault">
+<a name="m_metaLocation__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_servers__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.231">m_servers__IsNotDefault</a></pre>
+<h4>m_metaLocation__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.231">m_metaLocation__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_catalogJanitorEnabled">
+<a name="m_filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_catalogJanitorEnabled</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.243">m_catalogJanitorEnabled</a></pre>
+<h4>m_filter</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.243">m_filter</a></pre>
 </li>
 </ul>
-<a name="m_catalogJanitorEnabled__IsNotDefault">
+<a name="m_filter__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_catalogJanitorEnabled__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.248">m_catalogJanitorEnabled__IsNotDefault</a></pre>
+<h4>m_filter__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.248">m_filter__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_filter">
+<a name="m_serverManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_filter</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.260">m_filter</a></pre>
+<h4>m_serverManager</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.260">m_serverManager</a></pre>
 </li>
 </ul>
-<a name="m_filter__IsNotDefault">
+<a name="m_serverManager__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>m_filter__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.265">m_filter__IsNotDefault</a></pre>
+<h4>m_serverManager__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.265">m_serverManager__IsNotDefault</a></pre>
 </li>
 </ul>
 </li>
@@ -598,112 +598,112 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.108">getMaster</a>()</pre>
 </li>
 </ul>
-<a name="setAssignmentManager-org.apache.hadoop.hbase.master.AssignmentManager-">
+<a name="setServers-java.util.List-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setAssignmentManager</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.114">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;assignmentManager)</pre>
+<h4>setServers</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.114">setServers</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)</pre>
 </li>
 </ul>
-<a name="getAssignmentManager--">
+<a name="getServers--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getAssignmentManager</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.120">getAssignmentManager</a>()</pre>
+<h4>getServers</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.120">getServers</a>()</pre>
 </li>
 </ul>
-<a name="getAssignmentManager__IsNotDefault--">
+<a name="getServers__IsNotDefault--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getAssignmentManager__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.125">getAssignmentManager__IsNotDefault</a>()</pre>
+<h4>getServers__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.125">getServers__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setMetaLocation-org.apache.hadoop.hbase.ServerName-">
+<a name="setFormat-java.lang.String-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setMetaLocation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.131">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;metaLocation)</pre>
+<h4>setFormat</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.131">setFormat</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;format)</pre>
 </li>
 </ul>
-<a name="getMetaLocation--">
+<a name="getFormat--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getMetaLocation</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.137">getMetaLocation</a>()</pre>
+<h4>getFormat</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.137">getFormat</a>()</pre>
 </li>
 </ul>
-<a name="getMetaLocation__IsNotDefault--">
+<a name="getFormat__IsNotDefault--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getMetaLocation__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.142">getMetaLocation__IsNotDefault</a>()</pre>
+<h4>getFormat__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.142">getFormat__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setServerManager-org.apache.hadoop.hbase.master.ServerManager-">
+<a name="setCatalogJanitorEnabled-boolean-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServerManager</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.148">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;serverManager)</pre>
+<h4>setCatalogJanitorEnabled</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.148">setCatalogJanitorEnabled</a>(boolean&nbsp;catalogJanitorEnabled)</pre>
 </li>
 </ul>
-<a name="getServerManager--">
+<a name="getCatalogJanitorEnabled--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getServerManager</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.154">getServerManager</a>()</pre>
+<h4>getCatalogJanitorEnabled</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.154">getCatalogJanitorEnabled</a>()</pre>
 </li>
 </ul>
-<a name="getServerManager__IsNotDefault--">
+<a name="getCatalogJanitorEnabled__IsNotDefault--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getServerManager__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.159">getServerManager__IsNotDefault</a>()</pre>
+<h4>getCatalogJanitorEnabled__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.159">getCatalogJanitorEnabled__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFormat-java.lang.String-">
+<a name="setFrags-java.util.Map-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFormat</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.165">setFormat</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;format)</pre>
+<h4>setFrags</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.165">setFrags</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;frags)</pre>
 </li>
 </ul>
-<a name="getFormat--">
+<a name="getFrags--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFormat</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.171">getFormat</a>()</pre>
+<h4>getFrags</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.171">getFrags</a>()</pre>
 </li>
 </ul>
-<a name="getFormat__IsNotDefault--">
+<a name="getFrags__IsNotDefault--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFormat__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.176">getFormat__IsNotDefault</a>()</pre>
+<h4>getFrags__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.176">getFrags__IsNotDefault</a>()</pre>
 </li>
 </ul>
 <a name="setDeadServers-java.util.Set-">
@@ -733,112 +733,112 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.193">getDeadServers__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFrags-java.util.Map-">
+<a name="setAssignmentManager-org.apache.hadoop.hbase.master.AssignmentManager-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFrags</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.199">setFrags</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;frags)</pre>
+<h4>setAssignmentManager</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.199">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;assignmentManager)</pre>
 </li>
 </ul>
-<a name="getFrags--">
+<a name="getAssignmentManager--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFrags</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.205">getFrags</a>()</pre>
+<h4>getAssignmentManager</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.205">getAssignmentManager</a>()</pre>
 </li>
 </ul>
-<a name="getFrags__IsNotDefault--">
+<a name="getAssignmentManager__IsNotDefault--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFrags__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.210">getFrags__IsNotDefault</a>()</pre>
+<h4>getAssignmentManager__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.210">getAssignmentManager__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setServers-java.util.List-">
+<a name="setMetaLocation-org.apache.hadoop.hbase.ServerName-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.216">setServers</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)</pre>
+<h4>setMetaLocation</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.216">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;metaLocation)</pre>
 </li>
 </ul>
-<a name="getServers--">
+<a name="getMetaLocation--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getServers</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.222">getServers</a>()</pre>
+<h4>getMetaLocation</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.222">getMetaLocation</a>()</pre>
 </li>
 </ul>
-<a name="getServers__IsNotDefault--">
+<a name="getMetaLocation__IsNotDefault--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getServers__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.227">getServers__IsNotDefault</a>()</pre>
+<h4>getMetaLocation__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.227">getMetaLocation__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setCatalogJanitorEnabled-boolean-">
+<a name="setFilter-java.lang.String-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setCatalogJanitorEnabled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.233">setCatalogJanitorEnabled</a>(boolean&nbsp;catalogJanitorEnabled)</pre>
+<h4>setFilter</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.233">setFilter</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filter)</pre>
 </li>
 </ul>
-<a name="getCatalogJanitorEnabled--">
+<a name="getFilter--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getCatalogJanitorEnabled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.239">getCatalogJanitorEnabled</a>()</pre>
+<h4>getFilter</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.239">getFilter</a>()</pre>
 </li>
 </ul>
-<a name="getCatalogJanitorEnabled__IsNotDefault--">
+<a name="getFilter__IsNotDefault--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getCatalogJanitorEnabled__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.244">getCatalogJanitorEnabled__IsNotDefault</a>()</pre>
+<h4>getFilter__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.244">getFilter__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFilter-java.lang.String-">
+<a name="setServerManager-org.apache.hadoop.hbase.master.ServerManager-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.250">setFilter</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filter)</pre>
+<h4>setServerManager</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.250">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;serverManager)</pre>
 </li>
 </ul>
-<a name="getFilter--">
+<a name="getServerManager--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFilter</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.256">getFilter</a>()</pre>
+<h4>getServerManager</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.256">getServerManager</a>()</pre>
 </li>
 </ul>
-<a name="getFilter__IsNotDefault--">
+<a name="getServerManager__IsNotDefault--">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>getFilter__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.261">getFilter__IsNotDefault</a>()</pre>
+<h4>getServerManager__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.261">getServerManager__IsNotDefault</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
index 757be01..41189e7 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
@@ -337,40 +337,40 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <!--   -->
 </a>
 <h3>Field Detail</h3>
-<a name="assignmentManager">
+<a name="servers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>assignmentManager</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.277">assignmentManager</a></pre>
+<h4>servers</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.277">servers</a></pre>
 </li>
 </ul>
-<a name="metaLocation">
+<a name="format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>metaLocation</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.284">metaLocation</a></pre>
+<h4>format</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.284">format</a></pre>
 </li>
 </ul>
-<a name="serverManager">
+<a name="catalogJanitorEnabled">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>serverManager</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.291">serverManager</a></pre>
+<h4>catalogJanitorEnabled</h4>
+<pre>protected&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.291">catalogJanitorEnabled</a></pre>
 </li>
 </ul>
-<a name="format">
+<a name="frags">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>format</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.298">format</a></pre>
+<h4>frags</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.298">frags</a></pre>
 </li>
 </ul>
 <a name="deadServers">
@@ -382,40 +382,40 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>protected&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.305">deadServers</a></pre>
 </li>
 </ul>
-<a name="frags">
+<a name="assignmentManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>frags</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.312">frags</a></pre>
+<h4>assignmentManager</h4>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.312">assignmentManager</a></pre>
 </li>
 </ul>
-<a name="servers">
+<a name="metaLocation">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>servers</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.319">servers</a></pre>
+<h4>metaLocation</h4>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.319">metaLocation</a></pre>
 </li>
 </ul>
-<a name="catalogJanitorEnabled">
+<a name="filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>catalogJanitorEnabled</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.326">catalogJanitorEnabled</a></pre>
+<h4>filter</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.326">filter</a></pre>
 </li>
 </ul>
-<a name="filter">
+<a name="serverManager">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>filter</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.333">filter</a></pre>
+<h4>serverManager</h4>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.333">serverManager</a></pre>
 </li>
 </ul>
 </li>
@@ -487,40 +487,40 @@ extends org.jamon.AbstractTemplateProxy</pre>
 </dl>
 </li>
 </ul>
-<a name="setAssignmentManager-org.apache.hadoop.hbase.master.AssignmentManager-">
+<a name="setServers-java.util.List-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setAssignmentManager</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.278">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;p_assignmentManager)</pre>
+<h4>setServers</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.278">setServers</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;p_servers)</pre>
 </li>
 </ul>
-<a name="setMetaLocation-org.apache.hadoop.hbase.ServerName-">
+<a name="setFormat-java.lang.String-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setMetaLocation</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.285">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;p_metaLocation)</pre>
+<h4>setFormat</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.285">setFormat</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_format)</pre>
 </li>
 </ul>
-<a name="setServerManager-org.apache.hadoop.hbase.master.ServerManager-">
+<a name="setCatalogJanitorEnabled-boolean-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServerManager</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.292">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;p_serverManager)</pre>
+<h4>setCatalogJanitorEnabled</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.292">setCatalogJanitorEnabled</a>(boolean&nbsp;p_catalogJanitorEnabled)</pre>
 </li>
 </ul>
-<a name="setFormat-java.lang.String-">
+<a name="setFrags-java.util.Map-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFormat</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.299">setFormat</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_format)</pre>
+<h4>setFrags</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.299">setFrags</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;p_frags)</pre>
 </li>
 </ul>
 <a name="setDeadServers-java.util.Set-">
@@ -532,40 +532,40 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.306">setDeadServers</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;p_deadServers)</pre>
 </li>
 </ul>
-<a name="setFrags-java.util.Map-">
+<a name="setAssignmentManager-org.apache.hadoop.hbase.master.AssignmentManager-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFrags</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.313">setFrags</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;p_frags)</pre>
+<h4>setAssignmentManager</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.313">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;p_assignmentManager)</pre>
 </li>
 </ul>
-<a name="setServers-java.util.List-">
+<a name="setMetaLocation-org.apache.hadoop.hbase.ServerName-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServers</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.320">setServers</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;p_servers)</pre>
+<h4>setMetaLocation</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.320">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;p_metaLocation)</pre>
 </li>
 </ul>
-<a name="setCatalogJanitorEnabled-boolean-">
+<a name="setFilter-java.lang.String-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setCatalogJanitorEnabled</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.327">setCatalogJanitorEnabled</a>(boolean&nbsp;p_catalogJanitorEnabled)</pre>
+<h4>setFilter</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.327">setFilter</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_filter)</pre>
 </li>
 </ul>
-<a name="setFilter-java.lang.String-">
+<a name="setServerManager-org.apache.hadoop.hbase.master.ServerManager-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFilter</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.334">setFilter</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_filter)</pre>
+<h4>setServerManager</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.334">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;p_serverManager)</pre>
 </li>
 </ul>
 <a name="constructImpl-java.lang.Class-">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
index cbddc9b..3c1ec15 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
@@ -278,40 +278,40 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/Master
 <pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/HMaster.html" title="class in org.apache.hadoop.hbase.master">HMaster</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.64">master</a></pre>
 </li>
 </ul>
-<a name="assignmentManager">
+<a name="servers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>assignmentManager</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.65">assignmentManager</a></pre>
+<h4>servers</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.65">servers</a></pre>
 </li>
 </ul>
-<a name="metaLocation">
+<a name="format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>metaLocation</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.66">metaLocation</a></pre>
+<h4>format</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.66">format</a></pre>
 </li>
 </ul>
-<a name="serverManager">
+<a name="catalogJanitorEnabled">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>serverManager</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.67">serverManager</a></pre>
+<h4>catalogJanitorEnabled</h4>
+<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.67">catalogJanitorEnabled</a></pre>
 </li>
 </ul>
-<a name="format">
+<a name="frags">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>format</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.68">format</a></pre>
+<h4>frags</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.68">frags</a></pre>
 </li>
 </ul>
 <a name="deadServers">
@@ -323,40 +323,40 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/Master
 <pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.69">deadServers</a></pre>
 </li>
 </ul>
-<a name="frags">
+<a name="assignmentManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>frags</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.70">frags</a></pre>
+<h4>assignmentManager</h4>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.70">assignmentManager</a></pre>
 </li>
 </ul>
-<a name="servers">
+<a name="metaLocation">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>servers</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.71">servers</a></pre>
+<h4>metaLocation</h4>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.71">metaLocation</a></pre>
 </li>
 </ul>
-<a name="catalogJanitorEnabled">
+<a name="filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>catalogJanitorEnabled</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.72">catalogJanitorEnabled</a></pre>
+<h4>filter</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.72">filter</a></pre>
 </li>
 </ul>
-<a name="filter">
+<a name="serverManager">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>filter</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.73">filter</a></pre>
+<h4>serverManager</h4>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.73">serverManager</a></pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
index e18c485..371dc13 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
@@ -293,22 +293,22 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.71">m_regionServer</a></pre>
 </li>
 </ul>
-<a name="m_bcn">
+<a name="m_format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_bcn</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.83">m_bcn</a></pre>
+<h4>m_format</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.83">m_format</a></pre>
 </li>
 </ul>
-<a name="m_bcn__IsNotDefault">
+<a name="m_format__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_bcn__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.88">m_bcn__IsNotDefault</a></pre>
+<h4>m_format__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.88">m_format__IsNotDefault</a></pre>
 </li>
 </ul>
 <a name="m_filter">
@@ -347,22 +347,22 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.122">m_bcv__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_format">
+<a name="m_bcn">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_format</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.134">m_format</a></pre>
+<h4>m_bcn</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.134">m_bcn</a></pre>
 </li>
 </ul>
-<a name="m_format__IsNotDefault">
+<a name="m_bcn__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>m_format__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.139">m_format__IsNotDefault</a></pre>
+<h4>m_bcn__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.139">m_bcn__IsNotDefault</a></pre>
 </li>
 </ul>
 </li>
@@ -408,31 +408,31 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.67">getRegionServer</a>()</pre>
 </li>
 </ul>
-<a name="setBcn-java.lang.String-">
+<a name="setFormat-java.lang.String-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setBcn</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.73">setBcn</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;bcn)</pre>
+<h4>setFormat</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.73">setFormat</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;format)</pre>
 </li>
 </ul>
-<a name="getBcn--">
+<a name="getFormat--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getBcn</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.79">getBcn</a>()</pre>
+<h4>getFormat</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.79">getFormat</a>()</pre>
 </li>
 </ul>
-<a name="getBcn__IsNotDefault--">
+<a name="getFormat__IsNotDefault--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getBcn__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.84">getBcn__IsNotDefault</a>()</pre>
+<h4>getFormat__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.84">getFormat__IsNotDefault</a>()</pre>
 </li>
 </ul>
 <a name="setFilter-java.lang.String-">
@@ -489,31 +489,31 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.118">getBcv__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFormat-java.lang.String-">
+<a name="setBcn-java.lang.String-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFormat</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.124">setFormat</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;format)</pre>
+<h4>setBcn</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.124">setBcn</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;bcn)</pre>
 </li>
 </ul>
-<a name="getFormat--">
+<a name="getBcn--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFormat</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.130">getFormat</a>()</pre>
+<h4>getBcn</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.130">getBcn</a>()</pre>
 </li>
 </ul>
-<a name="getFormat__IsNotDefault--">
+<a name="getBcn__IsNotDefault--">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>getFormat__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.135">getFormat__IsNotDefault</a>()</pre>
+<h4>getBcn__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.135">getBcn__IsNotDefault</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
index d9a6d2c..defaa75 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
@@ -297,13 +297,13 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <!--   -->
 </a>
 <h3>Field Detail</h3>
-<a name="bcn">
+<a name="format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>bcn</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.151">bcn</a></pre>
+<h4>format</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.151">format</a></pre>
 </li>
 </ul>
 <a name="filter">
@@ -324,13 +324,13 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>protected&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.165">bcv</a></pre>
 </li>
 </ul>
-<a name="format">
+<a name="bcn">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>format</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.172">format</a></pre>
+<h4>bcn</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.172">bcn</a></pre>
 </li>
 </ul>
 </li>
@@ -402,13 +402,13 @@ extends org.jamon.AbstractTemplateProxy</pre>
 </dl>
 </li>
 </ul>
-<a name="setBcn-java.lang.String-">
+<a name="setFormat-java.lang.String-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setBcn</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.152">setBcn</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_bcn)</pre>
+<h4>setFormat</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.152">setFormat</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_format)</pre>
 </li>
 </ul>
 <a name="setFilter-java.lang.String-">
@@ -429,13 +429,13 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.166">setBcv</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_bcv)</pre>
 </li>
 </ul>
-<a name="setFormat-java.lang.String-">
+<a name="setBcn-java.lang.String-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFormat</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.173">setFormat</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_format)</pre>
+<h4>setBcn</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.173">setBcn</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_bcn)</pre>
 </li>
 </ul>
 <a name="constructImpl-java.lang.Class-">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
index 54a275b..afdc65d 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
@@ -238,13 +238,13 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/
 <pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html#line.28">regionServer</a></pre>
 </li>
 </ul>
-<a name="bcn">
+<a name="format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>bcn</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html#line.29">bcn</a></pre>
+<h4>format</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html#line.29">format</a></pre>
 </li>
 </ul>
 <a name="filter">
@@ -265,13 +265,13 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/
 <pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html#line.31">bcv</a></pre>
 </li>
 </ul>
-<a name="format">
+<a name="bcn">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>format</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html#line.32">format</a></pre>
+<h4>bcn</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html#line.32">bcn</a></pre>
 </li>
 </ul>
 </li>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index 9872218..06bdf49 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -166,9 +166,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://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="http://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="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.Version.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALKey.Version</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.Version.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALKey.Version</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/ProcedureState.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/ProcedureState.html b/devapidocs/src-html/org/apache/hadoop/hbase/ProcedureState.html
index d505bef..55d62e7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/ProcedureState.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/ProcedureState.html
@@ -32,7 +32,7 @@
 <span class="sourceLineNo">024</span> */<a name="line.24"></a>
 <span class="sourceLineNo">025</span>@InterfaceAudience.Public<a name="line.25"></a>
 <span class="sourceLineNo">026</span>public enum ProcedureState {<a name="line.26"></a>
-<span class="sourceLineNo">027</span>  INITIALIZING, RUNNABLE, WAITING, WAITING_TIMEOUT, ROLLEDBACK, FINISHED;<a name="line.27"></a>
+<span class="sourceLineNo">027</span>  INITIALIZING, RUNNABLE, WAITING, WAITING_TIMEOUT, ROLLEDBACK, SUCCESS, FAILED;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>}<a name="line.28"></a>
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/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 9deb33d..2933dca 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -16,11 +16,11 @@
 <span class="sourceLineNo">008</span>@InterfaceAudience.Private<a name="line.8"></a>
 <span class="sourceLineNo">009</span>public class Version {<a name="line.9"></a>
 <span class="sourceLineNo">010</span>  public static final String version = "2.0.0-SNAPSHOT";<a name="line.10"></a>
-<span class="sourceLineNo">011</span>  public static final String revision = "ec5188df3090d42088b6f4cb8f0c2fd49425f8c1";<a name="line.11"></a>
+<span class="sourceLineNo">011</span>  public static final String revision = "9109803891e256f8c047af72572f07695e604a3f";<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 = "Thu Apr  6 19:09:43 UTC 2017";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Thu Apr  6 19:39:38 UTC 2017";<a name="line.13"></a>
 <span class="sourceLineNo">014</span>  public static final String url = "git://asf920.gq1.ygridcore.net/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
-<span class="sourceLineNo">015</span>  public static final String srcChecksum = "94c3021046b3fe0722ae960aa2896c3a";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "af28e08995ce91fe0c9b2e749adfbd6b";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 


[18/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html
index 35cebd9..b6b4cb6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.CompletedProcedureCleaner.html
@@ -321,7 +321,7 @@
 <span class="sourceLineNo">313</span>      final NonceKey nonceKey;<a name="line.313"></a>
 <span class="sourceLineNo">314</span>      final long procId;<a name="line.314"></a>
 <span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>      if (procIter.isNextCompleted()) {<a name="line.316"></a>
+<span class="sourceLineNo">316</span>      if (procIter.isNextFinished()) {<a name="line.316"></a>
 <span class="sourceLineNo">317</span>        ProcedureInfo proc = procIter.nextAsProcedureInfo();<a name="line.317"></a>
 <span class="sourceLineNo">318</span>        nonceKey = proc.getNonceKey();<a name="line.318"></a>
 <span class="sourceLineNo">319</span>        procId = proc.getProcId();<a name="line.319"></a>
@@ -359,7 +359,7 @@
 <span class="sourceLineNo">351</span>    HashSet&lt;Procedure&gt; waitingSet = null;<a name="line.351"></a>
 <span class="sourceLineNo">352</span>    procIter.reset();<a name="line.352"></a>
 <span class="sourceLineNo">353</span>    while (procIter.hasNext()) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      if (procIter.isNextCompleted()) {<a name="line.354"></a>
+<span class="sourceLineNo">354</span>      if (procIter.isNextFinished()) {<a name="line.354"></a>
 <span class="sourceLineNo">355</span>        procIter.skipNext();<a name="line.355"></a>
 <span class="sourceLineNo">356</span>        continue;<a name="line.356"></a>
 <span class="sourceLineNo">357</span>      }<a name="line.357"></a>
@@ -405,1450 +405,1448 @@
 <span class="sourceLineNo">397</span>          }<a name="line.397"></a>
 <span class="sourceLineNo">398</span>          waitingSet.add(proc);<a name="line.398"></a>
 <span class="sourceLineNo">399</span>          break;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        case FINISHED:<a name="line.400"></a>
-<span class="sourceLineNo">401</span>          if (proc.hasException()) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>            // add the proc to the scheduler to perform the rollback<a name="line.402"></a>
-<span class="sourceLineNo">403</span>            scheduler.addBack(proc);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          }<a name="line.404"></a>
-<span class="sourceLineNo">405</span>          break;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        case ROLLEDBACK:<a name="line.406"></a>
-<span class="sourceLineNo">407</span>        case INITIALIZING:<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          LOG.error(msg);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>          throw new UnsupportedOperationException(msg);<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        default:<a name="line.411"></a>
-<span class="sourceLineNo">412</span>          break;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      }<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    // 3. Validate the stacks<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    int corruptedCount = 0;<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    while (itStack.hasNext()) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      RootProcedureState procStack = entry.getValue();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      if (procStack.isValid()) continue;<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>      for (Procedure proc: procStack.getSubproceduresStack()) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>        LOG.error("Corrupted " + proc);<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        procedures.remove(proc.getProcId());<a name="line.426"></a>
-<span class="sourceLineNo">427</span>        runnableList.remove(proc);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        corruptedCount++;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      }<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      itStack.remove();<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    }<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>    // 4. Push the procedures to the timeout executor<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    if (waitingSet != null &amp;&amp; !waitingSet.isEmpty()) {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      for (Procedure proc: waitingSet) {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>        proc.afterReplay(getEnvironment());<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        timeoutExecutor.add(proc);<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      }<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    }<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span>    // 5. Push the procedure to the scheduler<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    if (!runnableList.isEmpty()) {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      // some procedure may be started way before this stuff.<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>        Procedure proc = runnableList.get(i);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        proc.afterReplay(getEnvironment());<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        if (!proc.hasParent()) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        }<a name="line.455"></a>
-<span class="sourceLineNo">456</span>        if (proc.wasExecuted()) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>          scheduler.addFront(proc);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        } else {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>          // if it was not in execution, it can wait.<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          scheduler.addBack(proc);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        }<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    }<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>   * Start the procedure executor.<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   *<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * @param numThreads number of threads available for procedure execution.<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.474"></a>
-<span class="sourceLineNo">475</span>   */<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    if (running.getAndSet(true)) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      LOG.warn("Already running");<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      return;<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>    // We have numThreads executor + one timer thread used for timing out<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    // procedures and triggering periodic procedures.<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    this.corePoolSize = numThreads;<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    LOG.info("Starting executor worker threads=" + corePoolSize);<a name="line.485"></a>
-<span class="sourceLineNo">486</span><a name="line.486"></a>
-<span class="sourceLineNo">487</span>    // Create the Thread Group for the executors<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    threadGroup = new ThreadGroup("ProcedureExecutor");<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>    // Create the timeout executor<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    timeoutExecutor = new TimeoutExecutorThread(threadGroup);<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>    // Create the workers<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    workerId.set(0);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    workerThreads = new CopyOnWriteArrayList&lt;&gt;();<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    for (int i = 0; i &lt; corePoolSize; ++i) {<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      workerThreads.add(new WorkerThread(threadGroup));<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    }<a name="line.498"></a>
+<span class="sourceLineNo">400</span>        case FAILED:<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          // add the proc to the scheduler to perform the rollback<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          scheduler.addBack(proc);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          break;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        case ROLLEDBACK:<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        case INITIALIZING:<a name="line.405"></a>
+<span class="sourceLineNo">406</span>          String msg = "Unexpected " + proc.getState() + " state for " + proc;<a name="line.406"></a>
+<span class="sourceLineNo">407</span>          LOG.error(msg);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>          throw new UnsupportedOperationException(msg);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        default:<a name="line.409"></a>
+<span class="sourceLineNo">410</span>          break;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    // 3. Validate the stacks<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    int corruptedCount = 0;<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    Iterator&lt;Map.Entry&lt;Long, RootProcedureState&gt;&gt; itStack = rollbackStack.entrySet().iterator();<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    while (itStack.hasNext()) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      Map.Entry&lt;Long, RootProcedureState&gt; entry = itStack.next();<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      RootProcedureState procStack = entry.getValue();<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      if (procStack.isValid()) continue;<a name="line.420"></a>
+<span class="sourceLineNo">421</span><a name="line.421"></a>
+<span class="sourceLineNo">422</span>      for (Procedure proc: procStack.getSubproceduresStack()) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>        LOG.error("Corrupted " + proc);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>        procedures.remove(proc.getProcId());<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        runnableList.remove(proc);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        if (waitingSet != null) waitingSet.remove(proc);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>        corruptedCount++;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>      }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      itStack.remove();<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    }<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span>    if (abortOnCorruption &amp;&amp; corruptedCount &gt; 0) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      throw new IOException("found " + corruptedCount + " procedures on replay");<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>    // 4. Push the procedures to the timeout executor<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    if (waitingSet != null &amp;&amp; !waitingSet.isEmpty()) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      for (Procedure proc: waitingSet) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        proc.afterReplay(getEnvironment());<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        timeoutExecutor.add(proc);<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      }<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span>    // 5. Push the procedure to the scheduler<a name="line.444"></a>
+<span class="sourceLineNo">445</span>    if (!runnableList.isEmpty()) {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      // TODO: See ProcedureWALFormatReader#hasFastStartSupport<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      // some procedure may be started way before this stuff.<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      for (int i = runnableList.size() - 1; i &gt;= 0; --i) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>        Procedure proc = runnableList.get(i);<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        proc.afterReplay(getEnvironment());<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        if (!proc.hasParent()) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          sendProcedureLoadedNotification(proc.getProcId());<a name="line.452"></a>
+<span class="sourceLineNo">453</span>        }<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        if (proc.wasExecuted()) {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          scheduler.addFront(proc);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>        } else {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          // if it was not in execution, it can wait.<a name="line.457"></a>
+<span class="sourceLineNo">458</span>          scheduler.addBack(proc);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      }<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  }<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>   * Start the procedure executor.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * It calls ProcedureStore.recoverLease() and ProcedureStore.load() to<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * recover the lease, and ensure a single executor, and start the procedure<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * replay to resume and recover the previous pending and in-progress perocedures.<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   *<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * @param numThreads number of threads available for procedure execution.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * @param abortOnCorruption true if you want to abort your service in case<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   *          a corrupted procedure is found on replay. otherwise false.<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   */<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  public void start(int numThreads, boolean abortOnCorruption) throws IOException {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    if (running.getAndSet(true)) {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      LOG.warn("Already running");<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      return;<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    }<a name="line.478"></a>
+<span class="sourceLineNo">479</span><a name="line.479"></a>
+<span class="sourceLineNo">480</span>    // We have numThreads executor + one timer thread used for timing out<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    // procedures and triggering periodic procedures.<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    this.corePoolSize = numThreads;<a name="line.482"></a>
+<span class="sourceLineNo">483</span>    LOG.info("Starting executor worker threads=" + corePoolSize);<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>    // Create the Thread Group for the executors<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    threadGroup = new ThreadGroup("ProcedureExecutor");<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>    // Create the timeout executor<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    timeoutExecutor = new TimeoutExecutorThread(threadGroup);<a name="line.489"></a>
+<span class="sourceLineNo">490</span><a name="line.490"></a>
+<span class="sourceLineNo">491</span>    // Create the workers<a name="line.491"></a>
+<span class="sourceLineNo">492</span>    workerId.set(0);<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    workerThreads = new CopyOnWriteArrayList&lt;&gt;();<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    for (int i = 0; i &lt; corePoolSize; ++i) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      workerThreads.add(new WorkerThread(threadGroup));<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    }<a name="line.496"></a>
+<span class="sourceLineNo">497</span><a name="line.497"></a>
+<span class="sourceLineNo">498</span>    long st, et;<a name="line.498"></a>
 <span class="sourceLineNo">499</span><a name="line.499"></a>
-<span class="sourceLineNo">500</span>    long st, et;<a name="line.500"></a>
-<span class="sourceLineNo">501</span><a name="line.501"></a>
-<span class="sourceLineNo">502</span>    // Acquire the store lease.<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    store.recoverLease();<a name="line.504"></a>
-<span class="sourceLineNo">505</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    LOG.info(String.format("Recover store (%s) lease: %s",<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.507"></a>
-<span class="sourceLineNo">508</span><a name="line.508"></a>
-<span class="sourceLineNo">509</span>    // start the procedure scheduler<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    scheduler.start();<a name="line.510"></a>
-<span class="sourceLineNo">511</span><a name="line.511"></a>
-<span class="sourceLineNo">512</span>    // TODO: Split in two steps.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    // The first one will make sure that we have the latest id,<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    // so we can start the threads and accept new procedures.<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    // The second step will do the actual load of old procedures.<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    load(abortOnCorruption);<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    LOG.info(String.format("Load store (%s): %s",<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.521"></a>
-<span class="sourceLineNo">522</span><a name="line.522"></a>
-<span class="sourceLineNo">523</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    if (LOG.isTraceEnabled()) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>      LOG.trace("Start workers " + workerThreads.size());<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
-<span class="sourceLineNo">527</span>    timeoutExecutor.start();<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    for (WorkerThread worker: workerThreads) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      worker.start();<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    // Internal chores<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    timeoutExecutor.add(new WorkerMonitor());<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>    // Add completed cleaner chore<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    addChore(new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  public void stop() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    if (!running.getAndSet(false)) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>      return;<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>    LOG.info("Stopping");<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    scheduler.stop();<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    timeoutExecutor.sendStopSignal();<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  @VisibleForTesting<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  public void join() {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    assert !isRunning() : "expected not running";<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>    // stop the timeout executor<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    timeoutExecutor.awaitTermination();<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    timeoutExecutor = null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>    // stop the worker threads<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    for (WorkerThread worker: workerThreads) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      worker.awaitTermination();<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    workerThreads = null;<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    // Destroy the Thread Group for the executors<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    try {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      threadGroup.destroy();<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    } catch (IllegalThreadStateException e) {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      LOG.error("Thread group " + threadGroup + " contains running threads");<a name="line.567"></a>
-<span class="sourceLineNo">568</span>      threadGroup.list();<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    } finally {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      threadGroup = null;<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>    // reset the in-memory state for testing<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    completed.clear();<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    rollbackStack.clear();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    procedures.clear();<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    nonceKeysToProcIdsMap.clear();<a name="line.577"></a>
-<span class="sourceLineNo">578</span>    scheduler.clear();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>    lastProcId.set(-1);<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  }<a name="line.580"></a>
-<span class="sourceLineNo">581</span><a name="line.581"></a>
-<span class="sourceLineNo">582</span>  public void refreshConfiguration(final Configuration conf) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    this.conf = conf;<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>  }<a name="line.586"></a>
-<span class="sourceLineNo">587</span><a name="line.587"></a>
+<span class="sourceLineNo">500</span>    // Acquire the store lease.<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    store.recoverLease();<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    LOG.info(String.format("Recover store (%s) lease: %s",<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.505"></a>
+<span class="sourceLineNo">506</span><a name="line.506"></a>
+<span class="sourceLineNo">507</span>    // start the procedure scheduler<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    scheduler.start();<a name="line.508"></a>
+<span class="sourceLineNo">509</span><a name="line.509"></a>
+<span class="sourceLineNo">510</span>    // TODO: Split in two steps.<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    // TODO: Handle corrupted procedures (currently just a warn)<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    // The first one will make sure that we have the latest id,<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    // so we can start the threads and accept new procedures.<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    // The second step will do the actual load of old procedures.<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    st = EnvironmentEdgeManager.currentTime();<a name="line.515"></a>
+<span class="sourceLineNo">516</span>    load(abortOnCorruption);<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    et = EnvironmentEdgeManager.currentTime();<a name="line.517"></a>
+<span class="sourceLineNo">518</span>    LOG.info(String.format("Load store (%s): %s",<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      store.getClass().getSimpleName(), StringUtils.humanTimeDiff(et - st)));<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span>    // Start the executors. Here we must have the lastProcId set.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    if (LOG.isTraceEnabled()) {<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      LOG.trace("Start workers " + workerThreads.size());<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    timeoutExecutor.start();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    for (WorkerThread worker: workerThreads) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      worker.start();<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
+<span class="sourceLineNo">529</span><a name="line.529"></a>
+<span class="sourceLineNo">530</span>    // Internal chores<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    timeoutExecutor.add(new WorkerMonitor());<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>    // Add completed cleaner chore<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    addChore(new CompletedProcedureCleaner(conf, store, completed, nonceKeysToProcIdsMap));<a name="line.534"></a>
+<span class="sourceLineNo">535</span>  }<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>  public void stop() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    if (!running.getAndSet(false)) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      return;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    }<a name="line.540"></a>
+<span class="sourceLineNo">541</span><a name="line.541"></a>
+<span class="sourceLineNo">542</span>    LOG.info("Stopping");<a name="line.542"></a>
+<span class="sourceLineNo">543</span>    scheduler.stop();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    timeoutExecutor.sendStopSignal();<a name="line.544"></a>
+<span class="sourceLineNo">545</span>  }<a name="line.545"></a>
+<span class="sourceLineNo">546</span><a name="line.546"></a>
+<span class="sourceLineNo">547</span>  @VisibleForTesting<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  public void join() {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    assert !isRunning() : "expected not running";<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span>    // stop the timeout executor<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    timeoutExecutor.awaitTermination();<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    timeoutExecutor = null;<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>    // stop the worker threads<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    for (WorkerThread worker: workerThreads) {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>      worker.awaitTermination();<a name="line.557"></a>
+<span class="sourceLineNo">558</span>    }<a name="line.558"></a>
+<span class="sourceLineNo">559</span>    workerThreads = null;<a name="line.559"></a>
+<span class="sourceLineNo">560</span><a name="line.560"></a>
+<span class="sourceLineNo">561</span>    // Destroy the Thread Group for the executors<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    try {<a name="line.562"></a>
+<span class="sourceLineNo">563</span>      threadGroup.destroy();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    } catch (IllegalThreadStateException e) {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      LOG.error("Thread group " + threadGroup + " contains running threads");<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      threadGroup.list();<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    } finally {<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      threadGroup = null;<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
+<span class="sourceLineNo">570</span><a name="line.570"></a>
+<span class="sourceLineNo">571</span>    // reset the in-memory state for testing<a name="line.571"></a>
+<span class="sourceLineNo">572</span>    completed.clear();<a name="line.572"></a>
+<span class="sourceLineNo">573</span>    rollbackStack.clear();<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    procedures.clear();<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    nonceKeysToProcIdsMap.clear();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    scheduler.clear();<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    lastProcId.set(-1);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
+<span class="sourceLineNo">579</span><a name="line.579"></a>
+<span class="sourceLineNo">580</span>  public void refreshConfiguration(final Configuration conf) {<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    this.conf = conf;<a name="line.581"></a>
+<span class="sourceLineNo">582</span>    setKeepAliveTime(conf.getLong(WORKER_KEEP_ALIVE_TIME_CONF_KEY,<a name="line.582"></a>
+<span class="sourceLineNo">583</span>        DEFAULT_WORKER_KEEP_ALIVE_TIME), TimeUnit.MILLISECONDS);<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>  // ==========================================================================<a name="line.586"></a>
+<span class="sourceLineNo">587</span>  //  Accessors<a name="line.587"></a>
 <span class="sourceLineNo">588</span>  // ==========================================================================<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  //  Accessors<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  // ==========================================================================<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  public boolean isRunning() {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return running.get();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return the current number of worker threads.<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   */<a name="line.597"></a>
-<span class="sourceLineNo">598</span>  public int getWorkerThreadCount() {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    return workerThreads.size();<a name="line.599"></a>
-<span class="sourceLineNo">600</span>  }<a name="line.600"></a>
-<span class="sourceLineNo">601</span><a name="line.601"></a>
-<span class="sourceLineNo">602</span>  /**<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   * @return the core pool size settings.<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   */<a name="line.604"></a>
-<span class="sourceLineNo">605</span>  public int getCorePoolSize() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    return corePoolSize;<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>  public int getActiveExecutorCount() {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    return activeExecutorCount.get();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  public TEnvironment getEnvironment() {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>    return this.environment;<a name="line.614"></a>
-<span class="sourceLineNo">615</span>  }<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>  public ProcedureStore getStore() {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    return this.store;<a name="line.618"></a>
-<span class="sourceLineNo">619</span>  }<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>  protected ProcedureScheduler getScheduler() {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    return scheduler;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>  }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>  public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    this.scheduler.signalAll();<a name="line.627"></a>
-<span class="sourceLineNo">628</span>  }<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>  public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<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">589</span>  public boolean isRunning() {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    return running.get();<a name="line.590"></a>
+<span class="sourceLineNo">591</span>  }<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span>  /**<a name="line.593"></a>
+<span class="sourceLineNo">594</span>   * @return the current number of worker threads.<a name="line.594"></a>
+<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
+<span class="sourceLineNo">596</span>  public int getWorkerThreadCount() {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    return workerThreads.size();<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  }<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span>  /**<a name="line.600"></a>
+<span class="sourceLineNo">601</span>   * @return the core pool size settings.<a name="line.601"></a>
+<span class="sourceLineNo">602</span>   */<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  public int getCorePoolSize() {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    return corePoolSize;<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  }<a name="line.605"></a>
+<span class="sourceLineNo">606</span><a name="line.606"></a>
+<span class="sourceLineNo">607</span>  public int getActiveExecutorCount() {<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    return activeExecutorCount.get();<a name="line.608"></a>
+<span class="sourceLineNo">609</span>  }<a name="line.609"></a>
+<span class="sourceLineNo">610</span><a name="line.610"></a>
+<span class="sourceLineNo">611</span>  public TEnvironment getEnvironment() {<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    return this.environment;<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>  public ProcedureStore getStore() {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    return this.store;<a name="line.616"></a>
+<span class="sourceLineNo">617</span>  }<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>  protected ProcedureScheduler getScheduler() {<a name="line.619"></a>
+<span class="sourceLineNo">620</span>    return scheduler;<a name="line.620"></a>
+<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>  public void setKeepAliveTime(final long keepAliveTime, final TimeUnit timeUnit) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    this.keepAliveTime = timeUnit.toMillis(keepAliveTime);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    this.scheduler.signalAll();<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>  public long getKeepAliveTime(final TimeUnit timeUnit) {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    return timeUnit.convert(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.629"></a>
+<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
+<span class="sourceLineNo">631</span><a name="line.631"></a>
+<span class="sourceLineNo">632</span>  // ==========================================================================<a name="line.632"></a>
+<span class="sourceLineNo">633</span>  //  Submit/Remove Chores<a name="line.633"></a>
 <span class="sourceLineNo">634</span>  // ==========================================================================<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  //  Submit/Remove Chores<a name="line.635"></a>
-<span class="sourceLineNo">636</span>  // ==========================================================================<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span>  /**<a name="line.638"></a>
-<span class="sourceLineNo">639</span>   * Add a chore procedure to the executor<a name="line.639"></a>
-<span class="sourceLineNo">640</span>   * @param chore the chore to add<a name="line.640"></a>
-<span class="sourceLineNo">641</span>   */<a name="line.641"></a>
-<span class="sourceLineNo">642</span>  public void addChore(final ProcedureInMemoryChore chore) {<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    timeoutExecutor.add(chore);<a name="line.644"></a>
-<span class="sourceLineNo">645</span>  }<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>  /**<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   * Remove a chore procedure from the executor<a name="line.648"></a>
-<span class="sourceLineNo">649</span>   * @param chore the chore to remove<a name="line.649"></a>
-<span class="sourceLineNo">650</span>   * @return whether the chore is removed, or it will be removed later<a name="line.650"></a>
-<span class="sourceLineNo">651</span>   */<a name="line.651"></a>
-<span class="sourceLineNo">652</span>  public boolean removeChore(final ProcedureInMemoryChore chore) {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    chore.setState(ProcedureState.FINISHED);<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    return timeoutExecutor.remove(chore);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>  }<a name="line.655"></a>
-<span class="sourceLineNo">656</span><a name="line.656"></a>
+<span class="sourceLineNo">635</span><a name="line.635"></a>
+<span class="sourceLineNo">636</span>  /**<a name="line.636"></a>
+<span class="sourceLineNo">637</span>   * Add a chore procedure to the executor<a name="line.637"></a>
+<span class="sourceLineNo">638</span>   * @param chore the chore to add<a name="line.638"></a>
+<span class="sourceLineNo">639</span>   */<a name="line.639"></a>
+<span class="sourceLineNo">640</span>  public void addChore(final ProcedureInMemoryChore chore) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    chore.setState(ProcedureState.WAITING_TIMEOUT);<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    timeoutExecutor.add(chore);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>  }<a name="line.643"></a>
+<span class="sourceLineNo">644</span><a name="line.644"></a>
+<span class="sourceLineNo">645</span>  /**<a name="line.645"></a>
+<span class="sourceLineNo">646</span>   * Remove a chore procedure from the executor<a name="line.646"></a>
+<span class="sourceLineNo">647</span>   * @param chore the chore to remove<a name="line.647"></a>
+<span class="sourceLineNo">648</span>   * @return whether the chore is removed, or it will be removed later<a name="line.648"></a>
+<span class="sourceLineNo">649</span>   */<a name="line.649"></a>
+<span class="sourceLineNo">650</span>  public boolean removeChore(final ProcedureInMemoryChore chore) {<a name="line.650"></a>
+<span class="sourceLineNo">651</span>    chore.setState(ProcedureState.SUCCESS);<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    return timeoutExecutor.remove(chore);<a name="line.652"></a>
+<span class="sourceLineNo">653</span>  }<a name="line.653"></a>
+<span class="sourceLineNo">654</span><a name="line.654"></a>
+<span class="sourceLineNo">655</span>  // ==========================================================================<a name="line.655"></a>
+<span class="sourceLineNo">656</span>  //  Nonce Procedure helpers<a name="line.656"></a>
 <span class="sourceLineNo">657</span>  // ==========================================================================<a name="line.657"></a>
-<span class="sourceLineNo">658</span>  //  Nonce Procedure helpers<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  // ==========================================================================<a name="line.659"></a>
-<span class="sourceLineNo">660</span>  /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>   * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * @param nonceGroup<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   * @param nonce<a name="line.663"></a>
-<span class="sourceLineNo">664</span>   * @return the generated NonceKey<a name="line.664"></a>
-<span class="sourceLineNo">665</span>   */<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>  }<a name="line.668"></a>
-<span class="sourceLineNo">669</span><a name="line.669"></a>
-<span class="sourceLineNo">670</span>  /**<a name="line.670"></a>
-<span class="sourceLineNo">671</span>   * Register a nonce for a procedure that is going to be submitted.<a name="line.671"></a>
-<span class="sourceLineNo">672</span>   * A procId will be reserved and on submitProcedure(),<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   * the procedure with the specified nonce will take the reserved ProcId.<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   * otherwise an invalid procId will be returned. and the caller should procede<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   * and submit the procedure.<a name="line.676"></a>
-<span class="sourceLineNo">677</span>   *<a name="line.677"></a>
-<span class="sourceLineNo">678</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.678"></a>
-<span class="sourceLineNo">679</span>   * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.679"></a>
-<span class="sourceLineNo">680</span>   */<a name="line.680"></a>
-<span class="sourceLineNo">681</span>  public long registerNonce(final NonceKey nonceKey) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    if (nonceKey == null) return -1;<a name="line.682"></a>
-<span class="sourceLineNo">683</span><a name="line.683"></a>
-<span class="sourceLineNo">684</span>    // check if we have already a Reserved ID for the nonce<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    if (oldProcId == null) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      // reserve a new Procedure ID, this will be associated with the nonce<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      // and the procedure submitted with the specified nonce will use this ID.<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      final long newProcId = nextProcId();<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.690"></a>
-<span class="sourceLineNo">691</span>      if (oldProcId == null) return -1;<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>    // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    // since the client expect the procedure to be submitted, spin here until it is.<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    while (isRunning() &amp;&amp;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>           !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &amp;&amp;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>           nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      if (traceEnabled) {<a name="line.700"></a>
-<span class="sourceLineNo">701</span>        LOG.trace("Waiting for procId=" + oldProcId.longValue() + " to be submitted");<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      }<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      Threads.sleep(100);<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    }<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    return oldProcId.longValue();<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  }<a name="line.706"></a>
-<span class="sourceLineNo">707</span><a name="line.707"></a>
-<span class="sourceLineNo">708</span>  /**<a name="line.708"></a>
-<span class="sourceLineNo">709</span>   * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.710"></a>
-<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    if (nonceKey == null) return;<a name="line.713"></a>
-<span class="sourceLineNo">714</span><a name="line.714"></a>
-<span class="sourceLineNo">715</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    if (procId == null) return;<a name="line.716"></a>
-<span class="sourceLineNo">717</span><a name="line.717"></a>
-<span class="sourceLineNo">718</span>    // if the procedure was not submitted, remove the nonce<a name="line.718"></a>
-<span class="sourceLineNo">719</span>    if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    }<a name="line.721"></a>
-<span class="sourceLineNo">722</span>  }<a name="line.722"></a>
-<span class="sourceLineNo">723</span><a name="line.723"></a>
-<span class="sourceLineNo">724</span>  /**<a name="line.724"></a>
-<span class="sourceLineNo">725</span>   * If the failure failed before submitting it, we may want to give back the<a name="line.725"></a>
-<span class="sourceLineNo">726</span>   * same error to the requests with the same nonceKey.<a name="line.726"></a>
-<span class="sourceLineNo">727</span>   *<a name="line.727"></a>
-<span class="sourceLineNo">728</span>   * @param nonceKey A unique identifier for this operation from the client or process<a name="line.728"></a>
-<span class="sourceLineNo">729</span>   * @param procName name of the procedure, used to inform the user<a name="line.729"></a>
-<span class="sourceLineNo">730</span>   * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * @param exception the failure to report to the user<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   */<a name="line.732"></a>
-<span class="sourceLineNo">733</span>  public void setFailureResultForNonce(final NonceKey nonceKey, final String procName,<a name="line.733"></a>
-<span class="sourceLineNo">734</span>      final User procOwner, final IOException exception) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    if (nonceKey == null) return;<a name="line.735"></a>
-<span class="sourceLineNo">736</span><a name="line.736"></a>
-<span class="sourceLineNo">737</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    if (procId == null || completed.containsKey(procId)) return;<a name="line.738"></a>
-<span class="sourceLineNo">739</span><a name="line.739"></a>
-<span class="sourceLineNo">740</span>    final long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    final ProcedureInfo result = new ProcedureInfo(procId.longValue(),<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      procName, procOwner != null ? procOwner.getShortName() : null,<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      ProcedureUtil.convertToProcedureState(ProcedureState.ROLLEDBACK),<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      -1, nonceKey, exception, currentTime, currentTime, null);<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    completed.putIfAbsent(procId, result);<a name="line.745"></a>
-<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
-<span class="sourceLineNo">747</span><a name="line.747"></a>
+<span class="sourceLineNo">658</span>  /**<a name="line.658"></a>
+<span class="sourceLineNo">659</span>   * Create a NoneKey from the specified nonceGroup and nonce.<a name="line.659"></a>
+<span class="sourceLineNo">660</span>   * @param nonceGroup<a name="line.660"></a>
+<span class="sourceLineNo">661</span>   * @param nonce<a name="line.661"></a>
+<span class="sourceLineNo">662</span>   * @return the generated NonceKey<a name="line.662"></a>
+<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
+<span class="sourceLineNo">664</span>  public NonceKey createNonceKey(final long nonceGroup, final long nonce) {<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    return (nonce == HConstants.NO_NONCE) ? null : new NonceKey(nonceGroup, nonce);<a name="line.665"></a>
+<span class="sourceLineNo">666</span>  }<a name="line.666"></a>
+<span class="sourceLineNo">667</span><a name="line.667"></a>
+<span class="sourceLineNo">668</span>  /**<a name="line.668"></a>
+<span class="sourceLineNo">669</span>   * Register a nonce for a procedure that is going to be submitted.<a name="line.669"></a>
+<span class="sourceLineNo">670</span>   * A procId will be reserved and on submitProcedure(),<a name="line.670"></a>
+<span class="sourceLineNo">671</span>   * the procedure with the specified nonce will take the reserved ProcId.<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   * If someone already reserved the nonce, this method will return the procId reserved,<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   * otherwise an invalid procId will be returned. and the caller should procede<a name="line.673"></a>
+<span class="sourceLineNo">674</span>   * and submit the procedure.<a name="line.674"></a>
+<span class="sourceLineNo">675</span>   *<a name="line.675"></a>
+<span class="sourceLineNo">676</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.676"></a>
+<span class="sourceLineNo">677</span>   * @return the procId associated with the nonce, if any otherwise an invalid procId.<a name="line.677"></a>
+<span class="sourceLineNo">678</span>   */<a name="line.678"></a>
+<span class="sourceLineNo">679</span>  public long registerNonce(final NonceKey nonceKey) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span>    if (nonceKey == null) return -1;<a name="line.680"></a>
+<span class="sourceLineNo">681</span><a name="line.681"></a>
+<span class="sourceLineNo">682</span>    // check if we have already a Reserved ID for the nonce<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    Long oldProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>    if (oldProcId == null) {<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      // reserve a new Procedure ID, this will be associated with the nonce<a name="line.685"></a>
+<span class="sourceLineNo">686</span>      // and the procedure submitted with the specified nonce will use this ID.<a name="line.686"></a>
+<span class="sourceLineNo">687</span>      final long newProcId = nextProcId();<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      oldProcId = nonceKeysToProcIdsMap.putIfAbsent(nonceKey, newProcId);<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      if (oldProcId == null) return -1;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>    }<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span>    // we found a registered nonce, but the procedure may not have been submitted yet.<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    // since the client expect the procedure to be submitted, spin here until it is.<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    while (isRunning() &amp;&amp;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>           !(procedures.containsKey(oldProcId) || completed.containsKey(oldProcId)) &amp;&amp;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>           nonceKeysToProcIdsMap.containsKey(nonceKey)) {<a name="line.697"></a>
+<span class="sourceLineNo">698</span>      if (traceEnabled) {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>        LOG.trace("Waiting for procId=" + oldProcId.longValue() + " to be submitted");<a name="line.699"></a>
+<span class="sourceLineNo">700</span>      }<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      Threads.sleep(100);<a name="line.701"></a>
+<span class="sourceLineNo">702</span>    }<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    return oldProcId.longValue();<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>  /**<a name="line.706"></a>
+<span class="sourceLineNo">707</span>   * Remove the NonceKey if the procedure was not submitted to the executor.<a name="line.707"></a>
+<span class="sourceLineNo">708</span>   * @param nonceKey A unique identifier for this operation from the client or process.<a name="line.708"></a>
+<span class="sourceLineNo">709</span>   */<a name="line.709"></a>
+<span class="sourceLineNo">710</span>  public void unregisterNonceIfProcedureWasNotSubmitted(final NonceKey nonceKey) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    if (nonceKey == null) return;<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.713"></a>
+<span class="sourceLineNo">714</span>    if (procId == null) return;<a name="line.714"></a>
+<span class="sourceLineNo">715</span><a name="line.715"></a>
+<span class="sourceLineNo">716</span>    // if the procedure was not submitted, remove the nonce<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    if (!(procedures.containsKey(procId) || completed.containsKey(procId))) {<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      nonceKeysToProcIdsMap.remove(nonceKey);<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    }<a name="line.719"></a>
+<span class="sourceLineNo">720</span>  }<a name="line.720"></a>
+<span class="sourceLineNo">721</span><a name="line.721"></a>
+<span class="sourceLineNo">722</span>  /**<a name="line.722"></a>
+<span class="sourceLineNo">723</span>   * If the failure failed before submitting it, we may want to give back the<a name="line.723"></a>
+<span class="sourceLineNo">724</span>   * same error to the requests with the same nonceKey.<a name="line.724"></a>
+<span class="sourceLineNo">725</span>   *<a name="line.725"></a>
+<span class="sourceLineNo">726</span>   * @param nonceKey A unique identifier for this operation from the client or process<a name="line.726"></a>
+<span class="sourceLineNo">727</span>   * @param procName name of the procedure, used to inform the user<a name="line.727"></a>
+<span class="sourceLineNo">728</span>   * @param procOwner name of the owner of the procedure, used to inform the user<a name="line.728"></a>
+<span class="sourceLineNo">729</span>   * @param exception the failure to report to the user<a name="line.729"></a>
+<span class="sourceLineNo">730</span>   */<a name="line.730"></a>
+<span class="sourceLineNo">731</span>  public void setFailureResultForNonce(final NonceKey nonceKey, final String procName,<a name="line.731"></a>
+<span class="sourceLineNo">732</span>      final User procOwner, final IOException exception) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    if (nonceKey == null) return;<a name="line.733"></a>
+<span class="sourceLineNo">734</span><a name="line.734"></a>
+<span class="sourceLineNo">735</span>    final Long procId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    if (procId == null || completed.containsKey(procId)) return;<a name="line.736"></a>
+<span class="sourceLineNo">737</span><a name="line.737"></a>
+<span class="sourceLineNo">738</span>    final long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.738"></a>
+<span class="sourceLineNo">739</span>    final ProcedureInfo result = new ProcedureInfo(procId.longValue(),<a name="line.739"></a>
+<span class="sourceLineNo">740</span>      procName, procOwner != null ? procOwner.getShortName() : null,<a name="line.740"></a>
+<span class="sourceLineNo">741</span>      ProcedureUtil.convertToProcedureState(ProcedureState.ROLLEDBACK),<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      -1, nonceKey, exception, currentTime, currentTime, null);<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    completed.putIfAbsent(procId, result);<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>  // ==========================================================================<a name="line.746"></a>
+<span class="sourceLineNo">747</span>  //  Submit/Abort Procedure<a name="line.747"></a>
 <span class="sourceLineNo">748</span>  // ==========================================================================<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  //  Submit/Abort Procedure<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>   * Add a new root-procedure to the executor.<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   * @param proc the new procedure to execute.<a name="line.753"></a>
-<span class="sourceLineNo">754</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.754"></a>
-<span class="sourceLineNo">755</span>   */<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  public long submitProcedure(final Procedure proc) {<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    return submitProcedure(proc, null);<a name="line.757"></a>
-<span class="sourceLineNo">758</span>  }<a name="line.758"></a>
-<span class="sourceLineNo">759</span><a name="line.759"></a>
-<span class="sourceLineNo">760</span>  /**<a name="line.760"></a>
-<span class="sourceLineNo">761</span>   * Add a new root-procedure to the executor.<a name="line.761"></a>
-<span class="sourceLineNo">762</span>   * @param proc the new procedure to execute.<a name="line.762"></a>
-<span class="sourceLineNo">763</span>   * @param nonceKey the registered unique identifier for this operation from the client or process.<a name="line.763"></a>
-<span class="sourceLineNo">764</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   */<a name="line.765"></a>
-<span class="sourceLineNo">766</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NP_NULL_ON_SOME_PATH",<a name="line.766"></a>
-<span class="sourceLineNo">767</span>      justification = "FindBugs is blind to the check-for-null")<a name="line.767"></a>
-<span class="sourceLineNo">768</span>  public long submitProcedure(final Procedure proc, final NonceKey nonceKey) {<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.770"></a>
+<span class="sourceLineNo">749</span>  /**<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   * Add a new root-procedure to the executor.<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   * @param proc the new procedure to execute.<a name="line.751"></a>
+<span class="sourceLineNo">752</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.752"></a>
+<span class="sourceLineNo">753</span>   */<a name="line.753"></a>
+<span class="sourceLineNo">754</span>  public long submitProcedure(final Procedure proc) {<a name="line.754"></a>
+<span class="sourceLineNo">755</span>    return submitProcedure(proc, null);<a name="line.755"></a>
+<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
+<span class="sourceLineNo">757</span><a name="line.757"></a>
+<span class="sourceLineNo">758</span>  /**<a name="line.758"></a>
+<span class="sourceLineNo">759</span>   * Add a new root-procedure to the executor.<a name="line.759"></a>
+<span class="sourceLineNo">760</span>   * @param proc the new procedure to execute.<a name="line.760"></a>
+<span class="sourceLineNo">761</span>   * @param nonceKey the registered unique identifier for this operation from the client or process.<a name="line.761"></a>
+<span class="sourceLineNo">762</span>   * @return the procedure id, that can be used to monitor the operation<a name="line.762"></a>
+<span class="sourceLineNo">763</span>   */<a name="line.763"></a>
+<span class="sourceLineNo">764</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NP_NULL_ON_SOME_PATH",<a name="line.764"></a>
+<span class="sourceLineNo">765</span>      justification = "FindBugs is blind to the check-for-null")<a name="line.765"></a>
+<span class="sourceLineNo">766</span>  public long submitProcedure(final Procedure proc, final NonceKey nonceKey) {<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.767"></a>
+<span class="sourceLineNo">768</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.768"></a>
+<span class="sourceLineNo">769</span><a name="line.769"></a>
+<span class="sourceLineNo">770</span>    prepareProcedure(proc);<a name="line.770"></a>
 <span class="sourceLineNo">771</span><a name="line.771"></a>
-<span class="sourceLineNo">772</span>    prepareProcedure(proc);<a name="line.772"></a>
-<span class="sourceLineNo">773</span><a name="line.773"></a>
-<span class="sourceLineNo">774</span>    final Long currentProcId;<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    if (nonceKey != null) {<a name="line.775"></a>
-<span class="sourceLineNo">776</span>      currentProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>      Preconditions.checkArgument(currentProcId != null,<a name="line.777"></a>
-<span class="sourceLineNo">778</span>        "Expected nonceKey=" + nonceKey + " to be reserved, use registerNonce(); proc=" + proc);<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    } else {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      currentProcId = nextProcId();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    }<a name="line.781"></a>
-<span class="sourceLineNo">782</span><a name="line.782"></a>
-<span class="sourceLineNo">783</span>    // Initialize the procedure<a name="line.783"></a>
-<span class="sourceLineNo">784</span>    proc.setNonceKey(nonceKey);<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    proc.setProcId(currentProcId.longValue());<a name="line.785"></a>
-<span class="sourceLineNo">786</span><a name="line.786"></a>
-<span class="sourceLineNo">787</span>    // Commit the transaction<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    store.insert(proc, null);<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    if (LOG.isDebugEnabled()) {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      LOG.debug("Stored " + proc);<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>    // Add the procedure to the executor<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    return pushProcedure(proc);<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>  /**<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   * Add a set of new root-procedure to the executor.<a name="line.798"></a>
-<span class="sourceLineNo">799</span>   * @param procs the new procedures to execute.<a name="line.799"></a>
-<span class="sourceLineNo">800</span>   */<a name="line.800"></a>
-<span class="sourceLineNo">801</span>  // TODO: Do we need to take nonces here?<a name="line.801"></a>
-<span class="sourceLineNo">802</span>  public void submitProcedures(final Procedure[] procs) {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.804"></a>
-<span class="sourceLineNo">805</span><a name="line.805"></a>
-<span class="sourceLineNo">806</span>    // Prepare procedure<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.807"></a>
-<span class="sourceLineNo">808</span>      prepareProcedure(procs[i]).setProcId(nextProcId());<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    }<a name="line.809"></a>
-<span class="sourceLineNo">810</span><a name="line.810"></a>
-<span class="sourceLineNo">811</span>    // Commit the transaction<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    store.insert(procs);<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    if (LOG.isDebugEnabled()) {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>      LOG.debug("Stored " + Arrays.toString(procs));<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>    // Add the procedure to the executor<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.818"></a>
-<span class="sourceLineNo">819</span>      pushProcedure(procs[i]);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    }<a name="line.820"></a>
-<span class="sourceLineNo">821</span>  }<a name="line.821"></a>
-<span class="sourceLineNo">822</span><a name="line.822"></a>
-<span class="sourceLineNo">823</span>  private Procedure prepareProcedure(final Procedure proc) {<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.825"></a>
-<span class="sourceLineNo">826</span>    Preconditions.checkArgument(!proc.hasParent(), "unexpected parent", proc);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>    if (this.checkOwnerSet) {<a name="line.827"></a>
-<span class="sourceLineNo">828</span>      Preconditions.checkArgument(proc.hasOwner(), "missing owner");<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    }<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    return proc;<a name="line.830"></a>
-<span class="sourceLineNo">831</span>  }<a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span>  private long pushProcedure(final Procedure proc) {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    final long currentProcId = proc.getProcId();<a name="line.834"></a>
-<span class="sourceLineNo">835</span><a name="line.835"></a>
-<span class="sourceLineNo">836</span>    // Create the rollback stack for the procedure<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    RootProcedureState stack = new RootProcedureState();<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    rollbackStack.put(currentProcId, stack);<a name="line.838"></a>
-<span class="sourceLineNo">839</span><a name="line.839"></a>
-<span class="sourceLineNo">840</span>    // Submit the new subprocedures<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    assert !procedures.containsKey(currentProcId);<a name="line.841"></a>
-<span class="sourceLineNo">842</span>    procedures.put(currentProcId, proc);<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    sendProcedureAddedNotification(currentProcId);<a name="line.843"></a>
-<span class="sourceLineNo">844</span>    scheduler.addBack(proc);<a name="line.844"></a>
-<span class="sourceLineNo">845</span>    return proc.getProcId();<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>  /**<a name="line.848"></a>
-<span class="sourceLineNo">849</span>   * Send an abort notification the specified procedure.<a name="line.849"></a>
-<span class="sourceLineNo">850</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.850"></a>
-<span class="sourceLineNo">851</span>   * @param procId the procedure to abort<a name="line.851"></a>
-<span class="sourceLineNo">852</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.852"></a>
-<span class="sourceLineNo">853</span>   */<a name="line.853"></a>
-<span class="sourceLineNo">854</span>  public boolean abort(final long procId) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    return abort(procId, true);<a name="line.855"></a>
-<span class="sourceLineNo">856</span>  }<a name="line.856"></a>
-<span class="sourceLineNo">857</span><a name="line.857"></a>
-<span class="sourceLineNo">858</span>  /**<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * Send an abort notification the specified procedure.<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * Depending on the procedure implementation the abort can be considered or ignored.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   * @param procId the procedure to abort<a name="line.861"></a>
-<span class="sourceLineNo">862</span>   * @param mayInterruptIfRunning if the proc completed at least one step, should it be aborted?<a name="line.862"></a>
-<span class="sourceLineNo">863</span>   * @return true if the procedure exist and has received the abort, otherwise false.<a name="line.863"></a>
-<span class="sourceLineNo">864</span>   */<a name="line.864"></a>
-<span class="sourceLineNo">865</span>  public boolean abort(final long procId, final boolean mayInterruptIfRunning) {<a name="line.865"></a>
-<span class="sourceLineNo">866</span>    final Procedure proc = procedures.get(procId);<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    if (proc != null) {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>      if (!mayInterruptIfRunning &amp;&amp; proc.wasExecuted()) {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        return false;<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      }<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      return proc.abort(getEnvironment());<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    }<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    return false;<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">772</span>    final Long currentProcId;<a name="line.772"></a>
+<span class="sourceLineNo">773</span>    if (nonceKey != null) {<a name="line.773"></a>
+<span class="sourceLineNo">774</span>      currentProcId = nonceKeysToProcIdsMap.get(nonceKey);<a name="line.774"></a>
+<span class="sourceLineNo">775</span>      Preconditions.checkArgument(currentProcId != null,<a name="line.775"></a>
+<span class="sourceLineNo">776</span>        "Expected nonceKey=" + nonceKey + " to be reserved, use registerNonce(); proc=" + proc);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    } else {<a name="line.777"></a>
+<span class="sourceLineNo">778</span>      currentProcId = nextProcId();<a name="line.778"></a>
+<span class="sourceLineNo">779</span>    }<a name="line.779"></a>
+<span class="sourceLineNo">780</span><a name="line.780"></a>
+<span class="sourceLineNo">781</span>    // Initialize the procedure<a name="line.781"></a>
+<span class="sourceLineNo">782</span>    proc.setNonceKey(nonceKey);<a name="line.782"></a>
+<span class="sourceLineNo">783</span>    proc.setProcId(currentProcId.longValue());<a name="line.783"></a>
+<span class="sourceLineNo">784</span><a name="line.784"></a>
+<span class="sourceLineNo">785</span>    // Commit the transaction<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    store.insert(proc, null);<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    if (LOG.isDebugEnabled()) {<a name="line.787"></a>
+<span class="sourceLineNo">788</span>      LOG.debug("Stored " + proc);<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
+<span class="sourceLineNo">790</span><a name="line.790"></a>
+<span class="sourceLineNo">791</span>    // Add the procedure to the executor<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    return pushProcedure(proc);<a name="line.792"></a>
+<span class="sourceLineNo">793</span>  }<a name="line.793"></a>
+<span class="sourceLineNo">794</span><a name="line.794"></a>
+<span class="sourceLineNo">795</span>  /**<a name="line.795"></a>
+<span class="sourceLineNo">796</span>   * Add a set of new root-procedure to the executor.<a name="line.796"></a>
+<span class="sourceLineNo">797</span>   * @param procs the new procedures to execute.<a name="line.797"></a>
+<span class="sourceLineNo">798</span>   */<a name="line.798"></a>
+<span class="sourceLineNo">799</span>  // TODO: Do we need to take nonces here?<a name="line.799"></a>
+<span class="sourceLineNo">800</span>  public void submitProcedures(final Procedure[] procs) {<a name="line.800"></a>
+<span class="sourceLineNo">801</span>    Preconditions.checkArgument(lastProcId.get() &gt;= 0);<a name="line.801"></a>
+<span class="sourceLineNo">802</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.802"></a>
+<span class="sourceLineNo">803</span><a name="line.803"></a>
+<span class="sourceLineNo">804</span>    // Prepare procedure<a name="line.804"></a>
+<span class="sourceLineNo">805</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.805"></a>
+<span class="sourceLineNo">806</span>      prepareProcedure(procs[i]).setProcId(nextProcId());<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    }<a name="line.807"></a>
+<span class="sourceLineNo">808</span><a name="line.808"></a>
+<span class="sourceLineNo">809</span>    // Commit the transaction<a name="line.809"></a>
+<span class="sourceLineNo">810</span>    store.insert(procs);<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    if (LOG.isDebugEnabled()) {<a name="line.811"></a>
+<span class="sourceLineNo">812</span>      LOG.debug("Stored " + Arrays.toString(procs));<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    }<a name="line.813"></a>
+<span class="sourceLineNo">814</span><a name="line.814"></a>
+<span class="sourceLineNo">815</span>    // Add the procedure to the executor<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.816"></a>
+<span class="sourceLineNo">817</span>      pushProcedure(procs[i]);<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
+<span class="sourceLineNo">819</span>  }<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span>  private Procedure prepareProcedure(final Procedure proc) {<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    Preconditions.checkArgument(proc.getState() == ProcedureState.INITIALIZING);<a name="line.822"></a>
+<span class="sourceLineNo">823</span>    Preconditions.checkArgument(isRunning(), "executor not running");<a name="line.823"></a>
+<span class="sourceLineNo">824</span>    Preconditions.checkArgument(!proc.hasParent(), "unexpected parent", proc);<a name="line.824"></a>
+<span class="sourceLineNo">825</span>    if (this.checkOwnerSet) {<a name="line.825"></a>
+<span class="sourceLineNo">826</span>      Preconditions.checkArgument(proc.hasOwner(), "missing owner");<a name="line.826"></a>
+<span class="sourceLineNo">827</span>    }<a name="line.827"></a>
+<span class="sourceLineNo">828</span>    return proc;<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>  private long pushProcedure(final Procedure proc) {<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    final long currentProcId = proc.getProcId();<a name="line.832"></a>
+<span class="sourceLineNo">833</span><a name="line.833"></a>
+<span class="sourceLineNo">834</span>    // Create the rollback stack for the procedure<a name="line.834"></a>
+<span class="sourceLineNo">835</span>    RootProcedureState stack = new RootProcedureState();<a name="line.835"></a>
+<span class="sourceLineNo">836</span>    rollbackStack.put(currentProcId, stack);<a name="line.836"></a>
+<span class="sourceLineNo">837</span><a name="line.837"></a>
+<span class="sourceLineNo">838</span>    // Submit the new subprocedures<a name="line.838"></a>
+<span class="sourceLineNo">839</span>    assert !procedures.containsKey(currentProcId);<a name="line.839"></a>
+<span clas

<TRUNCATED>

[19/25] hbase-site git commit: Published site at 9109803891e256f8c047af72572f07695e604a3f.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/ddcd3ebf/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/Procedure.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/Procedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/Procedure.html
index df3c58d..94f6ab6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/Procedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/Procedure.html
@@ -224,9 +224,9 @@
 <span class="sourceLineNo">216</span>  }<a name="line.216"></a>
 <span class="sourceLineNo">217</span><a name="line.217"></a>
 <span class="sourceLineNo">218</span>  /**<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   * By default, the executor will try ro run procedures start to finish.<a name="line.219"></a>
+<span class="sourceLineNo">219</span>   * By default, the executor will try to run procedures start to finish.<a name="line.219"></a>
 <span class="sourceLineNo">220</span>   * Return true to make the executor yield between each execution step to<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * give other procedures time to run their steps.<a name="line.221"></a>
+<span class="sourceLineNo">221</span>   * give other procedures a chance to run.<a name="line.221"></a>
 <span class="sourceLineNo">222</span>   * @param env the environment passed to the ProcedureExecutor<a name="line.222"></a>
 <span class="sourceLineNo">223</span>   * @return Return true if the executor should yield on completion of an execution step.<a name="line.223"></a>
 <span class="sourceLineNo">224</span>   *         Defaults to return false.<a name="line.224"></a>
@@ -279,7 +279,7 @@
 <span class="sourceLineNo">271</span>    toStringState(sb);<a name="line.271"></a>
 <span class="sourceLineNo">272</span><a name="line.272"></a>
 <span class="sourceLineNo">273</span>    if (hasException()) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      sb.append(", failed=" + getException());<a name="line.274"></a>
+<span class="sourceLineNo">274</span>      sb.append(", exception=" + getException());<a name="line.274"></a>
 <span class="sourceLineNo">275</span>    }<a name="line.275"></a>
 <span class="sourceLineNo">276</span><a name="line.276"></a>
 <span class="sourceLineNo">277</span>    sb.append(", ");<a name="line.277"></a>
@@ -514,290 +514,300 @@
 <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>   * @return true if the procedure is in a RUNNABLE state.<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   */<a name="line.510"></a>
-<span class="sourceLineNo">511</span>  protected synchronized boolean isRunnable() {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    return state == ProcedureState.RUNNABLE;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>  }<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>  public synchronized boolean isInitializing() {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    return state == ProcedureState.INITIALIZING;<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span>  /**<a name="line.519"></a>
-<span class="sourceLineNo">520</span>   * @return true if the procedure has failed.<a name="line.520"></a>
-<span class="sourceLineNo">521</span>   *         true may mean failed but not yet rolledback or failed and rolledback.<a name="line.521"></a>
-<span class="sourceLineNo">522</span>   */<a name="line.522"></a>
-<span class="sourceLineNo">523</span>  public synchronized boolean isFailed() {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    return exception != null || state == ProcedureState.ROLLEDBACK;<a name="line.524"></a>
-<span class="sourceLineNo">525</span>  }<a name="line.525"></a>
+<span class="sourceLineNo">509</span>   * Procedure has states which are defined in proto file. At some places in the code, we<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   * need to determine more about those states. Following Methods help determine:<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   *<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * {@link #isFailed()} - A procedure has executed at least once and has failed. The procedure<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   *                       may or may not have rolled back yet. Any procedure in FAILED state<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   *                       will be eventually moved to ROLLEDBACK state.<a name="line.514"></a>
+<span class="sourceLineNo">515</span>   *<a name="line.515"></a>
+<span class="sourceLineNo">516</span>   * {@link #isSuccess()} - A procedure is completed successfully without any exception.<a name="line.516"></a>
+<span class="sourceLineNo">517</span>   *<a name="line.517"></a>
+<span class="sourceLineNo">518</span>   * {@link #isFinished()} - As a procedure in FAILED state will be tried forever for rollback, only<a name="line.518"></a>
+<span class="sourceLineNo">519</span>   *                         condition when scheduler/ executor will drop procedure from further<a name="line.519"></a>
+<span class="sourceLineNo">520</span>   *                         processing is when procedure state is ROLLEDBACK or isSuccess()<a name="line.520"></a>
+<span class="sourceLineNo">521</span>   *                         returns true. This is a terminal state of the procedure.<a name="line.521"></a>
+<span class="sourceLineNo">522</span>   *<a name="line.522"></a>
+<span class="sourceLineNo">523</span>   * {@link #isWaiting()} - Procedure is in one of the two waiting states ({@link<a name="line.523"></a>
+<span class="sourceLineNo">524</span>   *                        ProcedureState#WAITING}, {@link ProcedureState#WAITING_TIMEOUT}).<a name="line.524"></a>
+<span class="sourceLineNo">525</span>   */<a name="line.525"></a>
 <span class="sourceLineNo">526</span><a name="line.526"></a>
 <span class="sourceLineNo">527</span>  /**<a name="line.527"></a>
-<span class="sourceLineNo">528</span>   * @return true if the procedure is finished successfully.<a name="line.528"></a>
+<span class="sourceLineNo">528</span>   * @return true if the procedure is in a RUNNABLE state.<a name="line.528"></a>
 <span class="sourceLineNo">529</span>   */<a name="line.529"></a>
-<span class="sourceLineNo">530</span>  public synchronized boolean isSuccess() {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    return state == ProcedureState.FINISHED &amp;&amp; exception == null;<a name="line.531"></a>
+<span class="sourceLineNo">530</span>  protected synchronized boolean isRunnable() {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>    return state == ProcedureState.RUNNABLE;<a name="line.531"></a>
 <span class="sourceLineNo">532</span>  }<a name="line.532"></a>
 <span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>  /**<a name="line.534"></a>
-<span class="sourceLineNo">535</span>   * @return true if the procedure is finished. The Procedure may be completed<a name="line.535"></a>
-<span class="sourceLineNo">536</span>   *         successfuly or failed and rolledback.<a name="line.536"></a>
-<span class="sourceLineNo">537</span>   */<a name="line.537"></a>
-<span class="sourceLineNo">538</span>  public synchronized boolean isFinished() {<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    switch (state) {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      case ROLLEDBACK:<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        return true;<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      case FINISHED:<a name="line.542"></a>
-<span class="sourceLineNo">543</span>        return exception == null;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      default:<a name="line.544"></a>
-<span class="sourceLineNo">545</span>        break;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    return false;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>  }<a name="line.548"></a>
-<span class="sourceLineNo">549</span><a name="line.549"></a>
-<span class="sourceLineNo">550</span>  /**<a name="line.550"></a>
-<span class="sourceLineNo">551</span>   * @return true if the procedure is waiting for a child to finish or for an external event.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   */<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  public synchronized boolean isWaiting() {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    switch (state) {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      case WAITING:<a name="line.555"></a>
-<span class="sourceLineNo">556</span>      case WAITING_TIMEOUT:<a name="line.556"></a>
-<span class="sourceLineNo">557</span>        return true;<a name="line.557"></a>
-<span class="sourceLineNo">558</span>      default:<a name="line.558"></a>
-<span class="sourceLineNo">559</span>        break;<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    return false;<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  }<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
-<span class="sourceLineNo">564</span>  @VisibleForTesting<a name="line.564"></a>
-<span class="sourceLineNo">565</span>  @InterfaceAudience.Private<a name="line.565"></a>
-<span class="sourceLineNo">566</span>  protected synchronized void setState(final ProcedureState state) {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    this.state = state;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    updateTimestamp();<a name="line.568"></a>
-<span class="sourceLineNo">569</span>  }<a name="line.569"></a>
-<span class="sourceLineNo">570</span><a name="line.570"></a>
-<span class="sourceLineNo">571</span>  @InterfaceAudience.Private<a name="line.571"></a>
-<span class="sourceLineNo">572</span>  protected synchronized ProcedureState getState() {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    return state;<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  }<a name="line.574"></a>
-<span class="sourceLineNo">575</span><a name="line.575"></a>
-<span class="sourceLineNo">576</span>  protected void setFailure(final String source, final Throwable cause) {<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    setFailure(new RemoteProcedureException(source, cause));<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  protected synchronized void setFailure(final RemoteProcedureException exception) {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    this.exception = exception;<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    if (!isFinished()) {<a name="line.582"></a>
-<span class="sourceLineNo">583</span>      setState(ProcedureState.FINISHED);<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><a name="line.586"></a>
-<span class="sourceLineNo">587</span>  protected void setAbortFailure(final String source, final String msg) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    setFailure(source, new ProcedureAbortedException(msg));<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>   * Called by the ProcedureExecutor when the timeout set by setTimeout() is expired.<a name="line.592"></a>
-<span class="sourceLineNo">593</span>   * @return true to let the framework handle the timeout as abort,<a name="line.593"></a>
-<span class="sourceLineNo">594</span>   *         false in case the procedure handled the timeout itself.<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   */<a name="line.595"></a>
-<span class="sourceLineNo">596</span>  protected synchronized boolean setTimeoutFailure(final TEnvironment env) {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>    if (state == ProcedureState.WAITING_TIMEOUT) {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>      long timeDiff = EnvironmentEdgeManager.currentTime() - lastUpdate;<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      setFailure("ProcedureExecutor", new TimeoutIOException(<a name="line.599"></a>
-<span class="sourceLineNo">600</span>        "Operation timed out after " + StringUtils.humanTimeDiff(timeDiff)));<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      return true;<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    }<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    return false;<a name="line.603"></a>
-<span class="sourceLineNo">604</span>  }<a name="line.604"></a>
-<span class="sourceLineNo">605</span><a name="line.605"></a>
-<span class="sourceLineNo">606</span>  public synchronized boolean hasException() {<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    return exception != null;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>  }<a name="line.608"></a>
-<span class="sourceLineNo">609</span><a name="line.609"></a>
-<span class="sourceLineNo">610</span>  public synchronized RemoteProcedureException getException() {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    return exception;<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>   * Called by the ProcedureExecutor on procedure-load to restore the latch state<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   */<a name="line.616"></a>
-<span class="sourceLineNo">617</span>  @InterfaceAudience.Private<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  protected synchronized void setChildrenLatch(final int numChildren) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    this.childrenLatch = numChildren;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>  }<a name="line.620"></a>
-<span class="sourceLineNo">621</span><a name="line.621"></a>
-<span class="sourceLineNo">622</span>  /**<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * Called by the ProcedureExecutor on procedure-load to restore the latch state<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   */<a name="line.624"></a>
-<span class="sourceLineNo">625</span>  @InterfaceAudience.Private<a name="line.625"></a>
-<span class="sourceLineNo">626</span>  protected synchronized void incChildrenLatch() {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    // TODO: can this be inferred from the stack? I think so...<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    this.childrenLatch++;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>  }<a name="line.629"></a>
-<span class="sourceLineNo">630</span><a name="line.630"></a>
-<span class="sourceLineNo">631</span>  /**<a name="line.631"></a>
-<span class="sourceLineNo">632</span>   * Called by the ProcedureExecutor to notify that one of the sub-procedures has completed.<a name="line.632"></a>
-<span class="sourceLineNo">633</span>   */<a name="line.633"></a>
-<span class="sourceLineNo">634</span>  @InterfaceAudience.Private<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  protected synchronized boolean childrenCountDown() {<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    assert childrenLatch &gt; 0: this;<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    return --childrenLatch == 0;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>  }<a name="line.638"></a>
-<span class="sourceLineNo">639</span><a name="line.639"></a>
-<span class="sourceLineNo">640</span>  @InterfaceAudience.Private<a name="line.640"></a>
-<span class="sourceLineNo">641</span>  protected synchronized boolean hasChildren() {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>    return childrenLatch &gt; 0;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>  }<a name="line.643"></a>
-<span class="sourceLineNo">644</span><a name="line.644"></a>
-<span class="sourceLineNo">645</span>  @InterfaceAudience.Private<a name="line.645"></a>
-<span class="sourceLineNo">646</span>  protected synchronized int getChildrenLatch() {<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    return childrenLatch;<a name="line.647"></a>
+<span class="sourceLineNo">534</span>  public synchronized boolean isInitializing() {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    return state == ProcedureState.INITIALIZING;<a name="line.535"></a>
+<span class="sourceLineNo">536</span>  }<a name="line.536"></a>
+<span class="sourceLineNo">537</span><a name="line.537"></a>
+<span class="sourceLineNo">538</span>  /**<a name="line.538"></a>
+<span class="sourceLineNo">539</span>   * @return true if the procedure has failed. It may or may not have rolled back.<a name="line.539"></a>
+<span class="sourceLineNo">540</span>   */<a name="line.540"></a>
+<span class="sourceLineNo">541</span>  public synchronized boolean isFailed() {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    return state == ProcedureState.FAILED || state == ProcedureState.ROLLEDBACK;<a name="line.542"></a>
+<span class="sourceLineNo">543</span>  }<a name="line.543"></a>
+<span class="sourceLineNo">544</span><a name="line.544"></a>
+<span class="sourceLineNo">545</span>  /**<a name="line.545"></a>
+<span class="sourceLineNo">546</span>   * @return true if the procedure is finished successfully.<a name="line.546"></a>
+<span class="sourceLineNo">547</span>   */<a name="line.547"></a>
+<span class="sourceLineNo">548</span>  public synchronized boolean isSuccess() {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    return state == ProcedureState.SUCCESS &amp;&amp; !hasException();<a name="line.549"></a>
+<span class="sourceLineNo">550</span>  }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552</span>  /**<a name="line.552"></a>
+<span class="sourceLineNo">553</span>   * @return true if the procedure is finished. The Procedure may be completed successfully or<a name="line.553"></a>
+<span class="sourceLineNo">554</span>   * rolledback.<a name="line.554"></a>
+<span class="sourceLineNo">555</span>   */<a name="line.555"></a>
+<span class="sourceLineNo">556</span>  public synchronized boolean isFinished() {<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    return isSuccess() || state == ProcedureState.ROLLEDBACK;<a name="line.557"></a>
+<span class="sourceLineNo">558</span>  }<a name="line.558"></a>
+<span class="sourceLineNo">559</span><a name="line.559"></a>
+<span class="sourceLineNo">560</span>  /**<a name="line.560"></a>
+<span class="sourceLineNo">561</span>   * @return true if the procedure is waiting for a child to finish or for an external event.<a name="line.561"></a>
+<span class="sourceLineNo">562</span>   */<a name="line.562"></a>
+<span class="sourceLineNo">563</span>  public synchronized boolean isWaiting() {<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    switch (state) {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      case WAITING:<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      case WAITING_TIMEOUT:<a name="line.566"></a>
+<span class="sourceLineNo">567</span>        return true;<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      default:<a name="line.568"></a>
+<span class="sourceLineNo">569</span>        break;<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    }<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    return false;<a name="line.571"></a>
+<span class="sourceLineNo">572</span>  }<a name="line.572"></a>
+<span class="sourceLineNo">573</span><a name="line.573"></a>
+<span class="sourceLineNo">574</span>  @VisibleForTesting<a name="line.574"></a>
+<span class="sourceLineNo">575</span>  @InterfaceAudience.Private<a name="line.575"></a>
+<span class="sourceLineNo">576</span>  protected synchronized void setState(final ProcedureState state) {<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    this.state = state;<a name="line.577"></a>
+<span class="sourceLineNo">578</span>    updateTimestamp();<a name="line.578"></a>
+<span class="sourceLineNo">579</span>  }<a name="line.579"></a>
+<span class="sourceLineNo">580</span><a name="line.580"></a>
+<span class="sourceLineNo">581</span>  @InterfaceAudience.Private<a name="line.581"></a>
+<span class="sourceLineNo">582</span>  protected synchronized ProcedureState getState() {<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    return state;<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>  protected void setFailure(final String source, final Throwable cause) {<a name="line.586"></a>
+<span class="sourceLineNo">587</span>    setFailure(new RemoteProcedureException(source, cause));<a name="line.587"></a>
+<span class="sourceLineNo">588</span>  }<a name="line.588"></a>
+<span class="sourceLineNo">589</span><a name="line.589"></a>
+<span class="sourceLineNo">590</span>  protected synchronized void setFailure(final RemoteProcedureException exception) {<a name="line.590"></a>
+<span class="sourceLineNo">591</span>    this.exception = exception;<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    if (!isFinished()) {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      setState(ProcedureState.FAILED);<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    }<a name="line.594"></a>
+<span class="sourceLineNo">595</span>  }<a name="line.595"></a>
+<span class="sourceLineNo">596</span><a name="line.596"></a>
+<span class="sourceLineNo">597</span>  protected void setAbortFailure(final String source, final String msg) {<a name="line.597"></a>
+<span class="sourceLineNo">598</span>    setFailure(source, new ProcedureAbortedException(msg));<a name="line.598"></a>
+<span class="sourceLineNo">599</span>  }<a name="line.599"></a>
+<span class="sourceLineNo">600</span><a name="line.600"></a>
+<span class="sourceLineNo">601</span>  /**<a name="line.601"></a>
+<span class="sourceLineNo">602</span>   * Called by the ProcedureExecutor when the timeout set by setTimeout() is expired.<a name="line.602"></a>
+<span class="sourceLineNo">603</span>   * @return true to let the framework handle the timeout as abort,<a name="line.603"></a>
+<span class="sourceLineNo">604</span>   *         false in case the procedure handled the timeout itself.<a name="line.604"></a>
+<span class="sourceLineNo">605</span>   */<a name="line.605"></a>
+<span class="sourceLineNo">606</span>  protected synchronized boolean setTimeoutFailure(final TEnvironment env) {<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    if (state == ProcedureState.WAITING_TIMEOUT) {<a name="line.607"></a>
+<span class="sourceLineNo">608</span>      long timeDiff = EnvironmentEdgeManager.currentTime() - lastUpdate;<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      setFailure("ProcedureExecutor", new TimeoutIOException(<a name="line.609"></a>
+<span class="sourceLineNo">610</span>        "Operation timed out after " + StringUtils.humanTimeDiff(timeDiff)));<a name="line.610"></a>
+<span class="sourceLineNo">611</span>      return true;<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    }<a name="line.612"></a>
+<span class="sourceLineNo">613</span>    return false;<a name="line.613"></a>
+<span class="sourceLineNo">614</span>  }<a name="line.614"></a>
+<span class="sourceLineNo">615</span><a name="line.615"></a>
+<span class="sourceLineNo">616</span>  public synchronized boolean hasException() {<a name="line.616"></a>
+<span class="sourceLineNo">617</span>    return exception != null;<a name="line.617"></a>
+<span class="sourceLineNo">618</span>  }<a name="line.618"></a>
+<span class="sourceLineNo">619</span><a name="line.619"></a>
+<span class="sourceLineNo">620</span>  public synchronized RemoteProcedureException getException() {<a name="line.620"></a>
+<span class="sourceLineNo">621</span>    return exception;<a name="line.621"></a>
+<span class="sourceLineNo">622</span>  }<a name="line.622"></a>
+<span class="sourceLineNo">623</span><a name="line.623"></a>
+<span class="sourceLineNo">624</span>  /**<a name="line.624"></a>
+<span class="sourceLineNo">625</span>   * Called by the ProcedureExecutor on procedure-load to restore the latch state<a name="line.625"></a>
+<span class="sourceLineNo">626</span>   */<a name="line.626"></a>
+<span class="sourceLineNo">627</span>  @InterfaceAudience.Private<a name="line.627"></a>
+<span class="sourceLineNo">628</span>  protected synchronized void setChildrenLatch(final int numChildren) {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    this.childrenLatch = numChildren;<a name="line.629"></a>
+<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
+<span class="sourceLineNo">631</span><a name="line.631"></a>
+<span class="sourceLineNo">632</span>  /**<a name="line.632"></a>
+<span class="sourceLineNo">633</span>   * Called by the ProcedureExecutor on procedure-load to restore the latch state<a name="line.633"></a>
+<span class="sourceLineNo">634</span>   */<a name="line.634"></a>
+<span class="sourceLineNo">635</span>  @InterfaceAudience.Private<a name="line.635"></a>
+<span class="sourceLineNo">636</span>  protected synchronized void incChildrenLatch() {<a name="line.636"></a>
+<span class="sourceLineNo">637</span>    // TODO: can this be inferred from the stack? I think so...<a name="line.637"></a>
+<span class="sourceLineNo">638</span>    this.childrenLatch++;<a name="line.638"></a>
+<span class="sourceLineNo">639</span>  }<a name="line.639"></a>
+<span class="sourceLineNo">640</span><a name="line.640"></a>
+<span class="sourceLineNo">641</span>  /**<a name="line.641"></a>
+<span class="sourceLineNo">642</span>   * Called by the ProcedureExecutor to notify that one of the sub-procedures has completed.<a name="line.642"></a>
+<span class="sourceLineNo">643</span>   */<a name="line.643"></a>
+<span class="sourceLineNo">644</span>  @InterfaceAudience.Private<a name="line.644"></a>
+<span class="sourceLineNo">645</span>  protected synchronized boolean childrenCountDown() {<a name="line.645"></a>
+<span class="sourceLineNo">646</span>    assert childrenLatch &gt; 0: this;<a name="line.646"></a>
+<span class="sourceLineNo">647</span>    return --childrenLatch == 0;<a name="line.647"></a>
 <span class="sourceLineNo">648</span>  }<a name="line.648"></a>
 <span class="sourceLineNo">649</span><a name="line.649"></a>
-<span class="sourceLineNo">650</span>  /**<a name="line.650"></a>
-<span class="sourceLineNo">651</span>   * Called by the RootProcedureState on procedure execution.<a name="line.651"></a>
-<span class="sourceLineNo">652</span>   * Each procedure store its stack-index positions.<a name="line.652"></a>
-<span class="sourceLineNo">653</span>   */<a name="line.653"></a>
-<span class="sourceLineNo">654</span>  @InterfaceAudience.Private<a name="line.654"></a>
-<span class="sourceLineNo">655</span>  protected synchronized void addStackIndex(final int index) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    if (stackIndexes == null) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      stackIndexes = new int[] { index };<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    } else {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>      int count = stackIndexes.length;<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      stackIndexes = Arrays.copyOf(stackIndexes, count + 1);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      stackIndexes[count] = index;<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    }<a name="line.662"></a>
-<span class="sourceLineNo">663</span>  }<a name="line.663"></a>
-<span class="sourceLineNo">664</span><a name="line.664"></a>
-<span class="sourceLineNo">665</span>  @InterfaceAudience.Private<a name="line.665"></a>
-<span class="sourceLineNo">666</span>  protected synchronized boolean removeStackIndex() {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>    if (stackIndexes != null &amp;&amp; stackIndexes.length &gt; 1) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      stackIndexes = Arrays.copyOf(stackIndexes, stackIndexes.length - 1);<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      return false;<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    } else {<a name="line.670"></a>
-<span class="sourceLineNo">671</span>      stackIndexes = null;<a name="line.671"></a>
-<span class="sourceLineNo">672</span>      return true;<a name="line.672"></a>
-<span class="sourceLineNo">673</span>    }<a name="line.673"></a>
-<span class="sourceLineNo">674</span>  }<a name="line.674"></a>
-<span class="sourceLineNo">675</span><a name="line.675"></a>
-<span class="sourceLineNo">676</span>  /**<a name="line.676"></a>
-<span class="sourceLineNo">677</span>   * Called on store load to initialize the Procedure internals after<a name="line.677"></a>
-<span class="sourceLineNo">678</span>   * the creation/deserialization.<a name="line.678"></a>
-<span class="sourceLineNo">679</span>   */<a name="line.679"></a>
-<span class="sourceLineNo">680</span>  @InterfaceAudience.Private<a name="line.680"></a>
-<span class="sourceLineNo">681</span>  protected synchronized void setStackIndexes(final List&lt;Integer&gt; stackIndexes) {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    this.stackIndexes = new int[stackIndexes.size()];<a name="line.682"></a>
-<span class="sourceLineNo">683</span>    for (int i = 0; i &lt; this.stackIndexes.length; ++i) {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>      this.stackIndexes[i] = stackIndexes.get(i);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    }<a name="line.685"></a>
-<span class="sourceLineNo">686</span>  }<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>  @InterfaceAudience.Private<a name="line.688"></a>
-<span class="sourceLineNo">689</span>  protected synchronized boolean wasExecuted() {<a name="line.689"></a>
-<span class="sourceLineNo">690</span>    return stackIndexes != null;<a name="line.690"></a>
-<span class="sourceLineNo">691</span>  }<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span>  @InterfaceAudience.Private<a name="line.693"></a>
-<span class="sourceLineNo">694</span>  protected synchronized int[] getStackIndexes() {<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    return stackIndexes;<a name="line.695"></a>
+<span class="sourceLineNo">650</span>  @InterfaceAudience.Private<a name="line.650"></a>
+<span class="sourceLineNo">651</span>  protected synchronized boolean hasChildren() {<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    return childrenLatch &gt; 0;<a name="line.652"></a>
+<span class="sourceLineNo">653</span>  }<a name="line.653"></a>
+<span class="sourceLineNo">654</span><a name="line.654"></a>
+<span class="sourceLineNo">655</span>  @InterfaceAudience.Private<a name="line.655"></a>
+<span class="sourceLineNo">656</span>  protected synchronized int getChildrenLatch() {<a name="line.656"></a>
+<span class="sourceLineNo">657</span>    return childrenLatch;<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>  /**<a name="line.660"></a>
+<span class="sourceLineNo">661</span>   * Called by the RootProcedureState on procedure execution.<a name="line.661"></a>
+<span class="sourceLineNo">662</span>   * Each procedure store its stack-index positions.<a name="line.662"></a>
+<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
+<span class="sourceLineNo">664</span>  @InterfaceAudience.Private<a name="line.664"></a>
+<span class="sourceLineNo">665</span>  protected synchronized void addStackIndex(final int index) {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>    if (stackIndexes == null) {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>      stackIndexes = new int[] { index };<a name="line.667"></a>
+<span class="sourceLineNo">668</span>    } else {<a name="line.668"></a>
+<span class="sourceLineNo">669</span>      int count = stackIndexes.length;<a name="line.669"></a>
+<span class="sourceLineNo">670</span>      stackIndexes = Arrays.copyOf(stackIndexes, count + 1);<a name="line.670"></a>
+<span class="sourceLineNo">671</span>      stackIndexes[count] = index;<a name="line.671"></a>
+<span class="sourceLineNo">672</span>    }<a name="line.672"></a>
+<span class="sourceLineNo">673</span>  }<a name="line.673"></a>
+<span class="sourceLineNo">674</span><a name="line.674"></a>
+<span class="sourceLineNo">675</span>  @InterfaceAudience.Private<a name="line.675"></a>
+<span class="sourceLineNo">676</span>  protected synchronized boolean removeStackIndex() {<a name="line.676"></a>
+<span class="sourceLineNo">677</span>    if (stackIndexes != null &amp;&amp; stackIndexes.length &gt; 1) {<a name="line.677"></a>
+<span class="sourceLineNo">678</span>      stackIndexes = Arrays.copyOf(stackIndexes, stackIndexes.length - 1);<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      return false;<a name="line.679"></a>
+<span class="sourceLineNo">680</span>    } else {<a name="line.680"></a>
+<span class="sourceLineNo">681</span>      stackIndexes = null;<a name="line.681"></a>
+<span class="sourceLineNo">682</span>      return true;<a name="line.682"></a>
+<span class="sourceLineNo">683</span>    }<a name="line.683"></a>
+<span class="sourceLineNo">684</span>  }<a name="line.684"></a>
+<span class="sourceLineNo">685</span><a name="line.685"></a>
+<span class="sourceLineNo">686</span>  /**<a name="line.686"></a>
+<span class="sourceLineNo">687</span>   * Called on store load to initialize the Procedure internals after<a name="line.687"></a>
+<span class="sourceLineNo">688</span>   * the creation/deserialization.<a name="line.688"></a>
+<span class="sourceLineNo">689</span>   */<a name="line.689"></a>
+<span class="sourceLineNo">690</span>  @InterfaceAudience.Private<a name="line.690"></a>
+<span class="sourceLineNo">691</span>  protected synchronized void setStackIndexes(final List&lt;Integer&gt; stackIndexes) {<a name="line.691"></a>
+<span class="sourceLineNo">692</span>    this.stackIndexes = new int[stackIndexes.size()];<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    for (int i = 0; i &lt; this.stackIndexes.length; ++i) {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>      this.stackIndexes[i] = stackIndexes.get(i);<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    }<a name="line.695"></a>
 <span class="sourceLineNo">696</span>  }<a name="line.696"></a>
 <span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span>  // ==========================================================================<a name="line.698"></a>
-<span class="sourceLineNo">699</span>  //  Internal methods - called by the ProcedureExecutor<a name="line.699"></a>
-<span class="sourceLineNo">700</span>  // ==========================================================================<a name="line.700"></a>
-<span class="sourceLineNo">701</span><a name="line.701"></a>
-<span class="sourceLineNo">702</span>  /**<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   * Internal method called by the ProcedureExecutor that starts the user-level code execute().<a name="line.703"></a>
-<span class="sourceLineNo">704</span>   */<a name="line.704"></a>
-<span class="sourceLineNo">705</span>  @InterfaceAudience.Private<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  protected Procedure[] doExecute(final TEnvironment env)<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      throws ProcedureYieldException, ProcedureSuspendedException, InterruptedException {<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    try {<a name="line.708"></a>
-<span class="sourceLineNo">709</span>      updateTimestamp();<a name="line.709"></a>
-<span class="sourceLineNo">710</span>      return execute(env);<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    } finally {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      updateTimestamp();<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    }<a name="line.713"></a>
-<span class="sourceLineNo">714</span>  }<a name="line.714"></a>
-<span class="sourceLineNo">715</span><a name="line.715"></a>
-<span class="sourceLineNo">716</span>  /**<a name="line.716"></a>
-<span class="sourceLineNo">717</span>   * Internal method called by the ProcedureExecutor that starts the user-level code rollback().<a name="line.717"></a>
-<span class="sourceLineNo">718</span>   */<a name="line.718"></a>
-<span class="sourceLineNo">719</span>  @InterfaceAudience.Private<a name="line.719"></a>
-<span class="sourceLineNo">720</span>  protected void doRollback(final TEnvironment env)<a name="line.720"></a>
-<span class="sourceLineNo">721</span>      throws IOException, InterruptedException {<a name="line.721"></a>
-<span class="sourceLineNo">722</span>    try {<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      updateTimestamp();<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      rollback(env);<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    } finally {<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      updateTimestamp();<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    }<a name="line.727"></a>
-<span class="sourceLineNo">728</span>  }<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span>  /**<a name="line.730"></a>
-<span class="sourceLineNo">731</span>   * Internal method called by the ProcedureExecutor that starts the user-level code acquireLock().<a name="line.731"></a>
-<span class="sourceLineNo">732</span>   */<a name="line.732"></a>
-<span class="sourceLineNo">733</span>  @InterfaceAudience.Private<a name="line.733"></a>
-<span class="sourceLineNo">734</span>  protected LockState doAcquireLock(final TEnvironment env) {<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    return acquireLock(env);<a name="line.735"></a>
-<span class="sourceLineNo">736</span>  }<a name="line.736"></a>
-<span class="sourceLineNo">737</span><a name="line.737"></a>
-<span class="sourceLineNo">738</span>  /**<a name="line.738"></a>
-<span class="sourceLineNo">739</span>   * Internal method called by the ProcedureExecutor that starts the user-level code releaseLock().<a name="line.739"></a>
-<span class="sourceLineNo">740</span>   */<a name="line.740"></a>
-<span class="sourceLineNo">741</span>  @InterfaceAudience.Private<a name="line.741"></a>
-<span class="sourceLineNo">742</span>  protected void doReleaseLock(final TEnvironment env) {<a name="line.742"></a>
-<span class="sourceLineNo">743</span>    releaseLock(env);<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>  @Override<a name="line.746"></a>
-<span class="sourceLineNo">747</span>  public int compareTo(final Procedure other) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    return Long.compare(getProcId(), other.getProcId());<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  }<a name="line.749"></a>
-<span class="sourceLineNo">750</span><a name="line.750"></a>
-<span class="sourceLineNo">751</span>  // ==========================================================================<a name="line.751"></a>
-<span class="sourceLineNo">752</span>  //  misc utils<a name="line.752"></a>
-<span class="sourceLineNo">753</span>  // ==========================================================================<a name="line.753"></a>
-<span class="sourceLineNo">754</span><a name="line.754"></a>
-<span class="sourceLineNo">755</span>  /**<a name="line.755"></a>
-<span class="sourceLineNo">756</span>   * Get an hashcode for the specified Procedure ID<a name="line.756"></a>
-<span class="sourceLineNo">757</span>   * @return the hashcode for the specified procId<a name="line.757"></a>
-<span class="sourceLineNo">758</span>   */<a name="line.758"></a>
-<span class="sourceLineNo">759</span>  public static long getProcIdHashCode(final long procId) {<a name="line.759"></a>
-<span class="sourceLineNo">760</span>    long h = procId;<a name="line.760"></a>
-<span class="sourceLineNo">761</span>    h ^= h &gt;&gt; 16;<a name="line.761"></a>
-<span class="sourceLineNo">762</span>    h *= 0x85ebca6b;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    h ^= h &gt;&gt; 13;<a name="line.763"></a>
-<span class="sourceLineNo">764</span>    h *= 0xc2b2ae35;<a name="line.764"></a>
-<span class="sourceLineNo">765</span>    h ^= h &gt;&gt; 16;<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    return h;<a name="line.766"></a>
-<span class="sourceLineNo">767</span>  }<a name="line.767"></a>
-<span class="sourceLineNo">768</span><a name="line.768"></a>
-<span class="sourceLineNo">769</span>  /*<a name="line.769"></a>
-<span class="sourceLineNo">770</span>   * Helper to lookup the root Procedure ID given a specified procedure.<a name="line.770"></a>
-<span class="sourceLineNo">771</span>   */<a name="line.771"></a>
-<span class="sourceLineNo">772</span>  @InterfaceAudience.Private<a name="line.772"></a>
-<span class="sourceLineNo">773</span>  protected static Long getRootProcedureId(final Map&lt;Long, Procedure&gt; procedures, Procedure proc) {<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    while (proc.hasParent()) {<a name="line.774"></a>
-<span class="sourceLineNo">775</span>      proc = procedures.get(proc.getParentProcId());<a name="line.775"></a>
-<span class="sourceLineNo">776</span>      if (proc == null) return null;<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    }<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    return proc.getProcId();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>  }<a name="line.779"></a>
-<span class="sourceLineNo">780</span><a name="line.780"></a>
-<span class="sourceLineNo">781</span>  /**<a name="line.781"></a>
-<span class="sourceLineNo">782</span>   * @param a the first procedure to be compared.<a name="line.782"></a>
-<span class="sourceLineNo">783</span>   * @param b the second procedure to be compared.<a name="line.783"></a>
-<span class="sourceLineNo">784</span>   * @return true if the two procedures have the same parent<a name="line.784"></a>
-<span class="sourceLineNo">785</span>   */<a name="line.785"></a>
-<span class="sourceLineNo">786</span>  public static boolean haveSameParent(final Procedure a, final Procedure b) {<a name="line.786"></a>
-<span class="sourceLineNo">787</span>    if (a.hasParent() &amp;&amp; b.hasParent()) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>      return a.getParentProcId() == b.getParentProcId();<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    }<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    return false;<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">698</span>  @InterfaceAudience.Private<a name="line.698"></a>
+<span class="sourceLineNo">699</span>  protected synchronized boolean wasExecuted() {<a name="line.699"></a>
+<span class="sourceLineNo">700</span>    return stackIndexes != null;<a name="line.700"></a>
+<span class="sourceLineNo">701</span>  }<a name="line.701"></a>
+<span class="sourceLineNo">702</span><a name="line.702"></a>
+<span class="sourceLineNo">703</span>  @InterfaceAudience.Private<a name="line.703"></a>
+<span class="sourceLineNo">704</span>  protected synchronized int[] getStackIndexes() {<a name="line.704"></a>
+<span class="sourceLineNo">705</span>    return stackIndexes;<a name="line.705"></a>
+<span class="sourceLineNo">706</span>  }<a name="line.706"></a>
+<span class="sourceLineNo">707</span><a name="line.707"></a>
+<span class="sourceLineNo">708</span>  // ==========================================================================<a name="line.708"></a>
+<span class="sourceLineNo">709</span>  //  Internal methods - called by the ProcedureExecutor<a name="line.709"></a>
+<span class="sourceLineNo">710</span>  // ==========================================================================<a name="line.710"></a>
+<span class="sourceLineNo">711</span><a name="line.711"></a>
+<span class="sourceLineNo">712</span>  /**<a name="line.712"></a>
+<span class="sourceLineNo">713</span>   * Internal method called by the ProcedureExecutor that starts the user-level code execute().<a name="line.713"></a>
+<span class="sourceLineNo">714</span>   */<a name="line.714"></a>
+<span class="sourceLineNo">715</span>  @InterfaceAudience.Private<a name="line.715"></a>
+<span class="sourceLineNo">716</span>  protected Procedure[] doExecute(final TEnvironment env)<a name="line.716"></a>
+<span class="sourceLineNo">717</span>      throws ProcedureYieldException, ProcedureSuspendedException, InterruptedException {<a name="line.717"></a>
+<span class="sourceLineNo">718</span>    try {<a name="line.718"></a>
+<span class="sourceLineNo">719</span>      updateTimestamp();<a name="line.719"></a>
+<span class="sourceLineNo">720</span>      return execute(env);<a name="line.720"></a>
+<span class="sourceLineNo">721</span>    } finally {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>      updateTimestamp();<a name="line.722"></a>
+<span class="sourceLineNo">723</span>    }<a name="line.723"></a>
+<span class="sourceLineNo">724</span>  }<a name="line.724"></a>
+<span class="sourceLineNo">725</span><a name="line.725"></a>
+<span class="sourceLineNo">726</span>  /**<a name="line.726"></a>
+<span class="sourceLineNo">727</span>   * Internal method called by the ProcedureExecutor that starts the user-level code rollback().<a name="line.727"></a>
+<span class="sourceLineNo">728</span>   */<a name="line.728"></a>
+<span class="sourceLineNo">729</span>  @InterfaceAudience.Private<a name="line.729"></a>
+<span class="sourceLineNo">730</span>  protected void doRollback(final TEnvironment env)<a name="line.730"></a>
+<span class="sourceLineNo">731</span>      throws IOException, InterruptedException {<a name="line.731"></a>
+<span class="sourceLineNo">732</span>    try {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>      updateTimestamp();<a name="line.733"></a>
+<span class="sourceLineNo">734</span>      rollback(env);<a name="line.734"></a>
+<span class="sourceLineNo">735</span>    } finally {<a name="line.735"></a>
+<span class="sourceLineNo">736</span>      updateTimestamp();<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    }<a name="line.737"></a>
+<span class="sourceLineNo">738</span>  }<a name="line.738"></a>
+<span class="sourceLineNo">739</span><a name="line.739"></a>
+<span class="sourceLineNo">740</span>  /**<a name="line.740"></a>
+<span class="sourceLineNo">741</span>   * Internal method called by the ProcedureExecutor that starts the user-level code acquireLock().<a name="line.741"></a>
+<span class="sourceLineNo">742</span>   */<a name="line.742"></a>
+<span class="sourceLineNo">743</span>  @InterfaceAudience.Private<a name="line.743"></a>
+<span class="sourceLineNo">744</span>  protected LockState doAcquireLock(final TEnvironment env) {<a name="line.744"></a>
+<span class="sourceLineNo">745</span>    return acquireLock(env);<a name="line.745"></a>
+<span class="sourceLineNo">746</span>  }<a name="line.746"></a>
+<span class="sourceLineNo">747</span><a name="line.747"></a>
+<span class="sourceLineNo">748</span>  /**<a name="line.748"></a>
+<span class="sourceLineNo">749</span>   * Internal method called by the ProcedureExecutor that starts the user-level code releaseLock().<a name="line.749"></a>
+<span class="sourceLineNo">750</span>   */<a name="line.750"></a>
+<span class="sourceLineNo">751</span>  @InterfaceAudience.Private<a name="line.751"></a>
+<span class="sourceLineNo">752</span>  protected void doReleaseLock(final TEnvironment env) {<a name="line.752"></a>
+<span class="sourceLineNo">753</span>    releaseLock(env);<a name="line.753"></a>
+<span class="sourceLineNo">754</span>  }<a name="line.754"></a>
+<span class="sourceLineNo">755</span><a name="line.755"></a>
+<span class="sourceLineNo">756</span>  @Override<a name="line.756"></a>
+<span class="sourceLineNo">757</span>  public int compareTo(final Procedure other) {<a name="line.757"></a>
+<span class="sourceLineNo">758</span>    return Long.compare(getProcId(), other.getProcId());<a name="line.758"></a>
+<span class="sourceLineNo">759</span>  }<a name="line.759"></a>
+<span class="sourceLineNo">760</span><a name="line.760"></a>
+<span class="sourceLineNo">761</span>  // ==========================================================================<a name="line.761"></a>
+<span class="sourceLineNo">762</span>  //  misc utils<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>  /**<a name="line.765"></a>
+<span class="sourceLineNo">766</span>   * Get an hashcode for the specified Procedure ID<a name="line.766"></a>
+<span class="sourceLineNo">767</span>   * @return the hashcode for the specified procId<a name="line.767"></a>
+<span class="sourceLineNo">768</span>   */<a name="line.768"></a>
+<span class="sourceLineNo">769</span>  public static long getProcIdHashCode(final long procId) {<a name="line.769"></a>
+<span class="sourceLineNo">770</span>    long h = procId;<a name="line.770"></a>
+<span class="sourceLineNo">771</span>    h ^= h &gt;&gt; 16;<a name="line.771"></a>
+<span class="sourceLineNo">772</span>    h *= 0x85ebca6b;<a name="line.772"></a>
+<span class="sourceLineNo">773</span>    h ^= h &gt;&gt; 13;<a name="line.773"></a>
+<span class="sourceLineNo">774</span>    h *= 0xc2b2ae35;<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    h ^= h &gt;&gt; 16;<a name="line.775"></a>
+<span class="sourceLineNo">776</span>    return h;<a name="line.776"></a>
+<span class="sourceLineNo">777</span>  }<a name="line.777"></a>
+<span class="sourceLineNo">778</span><a name="line.778"></a>
+<span class="sourceLineNo">779</span>  /*<a name="line.779"></a>
+<span class="sourceLineNo">780</span>   * Helper to lookup the root Procedure ID given a specified procedure.<a name="line.780"></a>
+<span class="sourceLineNo">781</span>   */<a name="line.781"></a>
+<span class="sourceLineNo">782</span>  @InterfaceAudience.Private<a name="line.782"></a>
+<span class="sourceLineNo">783</span>  protected static Long getRootProcedureId(final Map&lt;Long, Procedure&gt; procedures, Procedure proc) {<a name="line.783"></a>
+<span class="sourceLineNo">784</span>    while (proc.hasParent()) {<a name="line.784"></a>
+<span class="sourceLineNo">785</span>      proc = procedures.get(proc.getParentProcId());<a name="line.785"></a>
+<span class="sourceLineNo">786</span>      if (proc == null) return null;<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    }<a name="line.787"></a>
+<span class="sourceLineNo">788</span>    return proc.getProcId();<a name="line.788"></a>
+<span class="sourceLineNo">789</span>  }<a name="line.789"></a>
+<span class="sourceLineNo">790</span><a name="line.790"></a>
+<span class="sourceLineNo">791</span>  /**<a name="line.791"></a>
+<span class="sourceLineNo">792</span>   * @param a the first procedure to be compared.<a name="line.792"></a>
+<span class="sourceLineNo">793</span>   * @param b the second procedure to be compared.<a name="line.793"></a>
+<span class="sourceLineNo">794</span>   * @return true if the two procedures have the same parent<a name="line.794"></a>
+<span class="sourceLineNo">795</span>   */<a name="line.795"></a>
+<span class="sourceLineNo">796</span>  public static boolean haveSameParent(final Procedure a, final Procedure b) {<a name="line.796"></a>
+<span class="sourceLineNo">797</span>    if (a.hasParent() &amp;&amp; b.hasParent()) {<a name="line.797"></a>
+<span class="sourceLineNo">798</span>      return a.getParentProcId() == b.getParentProcId();<a name="line.798"></a>
+<span class="sourceLineNo">799</span>    }<a name="line.799"></a>
+<span class="sourceLineNo">800</span>    return false;<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>