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/08 00:05:41 UTC

[01/18] hbase-site git commit: Published site at 59e8b8e2ba4d403d042fe4cc02f8f9f80aad67af.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site 6cfe10497 -> 799947ba1


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html
index 82a82ad..cfccce7 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html
@@ -34,912 +34,911 @@
 <span class="sourceLineNo">026</span>import java.util.Arrays;<a name="line.26"></a>
 <span class="sourceLineNo">027</span>import java.util.Comparator;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>import java.util.HashSet;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.List;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.Set;<a name="line.30"></a>
-<span class="sourceLineNo">031</span><a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.commons.logging.Log;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.commons.logging.LogFactory;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.conf.Configuration;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.fs.FileSystem;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.fs.FileStatus;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.fs.Path;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HBaseCommonTestingUtility;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.LoadCounter;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.TestProcedure;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.procedure2.SequentialProcedure;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureIterator;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.io.IOUtils;<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.junit.After;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.junit.Before;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.junit.Test;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.junit.experimental.categories.Category;<a name="line.55"></a>
-<span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span>import static org.junit.Assert.assertEquals;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import static org.junit.Assert.assertFalse;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import static org.junit.Assert.assertTrue;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import static org.junit.Assert.fail;<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>@Category({MasterTests.class, SmallTests.class})<a name="line.62"></a>
-<span class="sourceLineNo">063</span>public class TestWALProcedureStore {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  private static final Log LOG = LogFactory.getLog(TestWALProcedureStore.class);<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private static final int PROCEDURE_STORE_SLOTS = 1;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private static final Procedure NULL_PROC = null;<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>  private WALProcedureStore procStore;<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private HBaseCommonTestingUtility htu;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private FileSystem fs;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private Path testDir;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private Path logDir;<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private void setupConfig(final Configuration conf) {<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    conf.setBoolean(WALProcedureStore.EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY, true);<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  @Before<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  public void setUp() throws IOException {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    htu = new HBaseCommonTestingUtility();<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    testDir = htu.getDataTestDir();<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    fs = testDir.getFileSystem(htu.getConfiguration());<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    assertTrue(testDir.depth() &gt; 1);<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>    setupConfig(htu.getConfiguration());<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    logDir = new Path(testDir, "proc-logs");<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    procStore = ProcedureTestingUtility.createWalStore(htu.getConfiguration(), fs, logDir);<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    procStore.start(PROCEDURE_STORE_SLOTS);<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    procStore.recoverLease();<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    procStore.load(new LoadCounter());<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  }<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>  @After<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  public void tearDown() throws IOException {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    procStore.stop(false);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    fs.delete(logDir, true);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private void storeRestart(ProcedureStore.ProcedureLoader loader) throws Exception {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    ProcedureTestingUtility.storeRestart(procStore, loader);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  @Test<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public void testEmptyRoll() throws Exception {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    for (int i = 0; i &lt; 10; ++i) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      procStore.periodicRollForTesting();<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    assertEquals(1, procStore.getActiveLogs().size());<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    FileStatus[] status = fs.listStatus(logDir);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    assertEquals(1, status.length);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>  @Test<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  public void testRestartWithoutData() throws Exception {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    for (int i = 0; i &lt; 10; ++i) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      final LoadCounter loader = new LoadCounter();<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      storeRestart(loader);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    LOG.info("ACTIVE WALs " + procStore.getActiveLogs());<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    assertEquals(1, procStore.getActiveLogs().size());<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    FileStatus[] status = fs.listStatus(logDir);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    assertEquals(1, status.length);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  /**<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   * Tests that tracker for all old logs are loaded back after procedure store is restarted.<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   */<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  @Test<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  public void trackersLoadedForAllOldLogs() throws Exception {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    for (int i = 0; i &lt;= 20; ++i) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      procStore.insert(new TestProcedure(i), null);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      if (i &gt; 0 &amp;&amp; (i % 5) == 0) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>        LoadCounter loader = new LoadCounter();<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        storeRestart(loader);<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>    assertEquals(5, procStore.getActiveLogs().size());<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    for (int i = 0; i &lt; procStore.getActiveLogs().size() - 1; ++i) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      ProcedureStoreTracker tracker = procStore.getActiveLogs().get(i).getTracker();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      assertTrue(tracker != null &amp;&amp; !tracker.isEmpty());<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  }<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>  @Test<a name="line.146"></a>
-<span class="sourceLineNo">147</span>  public void testWalCleanerSequentialClean() throws Exception {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    final Procedure[] procs = new Procedure[5];<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    ArrayList&lt;ProcedureWALFile&gt; logs = null;<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>    // Insert procedures and roll wal after every insert.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    for (int i = 0; i &lt; procs.length; i++) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      procs[i] = new TestSequentialProcedure();<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      procStore.insert(procs[i], null);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      procStore.rollWriterForTesting();<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      logs = procStore.getActiveLogs();<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      assertEquals(logs.size(), i + 2);  // Extra 1 for current ongoing wal.<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    }<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>    // Delete procedures in sequential order make sure that only the corresponding wal is deleted<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    // from logs list.<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    final int[] deleteOrder = new int[] { 0, 1, 2, 3, 4 };<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    for (int i = 0; i &lt; deleteOrder.length; i++) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      procStore.delete(procs[deleteOrder[i]].getProcId());<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      procStore.removeInactiveLogsForTesting();<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      assertFalse(logs.get(deleteOrder[i]).toString(),<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        procStore.getActiveLogs().contains(logs.get(deleteOrder[i])));<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      assertEquals(procStore.getActiveLogs().size(), procs.length - i);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  }<a name="line.170"></a>
+<span class="sourceLineNo">029</span>import java.util.Set;<a name="line.29"></a>
+<span class="sourceLineNo">030</span><a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.commons.logging.Log;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.commons.logging.LogFactory;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.conf.Configuration;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.fs.FileSystem;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.fs.FileStatus;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.fs.Path;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseCommonTestingUtility;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.LoadCounter;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.TestProcedure;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.procedure2.SequentialProcedure;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureIterator;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.io.IOUtils;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.junit.After;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.junit.Before;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.junit.Test;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.junit.experimental.categories.Category;<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>import static org.junit.Assert.assertEquals;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import static org.junit.Assert.assertFalse;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import static org.junit.Assert.assertTrue;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import static org.junit.Assert.fail;<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>@Category({MasterTests.class, SmallTests.class})<a name="line.61"></a>
+<span class="sourceLineNo">062</span>public class TestWALProcedureStore {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private static final Log LOG = LogFactory.getLog(TestWALProcedureStore.class);<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private static final int PROCEDURE_STORE_SLOTS = 1;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private static final Procedure NULL_PROC = null;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private WALProcedureStore procStore;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private HBaseCommonTestingUtility htu;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private FileSystem fs;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  private Path testDir;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  private Path logDir;<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>  private void setupConfig(final Configuration conf) {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    conf.setBoolean(WALProcedureStore.EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY, true);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  }<a name="line.77"></a>
+<span class="sourceLineNo">078</span><a name="line.78"></a>
+<span class="sourceLineNo">079</span>  @Before<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  public void setUp() throws IOException {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    htu = new HBaseCommonTestingUtility();<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    testDir = htu.getDataTestDir();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    fs = testDir.getFileSystem(htu.getConfiguration());<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    assertTrue(testDir.depth() &gt; 1);<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>    setupConfig(htu.getConfiguration());<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    logDir = new Path(testDir, "proc-logs");<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    procStore = ProcedureTestingUtility.createWalStore(htu.getConfiguration(), fs, logDir);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    procStore.start(PROCEDURE_STORE_SLOTS);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    procStore.recoverLease();<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    procStore.load(new LoadCounter());<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>  @After<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  public void tearDown() throws IOException {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    procStore.stop(false);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    fs.delete(logDir, true);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  }<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>  private void storeRestart(ProcedureStore.ProcedureLoader loader) throws Exception {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    ProcedureTestingUtility.storeRestart(procStore, loader);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  @Test<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  public void testEmptyRoll() throws Exception {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    for (int i = 0; i &lt; 10; ++i) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      procStore.periodicRollForTesting();<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    }<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    assertEquals(1, procStore.getActiveLogs().size());<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    FileStatus[] status = fs.listStatus(logDir);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    assertEquals(1, status.length);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  }<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>  @Test<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  public void testRestartWithoutData() throws Exception {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    for (int i = 0; i &lt; 10; ++i) {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      final LoadCounter loader = new LoadCounter();<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      storeRestart(loader);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    }<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    LOG.info("ACTIVE WALs " + procStore.getActiveLogs());<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    assertEquals(1, procStore.getActiveLogs().size());<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    FileStatus[] status = fs.listStatus(logDir);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    assertEquals(1, status.length);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  }<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span>  /**<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   * Tests that tracker for all old logs are loaded back after procedure store is restarted.<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   */<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  @Test<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  public void trackersLoadedForAllOldLogs() throws Exception {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    for (int i = 0; i &lt;= 20; ++i) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      procStore.insert(new TestProcedure(i), null);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      if (i &gt; 0 &amp;&amp; (i % 5) == 0) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        LoadCounter loader = new LoadCounter();<a name="line.134"></a>
+<span class="sourceLineNo">135</span>        storeRestart(loader);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      }<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    }<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    assertEquals(5, procStore.getActiveLogs().size());<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    for (int i = 0; i &lt; procStore.getActiveLogs().size() - 1; ++i) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      ProcedureStoreTracker tracker = procStore.getActiveLogs().get(i).getTracker();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      assertTrue(tracker != null &amp;&amp; !tracker.isEmpty());<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>  @Test<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  public void testWalCleanerSequentialClean() throws Exception {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    final Procedure[] procs = new Procedure[5];<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    ArrayList&lt;ProcedureWALFile&gt; logs = null;<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>    // Insert procedures and roll wal after every insert.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    for (int i = 0; i &lt; procs.length; i++) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      procs[i] = new TestSequentialProcedure();<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      procStore.insert(procs[i], null);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      procStore.rollWriterForTesting();<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      logs = procStore.getActiveLogs();<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      assertEquals(logs.size(), i + 2);  // Extra 1 for current ongoing wal.<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    }<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>    // Delete procedures in sequential order make sure that only the corresponding wal is deleted<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    // from logs list.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    final int[] deleteOrder = new int[] { 0, 1, 2, 3, 4 };<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    for (int i = 0; i &lt; deleteOrder.length; i++) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      procStore.delete(procs[deleteOrder[i]].getProcId());<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      procStore.removeInactiveLogsForTesting();<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      assertFalse(logs.get(deleteOrder[i]).toString(),<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        procStore.getActiveLogs().contains(logs.get(deleteOrder[i])));<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      assertEquals(procStore.getActiveLogs().size(), procs.length - i);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  }<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
 <span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>  // Test that wal cleaner doesn't create holes in wal files list i.e. it only deletes files if<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  // they are in the starting of the list.<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  @Test<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  public void testWalCleanerNoHoles() throws Exception {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    final Procedure[] procs = new Procedure[5];<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    ArrayList&lt;ProcedureWALFile&gt; logs = null;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // Insert procedures and roll wal after every insert.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    for (int i = 0; i &lt; procs.length; i++) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      procs[i] = new TestSequentialProcedure();<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      procStore.insert(procs[i], null);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      procStore.rollWriterForTesting();<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      logs = procStore.getActiveLogs();<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      assertEquals(i + 2, logs.size());  // Extra 1 for current ongoing wal.<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    }<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>    for (int i = 1; i &lt; procs.length; i++) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      procStore.delete(procs[i].getProcId());<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    assertEquals(procs.length + 1, procStore.getActiveLogs().size());<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    procStore.delete(procs[0].getProcId());<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    assertEquals(1, procStore.getActiveLogs().size());<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>  @Test<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  public void testWalCleanerUpdates() throws Exception {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    TestSequentialProcedure p1 = new TestSequentialProcedure();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    TestSequentialProcedure p2 = new TestSequentialProcedure();<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    procStore.insert(p1, null);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    procStore.insert(p2, null);<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    procStore.rollWriterForTesting();<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    ProcedureWALFile firstLog = procStore.getActiveLogs().get(0);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    procStore.update(p1);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    procStore.rollWriterForTesting();<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    procStore.update(p2);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    procStore.rollWriterForTesting();<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    procStore.removeInactiveLogsForTesting();<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    assertFalse(procStore.getActiveLogs().contains(firstLog));<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  }<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>  @Test<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  public void testWalCleanerUpdatesDontLeaveHoles() throws Exception {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    TestSequentialProcedure p1 = new TestSequentialProcedure();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    TestSequentialProcedure p2 = new TestSequentialProcedure();<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    procStore.insert(p1, null);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    procStore.insert(p2, null);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    procStore.rollWriterForTesting();  // generates first log with p1 + p2<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    ProcedureWALFile log1 = procStore.getActiveLogs().get(0);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    procStore.update(p2);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    procStore.rollWriterForTesting();  // generates second log with p2<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    ProcedureWALFile log2 = procStore.getActiveLogs().get(1);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    procStore.update(p2);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    procStore.rollWriterForTesting();  // generates third log with p2<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    procStore.removeInactiveLogsForTesting();  // Shouldn't remove 2nd log.<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    assertEquals(4, procStore.getActiveLogs().size());<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    procStore.update(p1);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    procStore.rollWriterForTesting();  // generates fourth log with p1<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    procStore.removeInactiveLogsForTesting();  // Should remove first two logs.<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    assertEquals(3, procStore.getActiveLogs().size());<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    assertFalse(procStore.getActiveLogs().contains(log1));<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    assertFalse(procStore.getActiveLogs().contains(log2));<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  }<a name="line.233"></a>
-<span class="sourceLineNo">234</span><a name="line.234"></a>
-<span class="sourceLineNo">235</span>  @Test<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  public void testWalCleanerWithEmptyRolls() throws Exception {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    final Procedure[] procs = new Procedure[3];<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      procs[i] = new TestSequentialProcedure();<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      procStore.insert(procs[i], null);<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    }<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    assertEquals(1, procStore.getActiveLogs().size());<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    procStore.rollWriterForTesting();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    assertEquals(2, procStore.getActiveLogs().size());<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    procStore.rollWriterForTesting();<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    assertEquals(3, procStore.getActiveLogs().size());<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      procStore.update(procs[i]);<a name="line.249"></a>
+<span class="sourceLineNo">172</span>  // Test that wal cleaner doesn't create holes in wal files list i.e. it only deletes files if<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  // they are in the starting of the list.<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  @Test<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  public void testWalCleanerNoHoles() throws Exception {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    final Procedure[] procs = new Procedure[5];<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    ArrayList&lt;ProcedureWALFile&gt; logs = null;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    // Insert procedures and roll wal after every insert.<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    for (int i = 0; i &lt; procs.length; i++) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      procs[i] = new TestSequentialProcedure();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      procStore.insert(procs[i], null);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      procStore.rollWriterForTesting();<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      logs = procStore.getActiveLogs();<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      assertEquals(i + 2, logs.size());  // Extra 1 for current ongoing wal.<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>    for (int i = 1; i &lt; procs.length; i++) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      procStore.delete(procs[i].getProcId());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    }<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    assertEquals(procs.length + 1, procStore.getActiveLogs().size());<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    procStore.delete(procs[0].getProcId());<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    assertEquals(1, procStore.getActiveLogs().size());<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  }<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>  @Test<a name="line.195"></a>
+<span class="sourceLineNo">196</span>  public void testWalCleanerUpdates() throws Exception {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    TestSequentialProcedure p1 = new TestSequentialProcedure();<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    TestSequentialProcedure p2 = new TestSequentialProcedure();<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    procStore.insert(p1, null);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    procStore.insert(p2, null);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    procStore.rollWriterForTesting();<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    ProcedureWALFile firstLog = procStore.getActiveLogs().get(0);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    procStore.update(p1);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    procStore.rollWriterForTesting();<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    procStore.update(p2);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    procStore.rollWriterForTesting();<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    procStore.removeInactiveLogsForTesting();<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    assertFalse(procStore.getActiveLogs().contains(firstLog));<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  }<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span>  @Test<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  public void testWalCleanerUpdatesDontLeaveHoles() throws Exception {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    TestSequentialProcedure p1 = new TestSequentialProcedure();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    TestSequentialProcedure p2 = new TestSequentialProcedure();<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    procStore.insert(p1, null);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    procStore.insert(p2, null);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    procStore.rollWriterForTesting();  // generates first log with p1 + p2<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    ProcedureWALFile log1 = procStore.getActiveLogs().get(0);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    procStore.update(p2);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    procStore.rollWriterForTesting();  // generates second log with p2<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    ProcedureWALFile log2 = procStore.getActiveLogs().get(1);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    procStore.update(p2);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    procStore.rollWriterForTesting();  // generates third log with p2<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    procStore.removeInactiveLogsForTesting();  // Shouldn't remove 2nd log.<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    assertEquals(4, procStore.getActiveLogs().size());<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    procStore.update(p1);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    procStore.rollWriterForTesting();  // generates fourth log with p1<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    procStore.removeInactiveLogsForTesting();  // Should remove first two logs.<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    assertEquals(3, procStore.getActiveLogs().size());<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    assertFalse(procStore.getActiveLogs().contains(log1));<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    assertFalse(procStore.getActiveLogs().contains(log2));<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>  @Test<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public void testWalCleanerWithEmptyRolls() throws Exception {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    final Procedure[] procs = new Procedure[3];<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      procs[i] = new TestSequentialProcedure();<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      procStore.insert(procs[i], null);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    }<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    assertEquals(1, procStore.getActiveLogs().size());<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    procStore.rollWriterForTesting();<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    assertEquals(2, procStore.getActiveLogs().size());<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    procStore.rollWriterForTesting();<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    assertEquals(3, procStore.getActiveLogs().size());<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      procStore.update(procs[i]);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      procStore.rollWriterForTesting();<a name="line.249"></a>
 <span class="sourceLineNo">250</span>      procStore.rollWriterForTesting();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      procStore.rollWriterForTesting();<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      if (i &lt; (procs.length - 1)) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        assertEquals(3 + ((i + 1) * 2), procStore.getActiveLogs().size());<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      }<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    assertEquals(7, procStore.getActiveLogs().size());<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      procStore.delete(procs[i].getProcId());<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      assertEquals(7 - ((i + 1) * 2), procStore.getActiveLogs().size());<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    assertEquals(1, procStore.getActiveLogs().size());<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>  @Test<a name="line.265"></a>
-<span class="sourceLineNo">266</span>  public void testEmptyLogLoad() throws Exception {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    LoadCounter loader = new LoadCounter();<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    storeRestart(loader);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    assertEquals(0, loader.getMaxProcId());<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    assertEquals(0, loader.getLoadedCount());<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    assertEquals(0, loader.getCorruptedCount());<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  }<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>  @Test<a name="line.274"></a>
-<span class="sourceLineNo">275</span>  public void testLoad() throws Exception {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    Set&lt;Long&gt; procIds = new HashSet&lt;&gt;();<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span>    // Insert something in the log<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    Procedure proc1 = new TestSequentialProcedure();<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    procIds.add(proc1.getProcId());<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    procStore.insert(proc1, null);<a name="line.281"></a>
-<span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>    Procedure proc2 = new TestSequentialProcedure();<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    Procedure[] child2 = new Procedure[2];<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    child2[0] = new TestSequentialProcedure();<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    child2[1] = new TestSequentialProcedure();<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span>    procIds.add(proc2.getProcId());<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    procIds.add(child2[0].getProcId());<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    procIds.add(child2[1].getProcId());<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    procStore.insert(proc2, child2);<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>    // Verify that everything is there<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    verifyProcIdsOnRestart(procIds);<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>    // Update and delete something<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    procStore.update(proc1);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    procStore.update(child2[1]);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    procStore.delete(child2[1].getProcId());<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    procIds.remove(child2[1].getProcId());<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>    // Verify that everything is there<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    verifyProcIdsOnRestart(procIds);<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>    // Remove 4 byte from the trailers<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    procStore.stop(false);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    FileStatus[] logs = fs.listStatus(logDir);<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    assertEquals(3, logs.length);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    for (int i = 0; i &lt; logs.length; ++i) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      corruptLog(logs[i], 4);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    verifyProcIdsOnRestart(procIds);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  }<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span>  @Test<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  public void testNoTrailerDoubleRestart() throws Exception {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    // log-0001: proc 0, 1 and 2 are inserted<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    Procedure proc0 = new TestSequentialProcedure();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    procStore.insert(proc0, null);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    Procedure proc1 = new TestSequentialProcedure();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    procStore.insert(proc1, null);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    Procedure proc2 = new TestSequentialProcedure();<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    procStore.insert(proc2, null);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    procStore.rollWriterForTesting();<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    // log-0002: proc 1 deleted<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    procStore.delete(proc1.getProcId());<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    procStore.rollWriterForTesting();<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>    // log-0003: proc 2 is update<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    procStore.update(proc2);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    procStore.rollWriterForTesting();<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>    // log-0004: proc 2 deleted<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    procStore.delete(proc2.getProcId());<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>    // stop the store and remove the trailer<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    procStore.stop(false);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    FileStatus[] logs = fs.listStatus(logDir);<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    assertEquals(4, logs.length);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    for (int i = 0; i &lt; logs.length; ++i) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      corruptLog(logs[i], 4);<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>    // Test Load 1<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    // Restart the store (avoid cleaning up the files, to check the rebuilded trackers)<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    htu.getConfiguration().setBoolean(WALProcedureStore.EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY, false);<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    LoadCounter loader = new LoadCounter();<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    storeRestart(loader);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    assertEquals(1, loader.getLoadedCount());<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    assertEquals(0, loader.getCorruptedCount());<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span>    // Test Load 2<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    assertEquals(5, fs.listStatus(logDir).length);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    loader = new LoadCounter();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    storeRestart(loader);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    assertEquals(1, loader.getLoadedCount());<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    assertEquals(0, loader.getCorruptedCount());<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>    // remove proc-0<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    procStore.delete(proc0.getProcId());<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    procStore.periodicRollForTesting();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    assertEquals(1, fs.listStatus(logDir).length);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    storeRestart(loader);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>  @Test<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  public void testProcIdHoles() throws Exception {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    // Insert<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    for (int i = 0; i &lt; 100; i += 2) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      procStore.insert(new TestProcedure(i), null);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      if (i &gt; 0 &amp;&amp; (i % 10) == 0) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        LoadCounter loader = new LoadCounter();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        storeRestart(loader);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        assertEquals(0, loader.getCorruptedCount());<a name="line.375"></a>
-<span class="sourceLineNo">376</span>        assertEquals((i / 2) + 1, loader.getLoadedCount());<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>    assertEquals(10, procStore.getActiveLogs().size());<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>    // Delete<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    for (int i = 0; i &lt; 100; i += 2) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      procStore.delete(i);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    assertEquals(1, procStore.getActiveLogs().size());<a name="line.385"></a>
-<span class="sourceLineNo">386</span><a name="line.386"></a>
-<span class="sourceLineNo">387</span>    LoadCounter loader = new LoadCounter();<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    storeRestart(loader);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    assertEquals(0, loader.getLoadedCount());<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    assertEquals(0, loader.getCorruptedCount());<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>  @Test<a name="line.393"></a>
-<span class="sourceLineNo">394</span>  public void testCorruptedTrailer() throws Exception {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    // Insert something<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    for (int i = 0; i &lt; 100; ++i) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      procStore.insert(new TestSequentialProcedure(), null);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    }<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span>    // Stop the store<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    procStore.stop(false);<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>    // Remove 4 byte from the trailer<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    FileStatus[] logs = fs.listStatus(logDir);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    assertEquals(1, logs.length);<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    corruptLog(logs[0], 4);<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    LoadCounter loader = new LoadCounter();<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    storeRestart(loader);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    assertEquals(100, loader.getLoadedCount());<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    assertEquals(0, loader.getCorruptedCount());<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>  private static void assertUpdated(final ProcedureStoreTracker tracker,<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      final Procedure[] procs, final int[] updatedProcs, final int[] nonUpdatedProcs) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    for (int index : updatedProcs) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      long procId = procs[index].getProcId();<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      assertTrue("Procedure id : " + procId, tracker.isUpdated(procId));<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    }<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    for (int index : nonUpdatedProcs) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      long procId = procs[index].getProcId();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      assertFalse("Procedure id : " + procId, tracker.isUpdated(procId));<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
-<span class="sourceLineNo">424</span>  }<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>  private static void assertDeleted(final ProcedureStoreTracker tracker,<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      final Procedure[] procs, final int[] deletedProcs, final int[] nonDeletedProcs) {<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    for (int index : deletedProcs) {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      long procId = procs[index].getProcId();<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      assertEquals("Procedure id : " + procId,<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          ProcedureStoreTracker.DeleteState.YES, tracker.isDeleted(procId));<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    for (int index : nonDeletedProcs) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      long procId = procs[index].getProcId();<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      assertEquals("Procedure id : " + procId,<a name="line.435"></a>
-<span class="sourceLineNo">436</span>          ProcedureStoreTracker.DeleteState.NO, tracker.isDeleted(procId));<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  @Test<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  public void testCorruptedTrailersRebuild() throws Exception {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    final Procedure[] procs = new Procedure[6];<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      procs[i] = new TestSequentialProcedure();<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    }<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    // Log State (I=insert, U=updated, D=delete)<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    //   | log 1 | log 2 | log 3 |<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    // 0 | I, D  |       |       |<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    // 1 | I     |       |       |<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    // 2 | I     | D     |       |<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    // 3 | I     | U     |       |<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    // 4 |       | I     | D     |<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    // 5 |       |       | I     |<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    procStore.insert(procs[0], null);<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    procStore.insert(procs[1], null);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    procStore.insert(procs[2], null);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    procStore.insert(procs[3], null);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    procStore.delete(procs[0].getProcId());<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    procStore.rollWriterForTesting();<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    procStore.delete(procs[2].getProcId());<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    procStore.update(procs[3]);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    procStore.insert(procs[4], null);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    procStore.rollWriterForTesting();<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    procStore.delete(procs[4].getProcId());<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    procStore.insert(procs[5], null);<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>    // Stop the store<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    procStore.stop(false);<a name="line.468"></a>
-<span class="sourceLineNo">469</span><a name="line.469"></a>
-<span class="sourceLineNo">470</span>    // Remove 4 byte from the trailers<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    final FileStatus[] logs = fs.listStatus(logDir);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    assertEquals(3, logs.length);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    for (int i = 0; i &lt; logs.length; ++i) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      corruptLog(logs[i], 4);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span>    // Restart the store (avoid cleaning up the files, to check the rebuilded trackers)<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    htu.getConfiguration().setBoolean(WALProcedureStore.EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY, false);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    final LoadCounter loader = new LoadCounter();<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    storeRestart(loader);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    assertEquals(3, loader.getLoadedCount());  // procs 1, 3 and 5<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    assertEquals(0, loader.getCorruptedCount());<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>    // Check the Trackers<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    final ArrayList&lt;ProcedureWALFile&gt; walFiles = procStore.getActiveLogs();<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    LOG.info("WALs " + walFiles);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    assertEquals(4, walFiles.size());<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    LOG.info("Checking wal " + walFiles.get(0));<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    assertUpdated(walFiles.get(0).getTracker(), procs, new int[]{0, 1, 2, 3}, new int[] {4, 5});<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    LOG.info("Checking wal " + walFiles.get(1));<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    assertUpdated(walFiles.get(1).getTracker(), procs, new int[]{2, 3, 4}, new int[] {0, 1, 5});<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    LOG.info("Checking wal " + walFiles.get(2));<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    assertUpdated(walFiles.get(2).getTracker(), procs, new int[]{4, 5}, new int[] {0, 1, 2, 3});<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    LOG.info("Checking global tracker ");<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    assertDeleted(procStore.getStoreTracker(), procs, new int[]{0, 2, 4}, new int[] {1, 3, 5});<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>  @Test<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  public void testCorruptedEntries() throws Exception {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    // Insert something<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    for (int i = 0; i &lt; 100; ++i) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      procStore.insert(new TestSequentialProcedure(), null);<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>    // Stop the store<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    procStore.stop(false);<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span>    // Remove some byte from the log<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    // (enough to cut the trailer and corrupt some entries)<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    FileStatus[] logs = fs.listStatus(logDir);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    assertEquals(1, logs.length);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    corruptLog(logs[0], 1823);<a name="line.512"></a>
-<span class="sourceLineNo">513</span><a name="line.513"></a>
-<span class="sourceLineNo">514</span>    LoadCounter loader = new LoadCounter();<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    storeRestart(loader);<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    assertTrue(procStore.getCorruptedLogs() != null);<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    assertEquals(1, procStore.getCorruptedLogs().size());<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    assertEquals(85, loader.getLoadedCount());<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    assertEquals(0, loader.getCorruptedCount());<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>  @Test<a name="line.522"></a>
-<span class="sourceLineNo">523</span>  public void testCorruptedProcedures() throws Exception {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    // Insert root-procedures<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    TestProcedure[] rootProcs = new TestProcedure[10];<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    for (int i = 1; i &lt;= rootProcs.length; i++) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      rootProcs[i-1] = new TestProcedure(i, 0);<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      procStore.insert(rootProcs[i-1], null);<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      rootProcs[i-1].addStackId(0);<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      procStore.update(rootProcs[i-1]);<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    // insert root-child txn<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    procStore.rollWriterForTesting();<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    for (int i = 1; i &lt;= rootProcs.length; i++) {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      TestProcedure b = new TestProcedure(rootProcs.length + i, i);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      rootProcs[i-1].addStackId(1);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      procStore.insert(rootProcs[i-1], new Procedure[] { b });<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    // insert child updates<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    procStore.rollWriterForTesting();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    for (int i = 1; i &lt;= rootProcs.length; i++) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      procStore.update(new TestProcedure(rootProcs.length + i, i));<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>    // Stop the store<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    procStore.stop(false);<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>    // the first log was removed,<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    // we have insert-txn and updates in the others so everything is fine<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    FileStatus[] logs = fs.listStatus(logDir);<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    assertEquals(Arrays.toString(logs), 2, logs.length);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    Arrays.sort(logs, new Comparator&lt;FileStatus&gt;() {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      @Override<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      public int compare(FileStatus o1, FileStatus o2) {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>        return o1.getPath().getName().compareTo(o2.getPath().getName());<a name="line.555"></a>
-<span class="sourceLineNo">556</span>      }<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    });<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>    LoadCounter loader = new LoadCounter();<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    storeRestart(loader);<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    assertEquals(rootProcs.length * 2, loader.getLoadedCount());<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    assertEquals(0, loader.getCorruptedCount());<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
-<span class="sourceLineNo">564</span>    // Remove the second log, we have lost all the root/parent references<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    fs.delete(logs[0].getPath(), false);<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    loader.reset();<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    storeRestart(loader);<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    assertEquals(0, loader.getLoadedCount());<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    assertEquals(rootProcs.length, loader.getCorruptedCount());<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    for (Procedure proc: loader.getCorrupted()) {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      assertTrue(proc.toString(), proc.getParentProcId() &lt;= rootProcs.length);<a name="line.571"></a>
-<span class="sourceLineNo">572</span>      assertTrue(proc.toString(),<a name="line.572"></a>
-<span class="sourceLineNo">573</span>                  proc.getProcId() &gt; rootProcs.length &amp;&amp;<a name="line.573"></a>
-<span class="sourceLineNo">574</span>                  proc.getProcId() &lt;= (rootProcs.length * 2));<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    }<a name="line.575"></a>
-<span class="sourceLineNo">576</span>  }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>  @Test(timeout=60000)<a name="line.578"></a>
-<span class="sourceLineNo">579</span>  public void testWalReplayOrder_AB_A() throws Exception {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    /*<a name="line.580"></a>
-<span class="sourceLineNo">581</span>     * | A B | -&gt; | A |<a name="line.581"></a>
-<span class="sourceLineNo">582</span>     */<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    TestProcedure a = new TestProcedure(1, 0);<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    TestProcedure b = new TestProcedure(2, 1);<a name="line.584"></a>
-<span class="sourceLineNo">585</span><a name="line.585"></a>
-<span class="sourceLineNo">586</span>    procStore.insert(a, null);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    a.addStackId(0);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    procStore.update(a);<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>    procStore.insert(a, new Procedure[] { b });<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    b.addStackId(1);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    procStore.update(b);<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span>    procStore.rollWriterForTesting();<a name="line.594"></a>
-<span class="sourceLineNo">595</span><a name="line.595"></a>
-<span class="sourceLineNo">596</span>    a.addStackId(2);<a name="line.596"></a>
-<span class="sourceLineNo">597</span>    procStore.update(a);<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span>    storeRestart(new ProcedureStore.ProcedureLoader() {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      @Override<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      public void setMaxProcId(long maxProcId) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>        assertEquals(2, maxProcId);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      }<a name="line.603"></a>
-<span class="sourceLineNo">604</span><a name="line.604"></a>
-<span class="sourceLineNo">605</span>      @Override<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      public void load(ProcedureIterator procIter) throws IOException {<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        assertTrue(procIter.hasNext());<a name="line.607"></a>
-<span class="sourceLineNo">608</span>        assertEquals(1, procIter.nextAsProcedureInfo().getProcId());<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        assertTrue(procIter.hasNext());<a name="line.609"></a>
-<span class="sourceLineNo">610</span>        assertEquals(2, procIter.nextAsProcedureInfo().getProcId());<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        assertFalse(procIter.hasNext());<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>      @Override<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.615"></a>
-<span class="sourceLineNo">616</span>        assertFalse(procIter.hasNext());<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>  }<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>  @Test(timeout=60000)<a name="line.621"></a>
-<span class="sourceLineNo">622</span>  public void testWalReplayOrder_ABC_BAD() throws Exception {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    /*<a name="line.623"></a>
-<span class="sourceLineNo">624</span>     * | A B C | -&gt; | B A D |<a name="line.624"></a>
-<span class="sourceLineNo">625</span>     */<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    TestProcedure a = new TestProcedure(1, 0);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    TestProcedure b = new TestProcedure(2, 1);<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    TestProcedure c = new TestProcedure(3, 2);<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    TestProcedure d = new TestProcedure(4, 0);<a name="line.629"></a>
-<span class="sourceLineNo">630</span><a name="line.630"></a>
-<span class="sourceLineNo">631</span>    procStore.insert(a, null);<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    a.addStackId(0);<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    procStore.update(a);<a name="line.633"></a>
-<span class="sourceLineNo">634</span><a name="line.634"></a>
-<span class="sourceLineNo">635</span>    procStore.insert(a, new Procedure[] { b });<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    b.addStackId(1);<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    procStore.update(b);<a name="line.637"></a>
-<span class="sourceLineNo">638</span><a name="line.638"></a>
-<span class="sourceLineNo">639</span>    procStore.insert(b, new Procedure[] { c });<a name="line.639"></a>
-<span class="sourceLineNo">640</span>    b.addStackId(2);<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    procStore.update(b);<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span>    procStore.rollWriterForTesting();<a name="line.643"></a>
-<span class="sourceLineNo">644</span><a name="line.644"></a>
-<span class="sourceLineNo">645</span>    b.addStackId(3);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    procStore.update(b);<a name="line.646"></a>
-<span class="sourceLineNo">647</span><a name="line.647"></a>
-<span class="sourceLineNo">648</span>    a.addStackId(4);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    procStore.update(a);<a name="line.649"></a>
-<span class="sourceLineNo">650</span><a name="line.650"></a>
-<span class="sourceLineNo">651</span>    procStore.insert(d, null);<a name="line.651"></a>
-<span class="sourceLineNo">652</span>    d.addStackId(0);<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    procStore.update(d);<a name="line.653"></a>
-<span class="sourceLineNo">654</span><a name="line.654"></a>
-<span class="sourceLineNo">655</span>    storeRestart(new ProcedureStore.ProcedureLoader() {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      @Override<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      public void setMaxProcId(long maxProcId) {<a name="line.657"></a>
-<span class="sourceLineNo">658</span>        assertEquals(4, maxProcId);<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>      @Override<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      public void load(ProcedureIterator procIter) throws IOException {<a name="line.662"></a>
-<span class="sourceLineNo">663</span>        assertTrue(procIter.hasNext());<a name="line.663"></a>
-<span class="sourceLineNo">664</span>        assertEquals(4, procIter.nextAsProcedureInfo().getProcId());<a name="line.664"></a>
-<span class="sourceLineNo">665</span>        // TODO: This will be multiple call once we do fast-start<a name="line.665"></a>
-<span class="sourceLineNo">666</span>        //assertFalse(procIter.hasNext());<a name="line.666"></a>
-<span class="sourceLineNo">667</span><a name="line.667"></a>
-<span class="sourceLineNo">668</span>        assertTrue(procIter.hasNext());<a name="line.668"></a>
-<span class="sourceLineNo">669</span>        assertEquals(1, procIter.nextAsProcedureInfo().getProcId());<a name="line.669"></a>
-<span class="sourceLineNo">670</span>        assertTrue(procIter.hasNext());<a name="line.670"></a>
-<span class="sourceLineNo">671</span>        assertEquals(2, procIter.nextAsProcedureInfo().getProcId());<a name="line.671"></a>
-<span class="sourceLineNo">672</span>        assertTrue(procIter.hasNext());<a name="line.672"></a>
-<span class="sourceLineNo">673</span>        assertEquals(3, procIter.nextAsProcedureInfo().getProcId());<a name="line.673"></a>
-<span class="sourceLineNo">674</span>        assertFalse(procIter.hasNext());<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>      @Override<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>        assertFalse(procIter.hasNext());<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      }<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    });<a name="line.681"></a>
-<span class="sourceLineNo">682</span>  }<a name="line.682"></a>
-<span class="sourceLineNo">683</span><a name="line.683"></a>
-<span class="sourceLineNo">684</span>  @Test<a name="line.684"></a>
-<span class="sourceLineNo">685</span>  public void testRollAndRemove() throws IOException {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    // Insert something in the log<a name="line.686"></a>
-<span class="sourceLineNo">687</span>    Procedure proc1 = new TestSequentialProcedure();<a name="line.687"></a>
-<span class="sourceLineNo">688</span>    procStore.insert(proc1, null);<a name="line.688"></a>
-<span class="sourceLineNo">689</span><a name="line.689"></a>
-<span class="sourceLineNo">690</span>    Procedure proc2 = new TestSequentialProcedure();<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    procStore.insert(proc2, null);<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span>    // roll the log, now we have 2<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    procStore.rollWriterForTesting();<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    assertEquals(2, procStore.getActiveLogs().size());<a name="line.695"></a>
-<span class="sourceLineNo">696</span><a name="line.696"></a>
-<span class="sourceLineNo">697</span>    // everything will be up to date in the second log<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    // so we can remove the first one<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    procStore.update(proc1);<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    procStore.update(proc2);<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    assertEquals(1, procStore.getActiveLogs().size());<a name="line.701"></a>
-<span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span>    // roll the log, now we have 2<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    procStore.rollWriterForTesting();<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    assertEquals(2, procStore.getActiveLogs().size());<a name="line.705"></a>
-<span class="sourceLineNo">706</span><a name="line.706"></a>
-<span class="sourceLineNo">707</span>    // remove everything active<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    // so we can remove all the logs<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    procStore.delete(proc1.getProcId());<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    procStore.delete(proc2.getProcId());<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    assertEquals(1, procStore.getActiveLogs().size());<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span>  @Test<a name="line.714"></a>
-<span class="sourceLineNo">715</span>  public void testFileNotFoundDuringLeaseRecovery() throws IOException {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    final TestProcedure[] procs = new TestProcedure[3];<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.717"></a>
-<span class="sourceLineNo">718</span>      procs[i] = new TestProcedure(i + 1, 0);<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      procStore.insert(procs[i], null);<a name="line.719"></a>
-<span class="sourceLineNo">720</span>    }<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    procStore.rollWriterForTesting();<a name="line.721"></a>
-<span class="sourceLineNo">722</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      procStore.update(procs[i]);<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      procStore.rollWriterForTesting();<a name="line.724"></a>
-<span class="sourceL

<TRUNCATED>

[05/18] hbase-site git commit: Published site at 59e8b8e2ba4d403d042fe4cc02f8f9f80aad67af.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 33a31fe..3f12aad 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 = "format", type = "String"),<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<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 = "serverManager", type = "ServerManager"),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<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 = "frags", type = "Map&lt;String,Integer&gt;")})<a name="line.72"></a>
+<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<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 = "servers", type = "List&lt;ServerName&gt;"),<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<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">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,159 +118,159 @@
 <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>    // 21, 1<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<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>      // 21, 1<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      m_frags = frags;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      m_frags__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 Map&lt;String,Integer&gt; getFrags()<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_frags;<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 Map&lt;String,Integer&gt; m_frags;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    public boolean getFrags__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_frags__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>    // 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">129</span>    private boolean m_frags__IsNotDefault;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    // 28, 1<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    public void setServerManager(ServerManager serverManager)<a name="line.131"></a>
 <span class="sourceLineNo">132</span>    {<a name="line.132"></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">133</span>      // 28, 1<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      m_serverManager = serverManager;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      m_serverManager__IsNotDefault = true;<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    }<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    public String getFormat()<a name="line.137"></a>
+<span class="sourceLineNo">137</span>    public ServerManager getServerManager()<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      return m_format;<a name="line.139"></a>
+<span class="sourceLineNo">139</span>      return m_serverManager;<a name="line.139"></a>
 <span class="sourceLineNo">140</span>    }<a name="line.140"></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">141</span>    private ServerManager m_serverManager;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    public boolean getServerManager__IsNotDefault()<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      return m_format__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">144</span>      return m_serverManager__IsNotDefault;<a name="line.144"></a>
 <span class="sourceLineNo">145</span>    }<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    private boolean m_format__IsNotDefault;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    // 23, 1<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.148"></a>
+<span class="sourceLineNo">146</span>    private boolean m_serverManager__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>      // 23, 1<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      m_servers = servers;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      m_servers__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 List&lt;ServerName&gt; getServers()<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_servers;<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 List&lt;ServerName&gt; m_servers;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    public boolean getServers__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_servers__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_servers__IsNotDefault;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    // 22, 1<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    public void setMetaLocation(ServerName metaLocation)<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>    // 23, 1<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.165"></a>
 <span class="sourceLineNo">166</span>    {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      // 22, 1<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      m_metaLocation = metaLocation;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      m_metaLocation__IsNotDefault = true;<a name="line.169"></a>
+<span class="sourceLineNo">167</span>      // 23, 1<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      m_servers = servers;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      m_servers__IsNotDefault = true;<a name="line.169"></a>
 <span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    public ServerName getMetaLocation()<a name="line.171"></a>
+<span class="sourceLineNo">171</span>    public List&lt;ServerName&gt; getServers()<a name="line.171"></a>
 <span class="sourceLineNo">172</span>    {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      return m_metaLocation;<a name="line.173"></a>
+<span class="sourceLineNo">173</span>      return m_servers;<a name="line.173"></a>
 <span class="sourceLineNo">174</span>    }<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    private ServerName m_metaLocation;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.176"></a>
+<span class="sourceLineNo">175</span>    private List&lt;ServerName&gt; m_servers;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    public boolean getServers__IsNotDefault()<a name="line.176"></a>
 <span class="sourceLineNo">177</span>    {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      return m_metaLocation__IsNotDefault;<a name="line.178"></a>
+<span class="sourceLineNo">178</span>      return m_servers__IsNotDefault;<a name="line.178"></a>
 <span class="sourceLineNo">179</span>    }<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    private boolean m_metaLocation__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">180</span>    private boolean m_servers__IsNotDefault;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    // 27, 1<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    public void setFormat(String format)<a name="line.182"></a>
 <span class="sourceLineNo">183</span>    {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      // 24, 1<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      m_deadServers = deadServers;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      m_deadServers__IsNotDefault = true;<a name="line.186"></a>
+<span class="sourceLineNo">184</span>      // 27, 1<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      m_format = format;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      m_format__IsNotDefault = true;<a name="line.186"></a>
 <span class="sourceLineNo">187</span>    }<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.188"></a>
+<span class="sourceLineNo">188</span>    public String getFormat()<a name="line.188"></a>
 <span class="sourceLineNo">189</span>    {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      return m_deadServers;<a name="line.190"></a>
+<span class="sourceLineNo">190</span>      return m_format;<a name="line.190"></a>
 <span class="sourceLineNo">191</span>    }<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    public boolean getDeadServers__IsNotDefault()<a name="line.193"></a>
+<span class="sourceLineNo">192</span>    private String m_format;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    public boolean getFormat__IsNotDefault()<a name="line.193"></a>
 <span class="sourceLineNo">194</span>    {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      return m_deadServers__IsNotDefault;<a name="line.195"></a>
+<span class="sourceLineNo">195</span>      return m_format__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>    // 28, 1<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    public void setServerManager(ServerManager serverManager)<a name="line.199"></a>
+<span class="sourceLineNo">197</span>    private boolean m_format__IsNotDefault;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    // 24, 1<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.199"></a>
 <span class="sourceLineNo">200</span>    {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      // 28, 1<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      m_serverManager = serverManager;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      m_serverManager__IsNotDefault = true;<a name="line.203"></a>
+<span class="sourceLineNo">201</span>      // 24, 1<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      m_deadServers = deadServers;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      m_deadServers__IsNotDefault = true;<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    public ServerManager getServerManager()<a name="line.205"></a>
+<span class="sourceLineNo">205</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      return m_serverManager;<a name="line.207"></a>
+<span class="sourceLineNo">207</span>      return m_deadServers;<a name="line.207"></a>
 <span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    private ServerManager m_serverManager;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    public boolean getServerManager__IsNotDefault()<a name="line.210"></a>
+<span class="sourceLineNo">209</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public boolean getDeadServers__IsNotDefault()<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      return m_serverManager__IsNotDefault;<a name="line.212"></a>
+<span class="sourceLineNo">212</span>      return m_deadServers__IsNotDefault;<a name="line.212"></a>
 <span class="sourceLineNo">213</span>    }<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    private boolean m_serverManager__IsNotDefault;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    // 25, 1<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.216"></a>
+<span class="sourceLineNo">214</span>    private boolean m_deadServers__IsNotDefault;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    // 29, 1<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.216"></a>
 <span class="sourceLineNo">217</span>    {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      // 25, 1<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.220"></a>
+<span class="sourceLineNo">218</span>      // 29, 1<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      m_assignmentManager = assignmentManager;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      m_assignmentManager__IsNotDefault = true;<a name="line.220"></a>
 <span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    public boolean getCatalogJanitorEnabled()<a name="line.222"></a>
+<span class="sourceLineNo">222</span>    public AssignmentManager getAssignmentManager()<a name="line.222"></a>
 <span class="sourceLineNo">223</span>    {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      return m_catalogJanitorEnabled;<a name="line.224"></a>
+<span class="sourceLineNo">224</span>      return m_assignmentManager;<a name="line.224"></a>
 <span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    private boolean m_catalogJanitorEnabled;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.227"></a>
+<span class="sourceLineNo">226</span>    private AssignmentManager m_assignmentManager;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.229"></a>
+<span class="sourceLineNo">229</span>      return m_assignmentManager__IsNotDefault;<a name="line.229"></a>
 <span class="sourceLineNo">230</span>    }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    private boolean m_catalogJanitorEnabled__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">231</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    // 22, 1<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.233"></a>
 <span class="sourceLineNo">234</span>    {<a name="line.234"></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">235</span>      // 22, 1<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      m_metaLocation = metaLocation;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      m_metaLocation__IsNotDefault = true;<a name="line.237"></a>
 <span class="sourceLineNo">238</span>    }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    public String getFilter()<a name="line.239"></a>
+<span class="sourceLineNo">239</span>    public ServerName getMetaLocation()<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      return m_filter;<a name="line.241"></a>
+<span class="sourceLineNo">241</span>      return m_metaLocation;<a name="line.241"></a>
 <span class="sourceLineNo">242</span>    }<a name="line.242"></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">243</span>    private ServerName m_metaLocation;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      return m_filter__IsNotDefault;<a name="line.246"></a>
+<span class="sourceLineNo">246</span>      return m_metaLocation__IsNotDefault;<a name="line.246"></a>
 <span class="sourceLineNo">247</span>    }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    private boolean m_filter__IsNotDefault;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    // 21, 1<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.250"></a>
+<span class="sourceLineNo">248</span>    private boolean m_metaLocation__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">251</span>    {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      // 21, 1<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      m_frags = frags;<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      m_frags__IsNotDefault = true;<a name="line.254"></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">255</span>    }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.256"></a>
+<span class="sourceLineNo">256</span>    public String getFilter()<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      return m_frags;<a name="line.258"></a>
+<span class="sourceLineNo">258</span>      return m_filter;<a name="line.258"></a>
 <span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    public boolean getFrags__IsNotDefault()<a name="line.261"></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">262</span>    {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      return m_frags__IsNotDefault;<a name="line.263"></a>
+<span class="sourceLineNo">263</span>      return m_filter__IsNotDefault;<a name="line.263"></a>
 <span class="sourceLineNo">264</span>    }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    private boolean m_frags__IsNotDefault;<a name="line.265"></a>
+<span class="sourceLineNo">265</span>    private boolean m_filter__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,66 +282,66 @@
 <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 Map&lt;String,Integer&gt; frags;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<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()).setFrags(p_frags);<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 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">284</span>  protected ServerManager serverManager;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.285"></a>
 <span class="sourceLineNo">286</span>  {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    (getImplData()).setFormat(p_format);<a name="line.287"></a>
+<span class="sourceLineNo">287</span>    (getImplData()).setServerManager(p_serverManager);<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 List&lt;ServerName&gt; servers;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<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()).setServers(p_servers);<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 ServerName metaLocation;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.299"></a>
+<span class="sourceLineNo">298</span>  protected List&lt;ServerName&gt; servers;<a name="line.298"></a>
+<span class="sourceLineNo">299</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.299"></a>
 <span class="sourceLineNo">300</span>  {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.301"></a>
+<span class="sourceLineNo">301</span>    (getImplData()).setServers(p_servers);<a name="line.301"></a>
 <span class="sourceLineNo">302</span>    return this;<a name="line.302"></a>
 <span class="sourceLineNo">303</span>  }<a name="line.303"></a>
 <span class="sourceLineNo">304</span>  <a name="line.304"></a>
-<span class="sourceLineNo">305</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.306"></a>
+<span class="sourceLineNo">305</span>  protected String format;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.306"></a>
 <span class="sourceLineNo">307</span>  {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.308"></a>
+<span class="sourceLineNo">308</span>    (getImplData()).setFormat(p_format);<a name="line.308"></a>
 <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 ServerManager serverManager;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.313"></a>
+<span class="sourceLineNo">312</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.313"></a>
 <span class="sourceLineNo">314</span>  {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.315"></a>
+<span class="sourceLineNo">315</span>    (getImplData()).setDeadServers(p_deadServers);<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 boolean catalogJanitorEnabled;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.320"></a>
+<span class="sourceLineNo">319</span>  protected AssignmentManager assignmentManager;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.320"></a>
 <span class="sourceLineNo">321</span>  {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.322"></a>
+<span class="sourceLineNo">322</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<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 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">326</span>  protected ServerName metaLocation;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.327"></a>
 <span class="sourceLineNo">328</span>  {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    (getImplData()).setFilter(p_filter);<a name="line.329"></a>
+<span class="sourceLineNo">329</span>    (getImplData()).setMetaLocation(p_metaLocation);<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 Map&lt;String,Integer&gt; frags;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.334"></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">335</span>  {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    (getImplData()).setFrags(p_frags);<a name="line.336"></a>
+<span class="sourceLineNo">336</span>    (getImplData()).setFilter(p_filter);<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/799947ba/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 9231370..a800f4b 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 String format;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private final List&lt;ServerName&gt; servers;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  private final ServerName metaLocation;<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 ServerManager serverManager;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private final boolean catalogJanitorEnabled;<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 Map&lt;String,Integer&gt; frags;<a name="line.73"></a>
+<span class="sourceLineNo">065</span>  private final Map&lt;String,Integer&gt; frags;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private final ServerManager serverManager;<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 List&lt;ServerName&gt; servers;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  private final String format;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private final Set&lt;ServerName&gt; deadServers;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private final AssignmentManager assignmentManager;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  private final ServerName metaLocation;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  private final String filter;<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.getFrags__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.setFrags(null);<a name="line.105"></a>
 <span class="sourceLineNo">106</span>    }<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    if(! p_implData.getFormat__IsNotDefault())<a name="line.107"></a>
+<span class="sourceLineNo">107</span>    if(! p_implData.getServerManager__IsNotDefault())<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      p_implData.setFormat("html");<a name="line.109"></a>
+<span class="sourceLineNo">109</span>      p_implData.setServerManager(null);<a name="line.109"></a>
 <span class="sourceLineNo">110</span>    }<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    if(! p_implData.getServers__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.setServers(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.getMetaLocation__IsNotDefault())<a name="line.115"></a>
+<span class="sourceLineNo">115</span>    if(! p_implData.getServers__IsNotDefault())<a name="line.115"></a>
 <span class="sourceLineNo">116</span>    {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      p_implData.setMetaLocation(null);<a name="line.117"></a>
+<span class="sourceLineNo">117</span>      p_implData.setServers(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">119</span>    if(! p_implData.getFormat__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">121</span>      p_implData.setFormat("html");<a name="line.121"></a>
 <span class="sourceLineNo">122</span>    }<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    if(! p_implData.getServerManager__IsNotDefault())<a name="line.123"></a>
+<span class="sourceLineNo">123</span>    if(! p_implData.getDeadServers__IsNotDefault())<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      p_implData.setServerManager(null);<a name="line.125"></a>
+<span class="sourceLineNo">125</span>      p_implData.setDeadServers(null);<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    }<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    if(! p_implData.getCatalogJanitorEnabled__IsNotDefault())<a name="line.127"></a>
+<span class="sourceLineNo">127</span>    if(! p_implData.getAssignmentManager__IsNotDefault())<a name="line.127"></a>
 <span class="sourceLineNo">128</span>    {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      p_implData.setCatalogJanitorEnabled(true);<a name="line.129"></a>
+<span class="sourceLineNo">129</span>      p_implData.setAssignmentManager(null);<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    }<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    if(! p_implData.getFilter__IsNotDefault())<a name="line.131"></a>
+<span class="sourceLineNo">131</span>    if(! p_implData.getMetaLocation__IsNotDefault())<a name="line.131"></a>
 <span class="sourceLineNo">132</span>    {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      p_implData.setFilter("general");<a name="line.133"></a>
+<span class="sourceLineNo">133</span>      p_implData.setMetaLocation(null);<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    if(! p_implData.getFrags__IsNotDefault())<a name="line.135"></a>
+<span class="sourceLineNo">135</span>    if(! p_implData.getFilter__IsNotDefault())<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      p_implData.setFrags(null);<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      p_implData.setFilter("general");<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>    format = p_implData.getFormat();<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    servers = p_implData.getServers();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    metaLocation = p_implData.getMetaLocation();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    deadServers = p_implData.getDeadServers();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    serverManager = p_implData.getServerManager();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    catalogJanitorEnabled = p_implData.getCatalogJanitorEnabled();<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    filter = p_implData.getFilter();<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    frags = p_implData.getFrags();<a name="line.153"></a>
+<span class="sourceLineNo">145</span>    frags = p_implData.getFrags();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    serverManager = p_implData.getServerManager();<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    catalogJanitorEnabled = p_implData.getCatalogJanitorEnabled();<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    servers = p_implData.getServers();<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    format = p_implData.getFormat();<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    deadServers = p_implData.getDeadServers();<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    assignmentManager = p_implData.getAssignmentManager();<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    metaLocation = p_implData.getMetaLocation();<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    filter = p_implData.getFilter();<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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 9be600e..49de025 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
@@ -34,9 +34,9 @@
 <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 = "filter", type = "String"),<a name="line.28"></a>
-<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "format", 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 = "bcn", type = "String")})<a name="line.31"></a>
+<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.29"></a>
+<span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "bcn", 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">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>
@@ -94,57 +94,57 @@
 <span class="sourceLineNo">086</span>      return m_filter__IsNotDefault;<a name="line.86"></a>
 <span class="sourceLineNo">087</span>    }<a name="line.87"></a>
 <span class="sourceLineNo">088</span>    private boolean m_filter__IsNotDefault;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    // 22, 1<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    public void setFormat(String format)<a name="line.90"></a>
+<span class="sourceLineNo">089</span>    // 24, 1<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    public void setBcv(String bcv)<a name="line.90"></a>
 <span class="sourceLineNo">091</span>    {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      // 22, 1<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      m_format = format;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      m_format__IsNotDefault = true;<a name="line.94"></a>
+<span class="sourceLineNo">092</span>      // 24, 1<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      m_bcv = bcv;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      m_bcv__IsNotDefault = true;<a name="line.94"></a>
 <span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    public String getFormat()<a name="line.96"></a>
+<span class="sourceLineNo">096</span>    public String getBcv()<a name="line.96"></a>
 <span class="sourceLineNo">097</span>    {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return m_format;<a name="line.98"></a>
+<span class="sourceLineNo">098</span>      return m_bcv;<a name="line.98"></a>
 <span class="sourceLineNo">099</span>    }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    private String m_format;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public boolean getFormat__IsNotDefault()<a name="line.101"></a>
+<span class="sourceLineNo">100</span>    private String m_bcv;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public boolean getBcv__IsNotDefault()<a name="line.101"></a>
 <span class="sourceLineNo">102</span>    {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      return m_format__IsNotDefault;<a name="line.103"></a>
+<span class="sourceLineNo">103</span>      return m_bcv__IsNotDefault;<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    private boolean m_format__IsNotDefault;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    // 24, 1<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    public void setBcv(String bcv)<a name="line.107"></a>
+<span class="sourceLineNo">105</span>    private boolean m_bcv__IsNotDefault;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    // 23, 1<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    public void setBcn(String bcn)<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      // 24, 1<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      m_bcv = bcv;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      m_bcv__IsNotDefault = true;<a name="line.111"></a>
+<span class="sourceLineNo">109</span>      // 23, 1<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      m_bcn = bcn;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      m_bcn__IsNotDefault = true;<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    }<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    public String getBcv()<a name="line.113"></a>
+<span class="sourceLineNo">113</span>    public String getBcn()<a name="line.113"></a>
 <span class="sourceLineNo">114</span>    {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      return m_bcv;<a name="line.115"></a>
+<span class="sourceLineNo">115</span>      return m_bcn;<a name="line.115"></a>
 <span class="sourceLineNo">116</span>    }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    private String m_bcv;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    public boolean getBcv__IsNotDefault()<a name="line.118"></a>
+<span class="sourceLineNo">117</span>    private String m_bcn;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    public boolean getBcn__IsNotDefault()<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return m_bcv__IsNotDefault;<a name="line.120"></a>
+<span class="sourceLineNo">120</span>      return m_bcn__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>    // 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">122</span>    private boolean m_bcn__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">125</span>    {<a name="line.125"></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">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">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    public String getBcn()<a name="line.130"></a>
+<span class="sourceLineNo">130</span>    public String getFormat()<a name="line.130"></a>
 <span class="sourceLineNo">131</span>    {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      return m_bcn;<a name="line.132"></a>
+<span class="sourceLineNo">132</span>      return m_format;<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    }<a name="line.133"></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">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">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_bcn__IsNotDefault;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_format__IsNotDefault;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private boolean m_bcn__IsNotDefault;<a name="line.139"></a>
+<span class="sourceLineNo">139</span>    private boolean m_format__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>
@@ -163,24 +163,24 @@
 <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>
-<span class="sourceLineNo">158</span>  protected String format;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.159"></a>
+<span class="sourceLineNo">158</span>  protected String bcv;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)<a name="line.159"></a>
 <span class="sourceLineNo">160</span>  {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    (getImplData()).setFormat(p_format);<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    (getImplData()).setBcv(p_bcv);<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    return this;<a name="line.162"></a>
 <span class="sourceLineNo">163</span>  }<a name="line.163"></a>
 <span class="sourceLineNo">164</span>  <a name="line.164"></a>
-<span class="sourceLineNo">165</span>  protected String bcv;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)<a name="line.166"></a>
+<span class="sourceLineNo">165</span>  protected String bcn;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.166"></a>
 <span class="sourceLineNo">167</span>  {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    (getImplData()).setBcv(p_bcv);<a name="line.168"></a>
+<span class="sourceLineNo">168</span>    (getImplData()).setBcn(p_bcn);<a name="line.168"></a>
 <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 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">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">174</span>  {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    (getImplData()).setBcn(p_bcn);<a name="line.175"></a>
+<span class="sourceLineNo">175</span>    (getImplData()).setFormat(p_format);<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/799947ba/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 9be600e..49de025 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
@@ -34,9 +34,9 @@
 <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 = "filter", type = "String"),<a name="line.28"></a>
-<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "format", 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 = "bcn", type = "String")})<a name="line.31"></a>
+<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.29"></a>
+<span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "bcn", 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">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>
@@ -94,57 +94,57 @@
 <span class="sourceLineNo">086</span>      return m_filter__IsNotDefault;<a name="line.86"></a>
 <span class="sourceLineNo">087</span>    }<a name="line.87"></a>
 <span class="sourceLineNo">088</span>    private boolean m_filter__IsNotDefault;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    // 22, 1<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    public void setFormat(String format)<a name="line.90"></a>
+<span class="sourceLineNo">089</span>    // 24, 1<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    public void setBcv(String bcv)<a name="line.90"></a>
 <span class="sourceLineNo">091</span>    {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      // 22, 1<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      m_format = format;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      m_format__IsNotDefault = true;<a name="line.94"></a>
+<span class="sourceLineNo">092</span>      // 24, 1<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      m_bcv = bcv;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      m_bcv__IsNotDefault = true;<a name="line.94"></a>
 <span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    public String getFormat()<a name="line.96"></a>
+<span class="sourceLineNo">096</span>    public String getBcv()<a name="line.96"></a>
 <span class="sourceLineNo">097</span>    {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return m_format;<a name="line.98"></a>
+<span class="sourceLineNo">098</span>      return m_bcv;<a name="line.98"></a>
 <span class="sourceLineNo">099</span>    }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    private String m_format;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public boolean getFormat__IsNotDefault()<a name="line.101"></a>
+<span class="sourceLineNo">100</span>    private String m_bcv;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public boolean getBcv__IsNotDefault()<a name="line.101"></a>
 <span class="sourceLineNo">102</span>    {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      return m_format__IsNotDefault;<a name="line.103"></a>
+<span class="sourceLineNo">103</span>      return m_bcv__IsNotDefault;<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    private boolean m_format__IsNotDefault;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    // 24, 1<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    public void setBcv(String bcv)<a name="line.107"></a>
+<span class="sourceLineNo">105</span>    private boolean m_bcv__IsNotDefault;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    // 23, 1<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    public void setBcn(String bcn)<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      // 24, 1<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      m_bcv = bcv;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      m_bcv__IsNotDefault = true;<a name="line.111"></a>
+<span class="sourceLineNo">109</span>      // 23, 1<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      m_bcn = bcn;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      m_bcn__IsNotDefault = true;<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    }<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    public String getBcv()<a name="line.113"></a>
+<span class="sourceLineNo">113</span>    public String getBcn()<a name="line.113"></a>
 <span class="sourceLineNo">114</span>    {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      return m_bcv;<a name="line.115"></a>
+<span class="sourceLineNo">115</span>      return m_bcn;<a name="line.115"></a>
 <span class="sourceLineNo">116</span>    }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    private String m_bcv;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    public boolean getBcv__IsNotDefault()<a name="line.118"></a>
+<span class="sourceLineNo">117</span>    private String m_bcn;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    public boolean getBcn__IsNotDefault()<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return m_bcv__IsNotDefault;<a name="line.120"></a>
+<span class="sourceLineNo">120</span>      return m_bcn__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>    // 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">122</span>    private boolean m_bcn__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">125</span>    {<a name="line.125"></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">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">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    public String getBcn()<a name="line.130"></a>
+<span class="sourceLineNo">130</span>    public String getFormat()<a name="line.130"></a>
 <span class="sourceLineNo">131</span>    {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      return m_bcn;<a name="line.132"></a>
+<span class="sourceLineNo">132</span>      return m_format;<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    }<a name="line.133"></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">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">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_bcn__IsNotDefault;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_format__IsNotDefault;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private boolean m_bcn__IsNotDefault;<a name="line.139"></a>
+<span class="sourceLineNo">139</span>    private boolean m_format__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>
@@ -163,24 +163,24 @@
 <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>
-<span class="sourceLineNo">158</span>  protected String format;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.159"></a>
+<span class="sourceLineNo">158</span>  protected String bcv;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)<a name="line.159"></a>
 <span class="sourceLineNo">160</span>  {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    (getImplData()).setFormat(p_format);<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    (getImplData()).setBcv(p_bcv);<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    return this;<a name="line.162"></a>
 <span class="sourceLineNo">163</span>  }<a name="line.163"></a>
 <span class="sourceLineNo">164</span>  <a name="line.164"></a>
-<span class="sourceLineNo">165</span>  protected String bcv;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)<a name="line.166"></a>
+<span class="sourceLineNo">165</span>  protected String bcn;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.166"></a>
 <span class="sourceLineNo">167</span>  {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    (getImplData()).setBcv(p_bcv);<a name="line.168"></a>
+<span class="sourceLineNo">168</span>    (getImplData()).setBcn(p_bcn);<a name="line.168"></a>
 <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 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">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">174</span>  {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    (getImplData()).setBcn(p_bcn);<a name="line.175"></a>
+<span class="sourceLineNo">175</span>    (getImplData()).setFormat(p_format);<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/799947ba/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 9be600e..49de025 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
@@ -34,9 +34,9 @@
 <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 = "filter", type = "String"),<a name="line.28"></a>
-<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "format", 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 = "bcn", type = "String")})<a name="line.31"></a>
+<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.29"></a>
+<span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "bcn", 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">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>
@@ -94,57 +94,57 @@
 <span class="sourceLineNo">086</span>      return m_filter__IsNotDefault;<a name="line.86"></a>
 <span class="sourceLineNo">087</span>    }<a name="line.87"></a>
 <span class="sourceLineNo">088</span>    private boolean m_filter__IsNotDefault;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    // 22, 1<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    public void setFormat(String format)<a name="line.90"></a>
+<span class="sourceLineNo">089</span>    // 24, 1<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    public void setBcv(String bcv)<a name="line.90"></a>
 <span class="sourceLineNo">091</span>    {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      // 22, 1<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      m_format = format;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      m_format__IsNotDefault = true;<a name="line.94"></a>
+<span class="sourceLineNo">092</span>      // 24, 1<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      m_bcv = bcv;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      m_bcv__IsNotDefault = true;<a name="line.94"></a>
 <span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    public String getFormat()<a name="line.96"></a>
+<span class="sourceLineNo">096</span>    public String getBcv()<a name="line.96"></a>
 <span class="sourceLineNo">097</span>    {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return m_format;<a name="line.98"></a>
+<span class="sourceLineNo">098</span>      return m_bcv;<a name="line.98"></a>
 <span class="sourceLineNo">099</span>    }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    private String m_format;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public boolean getFormat__IsNotDefault()<a name="line.101"></a>
+<span class="sourceLineNo">100</span>    private String m_bcv;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public boolean getBcv__IsNotDefault()<a name="line.101"></a>
 <span class="sourceLineNo">102</span>    {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      return m_format__IsNotDefault;<a name="line.103"></a>
+<span class="sourceLineNo">103</span>      return m_bcv__IsNotDefault;<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    private boolean m_format__IsNotDefault;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    // 24, 1<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    public void setBcv(String bcv)<a name="line.107"></a>
+<span class="sourceLineNo">105</span>    private boolean m_bcv__IsNotDefault;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    // 23, 1<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    public void setBcn(String bcn)<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      // 24, 1<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      m_bcv = bcv;<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      m_bcv__IsNotDefault = true;<a name="line.111"></a>
+<span class="sourceLineNo">109</span>      // 23, 1<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      m_bcn = bcn;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      m_bcn__IsNotDefault = true;<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    }<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    public String getBcv()<a name="line.113"></a>
+<span class="sourceLineNo">113</span>    public String getBcn()<a name="line.113"></a>
 <span class="sourceLineNo">114</span>    {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      return m_bcv;<a name="line.115"></a>
+<span class="sourceLineNo">115</span>      return m_bcn;<a name="line.115"></a>
 <span class="sourceLineNo">116</span>    }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    private String m_bcv;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    public boolean getBcv__IsNotDefault()<a name="line.118"></a>
+<span class="sourceLineNo">117</span>    private String m_bcn;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    public boolean getBcn__IsNotDefault()<a name="line.118"></a>
 <span class="sourceLineNo">119</span>    {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return m_bcv__IsNotDefault;<a name="line.120"></a>
+<span class="sourceLineNo">120</span>      return m_bcn__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>    // 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">122</span>    private boolean m_bcn__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">125</span>    {<a name="line.125"></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">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">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    public String getBcn()<a name="line.130"></a>
+<span class="sourceLineNo">130</span>    public String getFormat()<a name="line.130"></a>
 <span class="sourceLineNo">131</span>    {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      return m_bcn;<a name="line.132"></a>
+<span class="sourceLineNo">132</span>      return m_format;<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    }<a name="line.133"></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">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">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_bcn__IsNotDefault;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_format__IsNotDefault;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private boolean m_bcn__IsNotDefault;<a name="line.139"></a>
+<span class="sourceLineNo">139</span>    private boolean m_format__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>
@@ -163,24 +163,24 @@
 <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>
-<span class="sourceLineNo">158</span>  protected String format;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.159"></a>
+<span class="sourceLineNo">158</span>  protected String bcv;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)<a name="line.159"></a>
 <span class="sourceLineNo">160</span>  {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    (getImplData()).setFormat(p_format);<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    (getImplData()).setBcv(p_bcv);<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    return this;<a name="line.162"></a>
 <span class="sourceLineNo">163</span>  }<a name="line.163"></a>
 <span class="sourceLineNo">164</span>  <a name="line.164"></a>
-<span class="sourceLineNo">165</span>  protected String bcv;<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcv(String p_bcv)<a name="line.166"></a>
+<span class="sourceLineNo">165</span>  protected String bcn;<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.166"></a>
 <span class="sourceLineNo">167</span>  {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    (getImplData()).setBcv(p_bcv);<a name="line.168"></a>
+<span class="sourceLineNo">168</span>    (getImplData()).setBcn(p_bcn);<a name="line.168"></a>
 <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 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">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">174</span>  {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    (getImplData()).setBcn(p_bcn);<a name="line.175"></a>
+<span class="sourceLineNo">175</span>    (getImplData()).setFormat(p_format);<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>


[06/18] hbase-site git commit: Published site at 59e8b8e2ba4d403d042fe4cc02f8f9f80aad67af.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 33a31fe..3f12aad 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 = "format", type = "String"),<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<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 = "serverManager", type = "ServerManager"),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<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 = "frags", type = "Map&lt;String,Integer&gt;")})<a name="line.72"></a>
+<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<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 = "servers", type = "List&lt;ServerName&gt;"),<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<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">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,159 +118,159 @@
 <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>    // 21, 1<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<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>      // 21, 1<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      m_frags = frags;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      m_frags__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 Map&lt;String,Integer&gt; getFrags()<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_frags;<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 Map&lt;String,Integer&gt; m_frags;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    public boolean getFrags__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_frags__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>    // 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">129</span>    private boolean m_frags__IsNotDefault;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    // 28, 1<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    public void setServerManager(ServerManager serverManager)<a name="line.131"></a>
 <span class="sourceLineNo">132</span>    {<a name="line.132"></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">133</span>      // 28, 1<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      m_serverManager = serverManager;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      m_serverManager__IsNotDefault = true;<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    }<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    public String getFormat()<a name="line.137"></a>
+<span class="sourceLineNo">137</span>    public ServerManager getServerManager()<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      return m_format;<a name="line.139"></a>
+<span class="sourceLineNo">139</span>      return m_serverManager;<a name="line.139"></a>
 <span class="sourceLineNo">140</span>    }<a name="line.140"></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">141</span>    private ServerManager m_serverManager;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    public boolean getServerManager__IsNotDefault()<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      return m_format__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">144</span>      return m_serverManager__IsNotDefault;<a name="line.144"></a>
 <span class="sourceLineNo">145</span>    }<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    private boolean m_format__IsNotDefault;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    // 23, 1<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.148"></a>
+<span class="sourceLineNo">146</span>    private boolean m_serverManager__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>      // 23, 1<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      m_servers = servers;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      m_servers__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 List&lt;ServerName&gt; getServers()<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_servers;<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 List&lt;ServerName&gt; m_servers;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    public boolean getServers__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_servers__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_servers__IsNotDefault;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    // 22, 1<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    public void setMetaLocation(ServerName metaLocation)<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>    // 23, 1<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.165"></a>
 <span class="sourceLineNo">166</span>    {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      // 22, 1<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      m_metaLocation = metaLocation;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      m_metaLocation__IsNotDefault = true;<a name="line.169"></a>
+<span class="sourceLineNo">167</span>      // 23, 1<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      m_servers = servers;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      m_servers__IsNotDefault = true;<a name="line.169"></a>
 <span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    public ServerName getMetaLocation()<a name="line.171"></a>
+<span class="sourceLineNo">171</span>    public List&lt;ServerName&gt; getServers()<a name="line.171"></a>
 <span class="sourceLineNo">172</span>    {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      return m_metaLocation;<a name="line.173"></a>
+<span class="sourceLineNo">173</span>      return m_servers;<a name="line.173"></a>
 <span class="sourceLineNo">174</span>    }<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    private ServerName m_metaLocation;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.176"></a>
+<span class="sourceLineNo">175</span>    private List&lt;ServerName&gt; m_servers;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    public boolean getServers__IsNotDefault()<a name="line.176"></a>
 <span class="sourceLineNo">177</span>    {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      return m_metaLocation__IsNotDefault;<a name="line.178"></a>
+<span class="sourceLineNo">178</span>      return m_servers__IsNotDefault;<a name="line.178"></a>
 <span class="sourceLineNo">179</span>    }<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    private boolean m_metaLocation__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">180</span>    private boolean m_servers__IsNotDefault;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    // 27, 1<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    public void setFormat(String format)<a name="line.182"></a>
 <span class="sourceLineNo">183</span>    {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      // 24, 1<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      m_deadServers = deadServers;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      m_deadServers__IsNotDefault = true;<a name="line.186"></a>
+<span class="sourceLineNo">184</span>      // 27, 1<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      m_format = format;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      m_format__IsNotDefault = true;<a name="line.186"></a>
 <span class="sourceLineNo">187</span>    }<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.188"></a>
+<span class="sourceLineNo">188</span>    public String getFormat()<a name="line.188"></a>
 <span class="sourceLineNo">189</span>    {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      return m_deadServers;<a name="line.190"></a>
+<span class="sourceLineNo">190</span>      return m_format;<a name="line.190"></a>
 <span class="sourceLineNo">191</span>    }<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    public boolean getDeadServers__IsNotDefault()<a name="line.193"></a>
+<span class="sourceLineNo">192</span>    private String m_format;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    public boolean getFormat__IsNotDefault()<a name="line.193"></a>
 <span class="sourceLineNo">194</span>    {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      return m_deadServers__IsNotDefault;<a name="line.195"></a>
+<span class="sourceLineNo">195</span>      return m_format__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>    // 28, 1<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    public void setServerManager(ServerManager serverManager)<a name="line.199"></a>
+<span class="sourceLineNo">197</span>    private boolean m_format__IsNotDefault;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    // 24, 1<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.199"></a>
 <span class="sourceLineNo">200</span>    {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      // 28, 1<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      m_serverManager = serverManager;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      m_serverManager__IsNotDefault = true;<a name="line.203"></a>
+<span class="sourceLineNo">201</span>      // 24, 1<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      m_deadServers = deadServers;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      m_deadServers__IsNotDefault = true;<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    public ServerManager getServerManager()<a name="line.205"></a>
+<span class="sourceLineNo">205</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      return m_serverManager;<a name="line.207"></a>
+<span class="sourceLineNo">207</span>      return m_deadServers;<a name="line.207"></a>
 <span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    private ServerManager m_serverManager;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    public boolean getServerManager__IsNotDefault()<a name="line.210"></a>
+<span class="sourceLineNo">209</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public boolean getDeadServers__IsNotDefault()<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      return m_serverManager__IsNotDefault;<a name="line.212"></a>
+<span class="sourceLineNo">212</span>      return m_deadServers__IsNotDefault;<a name="line.212"></a>
 <span class="sourceLineNo">213</span>    }<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    private boolean m_serverManager__IsNotDefault;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    // 25, 1<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.216"></a>
+<span class="sourceLineNo">214</span>    private boolean m_deadServers__IsNotDefault;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    // 29, 1<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.216"></a>
 <span class="sourceLineNo">217</span>    {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      // 25, 1<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.220"></a>
+<span class="sourceLineNo">218</span>      // 29, 1<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      m_assignmentManager = assignmentManager;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      m_assignmentManager__IsNotDefault = true;<a name="line.220"></a>
 <span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    public boolean getCatalogJanitorEnabled()<a name="line.222"></a>
+<span class="sourceLineNo">222</span>    public AssignmentManager getAssignmentManager()<a name="line.222"></a>
 <span class="sourceLineNo">223</span>    {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      return m_catalogJanitorEnabled;<a name="line.224"></a>
+<span class="sourceLineNo">224</span>      return m_assignmentManager;<a name="line.224"></a>
 <span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    private boolean m_catalogJanitorEnabled;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.227"></a>
+<span class="sourceLineNo">226</span>    private AssignmentManager m_assignmentManager;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.229"></a>
+<span class="sourceLineNo">229</span>      return m_assignmentManager__IsNotDefault;<a name="line.229"></a>
 <span class="sourceLineNo">230</span>    }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    private boolean m_catalogJanitorEnabled__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">231</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    // 22, 1<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.233"></a>
 <span class="sourceLineNo">234</span>    {<a name="line.234"></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">235</span>      // 22, 1<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      m_metaLocation = metaLocation;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      m_metaLocation__IsNotDefault = true;<a name="line.237"></a>
 <span class="sourceLineNo">238</span>    }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    public String getFilter()<a name="line.239"></a>
+<span class="sourceLineNo">239</span>    public ServerName getMetaLocation()<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      return m_filter;<a name="line.241"></a>
+<span class="sourceLineNo">241</span>      return m_metaLocation;<a name="line.241"></a>
 <span class="sourceLineNo">242</span>    }<a name="line.242"></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">243</span>    private ServerName m_metaLocation;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      return m_filter__IsNotDefault;<a name="line.246"></a>
+<span class="sourceLineNo">246</span>      return m_metaLocation__IsNotDefault;<a name="line.246"></a>
 <span class="sourceLineNo">247</span>    }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    private boolean m_filter__IsNotDefault;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    // 21, 1<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.250"></a>
+<span class="sourceLineNo">248</span>    private boolean m_metaLocation__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">251</span>    {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      // 21, 1<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      m_frags = frags;<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      m_frags__IsNotDefault = true;<a name="line.254"></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">255</span>    }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.256"></a>
+<span class="sourceLineNo">256</span>    public String getFilter()<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      return m_frags;<a name="line.258"></a>
+<span class="sourceLineNo">258</span>      return m_filter;<a name="line.258"></a>
 <span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    public boolean getFrags__IsNotDefault()<a name="line.261"></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">262</span>    {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      return m_frags__IsNotDefault;<a name="line.263"></a>
+<span class="sourceLineNo">263</span>      return m_filter__IsNotDefault;<a name="line.263"></a>
 <span class="sourceLineNo">264</span>    }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    private boolean m_frags__IsNotDefault;<a name="line.265"></a>
+<span class="sourceLineNo">265</span>    private boolean m_filter__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,66 +282,66 @@
 <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 Map&lt;String,Integer&gt; frags;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<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()).setFrags(p_frags);<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 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">284</span>  protected ServerManager serverManager;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.285"></a>
 <span class="sourceLineNo">286</span>  {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    (getImplData()).setFormat(p_format);<a name="line.287"></a>
+<span class="sourceLineNo">287</span>    (getImplData()).setServerManager(p_serverManager);<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 List&lt;ServerName&gt; servers;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<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()).setServers(p_servers);<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 ServerName metaLocation;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.299"></a>
+<span class="sourceLineNo">298</span>  protected List&lt;ServerName&gt; servers;<a name="line.298"></a>
+<span class="sourceLineNo">299</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.299"></a>
 <span class="sourceLineNo">300</span>  {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.301"></a>
+<span class="sourceLineNo">301</span>    (getImplData()).setServers(p_servers);<a name="line.301"></a>
 <span class="sourceLineNo">302</span>    return this;<a name="line.302"></a>
 <span class="sourceLineNo">303</span>  }<a name="line.303"></a>
 <span class="sourceLineNo">304</span>  <a name="line.304"></a>
-<span class="sourceLineNo">305</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.306"></a>
+<span class="sourceLineNo">305</span>  protected String format;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.306"></a>
 <span class="sourceLineNo">307</span>  {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.308"></a>
+<span class="sourceLineNo">308</span>    (getImplData()).setFormat(p_format);<a name="line.308"></a>
 <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 ServerManager serverManager;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.313"></a>
+<span class="sourceLineNo">312</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.313"></a>
 <span class="sourceLineNo">314</span>  {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.315"></a>
+<span class="sourceLineNo">315</span>    (getImplData()).setDeadServers(p_deadServers);<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 boolean catalogJanitorEnabled;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.320"></a>
+<span class="sourceLineNo">319</span>  protected AssignmentManager assignmentManager;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.320"></a>
 <span class="sourceLineNo">321</span>  {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.322"></a>
+<span class="sourceLineNo">322</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<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 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">326</span>  protected ServerName metaLocation;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.327"></a>
 <span class="sourceLineNo">328</span>  {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    (getImplData()).setFilter(p_filter);<a name="line.329"></a>
+<span class="sourceLineNo">329</span>    (getImplData()).setMetaLocation(p_metaLocation);<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 Map&lt;String,Integer&gt; frags;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.334"></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">335</span>  {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    (getImplData()).setFrags(p_frags);<a name="line.336"></a>
+<span class="sourceLineNo">336</span>    (getImplData()).setFilter(p_filter);<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/799947ba/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 33a31fe..3f12aad 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 = "format", type = "String"),<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<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 = "serverManager", type = "ServerManager"),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<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 = "frags", type = "Map&lt;String,Integer&gt;")})<a name="line.72"></a>
+<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<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 = "servers", type = "List&lt;ServerName&gt;"),<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<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">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,159 +118,159 @@
 <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>    // 21, 1<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<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>      // 21, 1<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      m_frags = frags;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      m_frags__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 Map&lt;String,Integer&gt; getFrags()<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_frags;<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 Map&lt;String,Integer&gt; m_frags;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    public boolean getFrags__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_frags__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>    // 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">129</span>    private boolean m_frags__IsNotDefault;<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    // 28, 1<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    public void setServerManager(ServerManager serverManager)<a name="line.131"></a>
 <span class="sourceLineNo">132</span>    {<a name="line.132"></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">133</span>      // 28, 1<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      m_serverManager = serverManager;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      m_serverManager__IsNotDefault = true;<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    }<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    public String getFormat()<a name="line.137"></a>
+<span class="sourceLineNo">137</span>    public ServerManager getServerManager()<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      return m_format;<a name="line.139"></a>
+<span class="sourceLineNo">139</span>      return m_serverManager;<a name="line.139"></a>
 <span class="sourceLineNo">140</span>    }<a name="line.140"></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">141</span>    private ServerManager m_serverManager;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    public boolean getServerManager__IsNotDefault()<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      return m_format__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">144</span>      return m_serverManager__IsNotDefault;<a name="line.144"></a>
 <span class="sourceLineNo">145</span>    }<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    private boolean m_format__IsNotDefault;<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    // 23, 1<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.148"></a>
+<span class="sourceLineNo">146</span>    private boolean m_serverManager__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>      // 23, 1<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      m_servers = servers;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>      m_servers__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 List&lt;ServerName&gt; getServers()<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_servers;<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 List&lt;ServerName&gt; m_servers;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    public boolean getServers__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_servers__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_servers__IsNotDefault;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    // 22, 1<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    public void setMetaLocation(ServerName metaLocation)<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>    // 23, 1<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.165"></a>
 <span class="sourceLineNo">166</span>    {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      // 22, 1<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      m_metaLocation = metaLocation;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      m_metaLocation__IsNotDefault = true;<a name="line.169"></a>
+<span class="sourceLineNo">167</span>      // 23, 1<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      m_servers = servers;<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      m_servers__IsNotDefault = true;<a name="line.169"></a>
 <span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    public ServerName getMetaLocation()<a name="line.171"></a>
+<span class="sourceLineNo">171</span>    public List&lt;ServerName&gt; getServers()<a name="line.171"></a>
 <span class="sourceLineNo">172</span>    {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      return m_metaLocation;<a name="line.173"></a>
+<span class="sourceLineNo">173</span>      return m_servers;<a name="line.173"></a>
 <span class="sourceLineNo">174</span>    }<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    private ServerName m_metaLocation;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.176"></a>
+<span class="sourceLineNo">175</span>    private List&lt;ServerName&gt; m_servers;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    public boolean getServers__IsNotDefault()<a name="line.176"></a>
 <span class="sourceLineNo">177</span>    {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      return m_metaLocation__IsNotDefault;<a name="line.178"></a>
+<span class="sourceLineNo">178</span>      return m_servers__IsNotDefault;<a name="line.178"></a>
 <span class="sourceLineNo">179</span>    }<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    private boolean m_metaLocation__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">180</span>    private boolean m_servers__IsNotDefault;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    // 27, 1<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    public void setFormat(String format)<a name="line.182"></a>
 <span class="sourceLineNo">183</span>    {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      // 24, 1<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      m_deadServers = deadServers;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      m_deadServers__IsNotDefault = true;<a name="line.186"></a>
+<span class="sourceLineNo">184</span>      // 27, 1<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      m_format = format;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      m_format__IsNotDefault = true;<a name="line.186"></a>
 <span class="sourceLineNo">187</span>    }<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.188"></a>
+<span class="sourceLineNo">188</span>    public String getFormat()<a name="line.188"></a>
 <span class="sourceLineNo">189</span>    {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      return m_deadServers;<a name="line.190"></a>
+<span class="sourceLineNo">190</span>      return m_format;<a name="line.190"></a>
 <span class="sourceLineNo">191</span>    }<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    public boolean getDeadServers__IsNotDefault()<a name="line.193"></a>
+<span class="sourceLineNo">192</span>    private String m_format;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    public boolean getFormat__IsNotDefault()<a name="line.193"></a>
 <span class="sourceLineNo">194</span>    {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      return m_deadServers__IsNotDefault;<a name="line.195"></a>
+<span class="sourceLineNo">195</span>      return m_format__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>    // 28, 1<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    public void setServerManager(ServerManager serverManager)<a name="line.199"></a>
+<span class="sourceLineNo">197</span>    private boolean m_format__IsNotDefault;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    // 24, 1<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.199"></a>
 <span class="sourceLineNo">200</span>    {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      // 28, 1<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      m_serverManager = serverManager;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>      m_serverManager__IsNotDefault = true;<a name="line.203"></a>
+<span class="sourceLineNo">201</span>      // 24, 1<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      m_deadServers = deadServers;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      m_deadServers__IsNotDefault = true;<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    public ServerManager getServerManager()<a name="line.205"></a>
+<span class="sourceLineNo">205</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      return m_serverManager;<a name="line.207"></a>
+<span class="sourceLineNo">207</span>      return m_deadServers;<a name="line.207"></a>
 <span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    private ServerManager m_serverManager;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    public boolean getServerManager__IsNotDefault()<a name="line.210"></a>
+<span class="sourceLineNo">209</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public boolean getDeadServers__IsNotDefault()<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      return m_serverManager__IsNotDefault;<a name="line.212"></a>
+<span class="sourceLineNo">212</span>      return m_deadServers__IsNotDefault;<a name="line.212"></a>
 <span class="sourceLineNo">213</span>    }<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    private boolean m_serverManager__IsNotDefault;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    // 25, 1<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.216"></a>
+<span class="sourceLineNo">214</span>    private boolean m_deadServers__IsNotDefault;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    // 29, 1<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.216"></a>
 <span class="sourceLineNo">217</span>    {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      // 25, 1<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.220"></a>
+<span class="sourceLineNo">218</span>      // 29, 1<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      m_assignmentManager = assignmentManager;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      m_assignmentManager__IsNotDefault = true;<a name="line.220"></a>
 <span class="sourceLineNo">221</span>    }<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    public boolean getCatalogJanitorEnabled()<a name="line.222"></a>
+<span class="sourceLineNo">222</span>    public AssignmentManager getAssignmentManager()<a name="line.222"></a>
 <span class="sourceLineNo">223</span>    {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      return m_catalogJanitorEnabled;<a name="line.224"></a>
+<span class="sourceLineNo">224</span>      return m_assignmentManager;<a name="line.224"></a>
 <span class="sourceLineNo">225</span>    }<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    private boolean m_catalogJanitorEnabled;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.227"></a>
+<span class="sourceLineNo">226</span>    private AssignmentManager m_assignmentManager;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.229"></a>
+<span class="sourceLineNo">229</span>      return m_assignmentManager__IsNotDefault;<a name="line.229"></a>
 <span class="sourceLineNo">230</span>    }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    private boolean m_catalogJanitorEnabled__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">231</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    // 22, 1<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.233"></a>
 <span class="sourceLineNo">234</span>    {<a name="line.234"></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">235</span>      // 22, 1<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      m_metaLocation = metaLocation;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      m_metaLocation__IsNotDefault = true;<a name="line.237"></a>
 <span class="sourceLineNo">238</span>    }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    public String getFilter()<a name="line.239"></a>
+<span class="sourceLineNo">239</span>    public ServerName getMetaLocation()<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      return m_filter;<a name="line.241"></a>
+<span class="sourceLineNo">241</span>      return m_metaLocation;<a name="line.241"></a>
 <span class="sourceLineNo">242</span>    }<a name="line.242"></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">243</span>    private ServerName m_metaLocation;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      return m_filter__IsNotDefault;<a name="line.246"></a>
+<span class="sourceLineNo">246</span>      return m_metaLocation__IsNotDefault;<a name="line.246"></a>
 <span class="sourceLineNo">247</span>    }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    private boolean m_filter__IsNotDefault;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    // 21, 1<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.250"></a>
+<span class="sourceLineNo">248</span>    private boolean m_metaLocation__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">251</span>    {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      // 21, 1<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      m_frags = frags;<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      m_frags__IsNotDefault = true;<a name="line.254"></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">255</span>    }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    public Map&lt;String,Integer&gt; getFrags()<a name="line.256"></a>
+<span class="sourceLineNo">256</span>    public String getFilter()<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      return m_frags;<a name="line.258"></a>
+<span class="sourceLineNo">258</span>      return m_filter;<a name="line.258"></a>
 <span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    private Map&lt;String,Integer&gt; m_frags;<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    public boolean getFrags__IsNotDefault()<a name="line.261"></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">262</span>    {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      return m_frags__IsNotDefault;<a name="line.263"></a>
+<span class="sourceLineNo">263</span>      return m_filter__IsNotDefault;<a name="line.263"></a>
 <span class="sourceLineNo">264</span>    }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    private boolean m_frags__IsNotDefault;<a name="line.265"></a>
+<span class="sourceLineNo">265</span>    private boolean m_filter__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,66 +282,66 @@
 <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 Map&lt;String,Integer&gt; frags;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<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()).setFrags(p_frags);<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 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">284</span>  protected ServerManager serverManager;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.285"></a>
 <span class="sourceLineNo">286</span>  {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    (getImplData()).setFormat(p_format);<a name="line.287"></a>
+<span class="sourceLineNo">287</span>    (getImplData()).setServerManager(p_serverManager);<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 List&lt;ServerName&gt; servers;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<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()).setServers(p_servers);<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 ServerName metaLocation;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.299"></a>
+<span class="sourceLineNo">298</span>  protected List&lt;ServerName&gt; servers;<a name="line.298"></a>
+<span class="sourceLineNo">299</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.299"></a>
 <span class="sourceLineNo">300</span>  {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.301"></a>
+<span class="sourceLineNo">301</span>    (getImplData()).setServers(p_servers);<a name="line.301"></a>
 <span class="sourceLineNo">302</span>    return this;<a name="line.302"></a>
 <span class="sourceLineNo">303</span>  }<a name="line.303"></a>
 <span class="sourceLineNo">304</span>  <a name="line.304"></a>
-<span class="sourceLineNo">305</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.306"></a>
+<span class="sourceLineNo">305</span>  protected String format;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.306"></a>
 <span class="sourceLineNo">307</span>  {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.308"></a>
+<span class="sourceLineNo">308</span>    (getImplData()).setFormat(p_format);<a name="line.308"></a>
 <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 ServerManager serverManager;<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.313"></a>
+<span class="sourceLineNo">312</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.313"></a>
 <span class="sourceLineNo">314</span>  {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.315"></a>
+<span class="sourceLineNo">315</span>    (getImplData()).setDeadServers(p_deadServers);<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 boolean catalogJanitorEnabled;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.320"></a>
+<span class="sourceLineNo">319</span>  protected AssignmentManager assignmentManager;<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.320"></a>
 <span class="sourceLineNo">321</span>  {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.322"></a>
+<span class="sourceLineNo">322</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<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 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">326</span>  protected ServerName metaLocation;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.327"></a>
 <span class="sourceLineNo">328</span>  {<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    (getImplData()).setFilter(p_filter);<a name="line.329"></a>
+<span class="sourceLineNo">329</span>    (getImplData()).setMetaLocation(p_metaLocation);<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 Map&lt;String,Integer&gt; frags;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<a name="line.334"></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">335</span>  {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    (getImplData()).setFrags(p_frags);<a name="line.336"></a>
+<span class="sourceLineNo">336</span>    (getImplData()).setFilter(p_filter);<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>


[02/18] hbase-site git commit: Published site at 59e8b8e2ba4d403d042fe4cc02f8f9f80aad67af.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html
index 82a82ad..cfccce7 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html
@@ -34,912 +34,911 @@
 <span class="sourceLineNo">026</span>import java.util.Arrays;<a name="line.26"></a>
 <span class="sourceLineNo">027</span>import java.util.Comparator;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>import java.util.HashSet;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.List;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.Set;<a name="line.30"></a>
-<span class="sourceLineNo">031</span><a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.commons.logging.Log;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.commons.logging.LogFactory;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.conf.Configuration;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.fs.FileSystem;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.fs.FileStatus;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.fs.Path;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HBaseCommonTestingUtility;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.LoadCounter;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.TestProcedure;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.procedure2.SequentialProcedure;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureIterator;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.io.IOUtils;<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.junit.After;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.junit.Before;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.junit.Test;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.junit.experimental.categories.Category;<a name="line.55"></a>
-<span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span>import static org.junit.Assert.assertEquals;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import static org.junit.Assert.assertFalse;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import static org.junit.Assert.assertTrue;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import static org.junit.Assert.fail;<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>@Category({MasterTests.class, SmallTests.class})<a name="line.62"></a>
-<span class="sourceLineNo">063</span>public class TestWALProcedureStore {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  private static final Log LOG = LogFactory.getLog(TestWALProcedureStore.class);<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private static final int PROCEDURE_STORE_SLOTS = 1;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private static final Procedure NULL_PROC = null;<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>  private WALProcedureStore procStore;<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private HBaseCommonTestingUtility htu;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private FileSystem fs;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private Path testDir;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private Path logDir;<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private void setupConfig(final Configuration conf) {<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    conf.setBoolean(WALProcedureStore.EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY, true);<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  @Before<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  public void setUp() throws IOException {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    htu = new HBaseCommonTestingUtility();<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    testDir = htu.getDataTestDir();<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    fs = testDir.getFileSystem(htu.getConfiguration());<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    assertTrue(testDir.depth() &gt; 1);<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>    setupConfig(htu.getConfiguration());<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    logDir = new Path(testDir, "proc-logs");<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    procStore = ProcedureTestingUtility.createWalStore(htu.getConfiguration(), fs, logDir);<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    procStore.start(PROCEDURE_STORE_SLOTS);<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    procStore.recoverLease();<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    procStore.load(new LoadCounter());<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  }<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>  @After<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  public void tearDown() throws IOException {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    procStore.stop(false);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    fs.delete(logDir, true);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  }<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private void storeRestart(ProcedureStore.ProcedureLoader loader) throws Exception {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    ProcedureTestingUtility.storeRestart(procStore, loader);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  @Test<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public void testEmptyRoll() throws Exception {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    for (int i = 0; i &lt; 10; ++i) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      procStore.periodicRollForTesting();<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    assertEquals(1, procStore.getActiveLogs().size());<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    FileStatus[] status = fs.listStatus(logDir);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    assertEquals(1, status.length);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>  @Test<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  public void testRestartWithoutData() throws Exception {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    for (int i = 0; i &lt; 10; ++i) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      final LoadCounter loader = new LoadCounter();<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      storeRestart(loader);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    LOG.info("ACTIVE WALs " + procStore.getActiveLogs());<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    assertEquals(1, procStore.getActiveLogs().size());<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    FileStatus[] status = fs.listStatus(logDir);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    assertEquals(1, status.length);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  /**<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   * Tests that tracker for all old logs are loaded back after procedure store is restarted.<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   */<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  @Test<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  public void trackersLoadedForAllOldLogs() throws Exception {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    for (int i = 0; i &lt;= 20; ++i) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      procStore.insert(new TestProcedure(i), null);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      if (i &gt; 0 &amp;&amp; (i % 5) == 0) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>        LoadCounter loader = new LoadCounter();<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        storeRestart(loader);<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>    assertEquals(5, procStore.getActiveLogs().size());<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    for (int i = 0; i &lt; procStore.getActiveLogs().size() - 1; ++i) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      ProcedureStoreTracker tracker = procStore.getActiveLogs().get(i).getTracker();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      assertTrue(tracker != null &amp;&amp; !tracker.isEmpty());<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  }<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>  @Test<a name="line.146"></a>
-<span class="sourceLineNo">147</span>  public void testWalCleanerSequentialClean() throws Exception {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    final Procedure[] procs = new Procedure[5];<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    ArrayList&lt;ProcedureWALFile&gt; logs = null;<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>    // Insert procedures and roll wal after every insert.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    for (int i = 0; i &lt; procs.length; i++) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      procs[i] = new TestSequentialProcedure();<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      procStore.insert(procs[i], null);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      procStore.rollWriterForTesting();<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      logs = procStore.getActiveLogs();<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      assertEquals(logs.size(), i + 2);  // Extra 1 for current ongoing wal.<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    }<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>    // Delete procedures in sequential order make sure that only the corresponding wal is deleted<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    // from logs list.<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    final int[] deleteOrder = new int[] { 0, 1, 2, 3, 4 };<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    for (int i = 0; i &lt; deleteOrder.length; i++) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      procStore.delete(procs[deleteOrder[i]].getProcId());<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      procStore.removeInactiveLogsForTesting();<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      assertFalse(logs.get(deleteOrder[i]).toString(),<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        procStore.getActiveLogs().contains(logs.get(deleteOrder[i])));<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      assertEquals(procStore.getActiveLogs().size(), procs.length - i);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    }<a name="line.169"></a>
-<span class="sourceLineNo">170</span>  }<a name="line.170"></a>
+<span class="sourceLineNo">029</span>import java.util.Set;<a name="line.29"></a>
+<span class="sourceLineNo">030</span><a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.commons.logging.Log;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.commons.logging.LogFactory;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.conf.Configuration;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.fs.FileSystem;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.fs.FileStatus;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.fs.Path;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseCommonTestingUtility;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.procedure2.Procedure;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.LoadCounter;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.TestProcedure;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.procedure2.SequentialProcedure;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureIterator;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.testclassification.MasterTests;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.io.IOUtils;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.junit.After;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.junit.Before;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.junit.Test;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.junit.experimental.categories.Category;<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>import static org.junit.Assert.assertEquals;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import static org.junit.Assert.assertFalse;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import static org.junit.Assert.assertTrue;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import static org.junit.Assert.fail;<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span>@Category({MasterTests.class, SmallTests.class})<a name="line.61"></a>
+<span class="sourceLineNo">062</span>public class TestWALProcedureStore {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private static final Log LOG = LogFactory.getLog(TestWALProcedureStore.class);<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private static final int PROCEDURE_STORE_SLOTS = 1;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private static final Procedure NULL_PROC = null;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private WALProcedureStore procStore;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private HBaseCommonTestingUtility htu;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private FileSystem fs;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  private Path testDir;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  private Path logDir;<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>  private void setupConfig(final Configuration conf) {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    conf.setBoolean(WALProcedureStore.EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY, true);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  }<a name="line.77"></a>
+<span class="sourceLineNo">078</span><a name="line.78"></a>
+<span class="sourceLineNo">079</span>  @Before<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  public void setUp() throws IOException {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    htu = new HBaseCommonTestingUtility();<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    testDir = htu.getDataTestDir();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    fs = testDir.getFileSystem(htu.getConfiguration());<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    assertTrue(testDir.depth() &gt; 1);<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>    setupConfig(htu.getConfiguration());<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    logDir = new Path(testDir, "proc-logs");<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    procStore = ProcedureTestingUtility.createWalStore(htu.getConfiguration(), fs, logDir);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    procStore.start(PROCEDURE_STORE_SLOTS);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    procStore.recoverLease();<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    procStore.load(new LoadCounter());<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>  @After<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  public void tearDown() throws IOException {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    procStore.stop(false);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    fs.delete(logDir, true);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  }<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>  private void storeRestart(ProcedureStore.ProcedureLoader loader) throws Exception {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    ProcedureTestingUtility.storeRestart(procStore, loader);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  @Test<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  public void testEmptyRoll() throws Exception {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    for (int i = 0; i &lt; 10; ++i) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>      procStore.periodicRollForTesting();<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    }<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    assertEquals(1, procStore.getActiveLogs().size());<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    FileStatus[] status = fs.listStatus(logDir);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    assertEquals(1, status.length);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  }<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>  @Test<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  public void testRestartWithoutData() throws Exception {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    for (int i = 0; i &lt; 10; ++i) {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      final LoadCounter loader = new LoadCounter();<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      storeRestart(loader);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    }<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    LOG.info("ACTIVE WALs " + procStore.getActiveLogs());<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    assertEquals(1, procStore.getActiveLogs().size());<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    FileStatus[] status = fs.listStatus(logDir);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    assertEquals(1, status.length);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  }<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span>  /**<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   * Tests that tracker for all old logs are loaded back after procedure store is restarted.<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   */<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  @Test<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  public void trackersLoadedForAllOldLogs() throws Exception {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    for (int i = 0; i &lt;= 20; ++i) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      procStore.insert(new TestProcedure(i), null);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      if (i &gt; 0 &amp;&amp; (i % 5) == 0) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        LoadCounter loader = new LoadCounter();<a name="line.134"></a>
+<span class="sourceLineNo">135</span>        storeRestart(loader);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      }<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    }<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    assertEquals(5, procStore.getActiveLogs().size());<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    for (int i = 0; i &lt; procStore.getActiveLogs().size() - 1; ++i) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      ProcedureStoreTracker tracker = procStore.getActiveLogs().get(i).getTracker();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      assertTrue(tracker != null &amp;&amp; !tracker.isEmpty());<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span>  @Test<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  public void testWalCleanerSequentialClean() throws Exception {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    final Procedure[] procs = new Procedure[5];<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    ArrayList&lt;ProcedureWALFile&gt; logs = null;<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>    // Insert procedures and roll wal after every insert.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    for (int i = 0; i &lt; procs.length; i++) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      procs[i] = new TestSequentialProcedure();<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      procStore.insert(procs[i], null);<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      procStore.rollWriterForTesting();<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      logs = procStore.getActiveLogs();<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      assertEquals(logs.size(), i + 2);  // Extra 1 for current ongoing wal.<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    }<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>    // Delete procedures in sequential order make sure that only the corresponding wal is deleted<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    // from logs list.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    final int[] deleteOrder = new int[] { 0, 1, 2, 3, 4 };<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    for (int i = 0; i &lt; deleteOrder.length; i++) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      procStore.delete(procs[deleteOrder[i]].getProcId());<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      procStore.removeInactiveLogsForTesting();<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      assertFalse(logs.get(deleteOrder[i]).toString(),<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        procStore.getActiveLogs().contains(logs.get(deleteOrder[i])));<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      assertEquals(procStore.getActiveLogs().size(), procs.length - i);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    }<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  }<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
 <span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>  // Test that wal cleaner doesn't create holes in wal files list i.e. it only deletes files if<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  // they are in the starting of the list.<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  @Test<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  public void testWalCleanerNoHoles() throws Exception {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    final Procedure[] procs = new Procedure[5];<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    ArrayList&lt;ProcedureWALFile&gt; logs = null;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // Insert procedures and roll wal after every insert.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    for (int i = 0; i &lt; procs.length; i++) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      procs[i] = new TestSequentialProcedure();<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      procStore.insert(procs[i], null);<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      procStore.rollWriterForTesting();<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      logs = procStore.getActiveLogs();<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      assertEquals(i + 2, logs.size());  // Extra 1 for current ongoing wal.<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    }<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>    for (int i = 1; i &lt; procs.length; i++) {<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      procStore.delete(procs[i].getProcId());<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    }<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    assertEquals(procs.length + 1, procStore.getActiveLogs().size());<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    procStore.delete(procs[0].getProcId());<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    assertEquals(1, procStore.getActiveLogs().size());<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>  @Test<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  public void testWalCleanerUpdates() throws Exception {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    TestSequentialProcedure p1 = new TestSequentialProcedure();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    TestSequentialProcedure p2 = new TestSequentialProcedure();<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    procStore.insert(p1, null);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    procStore.insert(p2, null);<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    procStore.rollWriterForTesting();<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    ProcedureWALFile firstLog = procStore.getActiveLogs().get(0);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    procStore.update(p1);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    procStore.rollWriterForTesting();<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    procStore.update(p2);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    procStore.rollWriterForTesting();<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    procStore.removeInactiveLogsForTesting();<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    assertFalse(procStore.getActiveLogs().contains(firstLog));<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  }<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>  @Test<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  public void testWalCleanerUpdatesDontLeaveHoles() throws Exception {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    TestSequentialProcedure p1 = new TestSequentialProcedure();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>    TestSequentialProcedure p2 = new TestSequentialProcedure();<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    procStore.insert(p1, null);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    procStore.insert(p2, null);<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    procStore.rollWriterForTesting();  // generates first log with p1 + p2<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    ProcedureWALFile log1 = procStore.getActiveLogs().get(0);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    procStore.update(p2);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    procStore.rollWriterForTesting();  // generates second log with p2<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    ProcedureWALFile log2 = procStore.getActiveLogs().get(1);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    procStore.update(p2);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    procStore.rollWriterForTesting();  // generates third log with p2<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    procStore.removeInactiveLogsForTesting();  // Shouldn't remove 2nd log.<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    assertEquals(4, procStore.getActiveLogs().size());<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    procStore.update(p1);<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    procStore.rollWriterForTesting();  // generates fourth log with p1<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    procStore.removeInactiveLogsForTesting();  // Should remove first two logs.<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    assertEquals(3, procStore.getActiveLogs().size());<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    assertFalse(procStore.getActiveLogs().contains(log1));<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    assertFalse(procStore.getActiveLogs().contains(log2));<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  }<a name="line.233"></a>
-<span class="sourceLineNo">234</span><a name="line.234"></a>
-<span class="sourceLineNo">235</span>  @Test<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  public void testWalCleanerWithEmptyRolls() throws Exception {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    final Procedure[] procs = new Procedure[3];<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      procs[i] = new TestSequentialProcedure();<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      procStore.insert(procs[i], null);<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    }<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    assertEquals(1, procStore.getActiveLogs().size());<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    procStore.rollWriterForTesting();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    assertEquals(2, procStore.getActiveLogs().size());<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    procStore.rollWriterForTesting();<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    assertEquals(3, procStore.getActiveLogs().size());<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      procStore.update(procs[i]);<a name="line.249"></a>
+<span class="sourceLineNo">172</span>  // Test that wal cleaner doesn't create holes in wal files list i.e. it only deletes files if<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  // they are in the starting of the list.<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  @Test<a name="line.174"></a>
+<span class="sourceLineNo">175</span>  public void testWalCleanerNoHoles() throws Exception {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    final Procedure[] procs = new Procedure[5];<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    ArrayList&lt;ProcedureWALFile&gt; logs = null;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    // Insert procedures and roll wal after every insert.<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    for (int i = 0; i &lt; procs.length; i++) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      procs[i] = new TestSequentialProcedure();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      procStore.insert(procs[i], null);<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      procStore.rollWriterForTesting();<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      logs = procStore.getActiveLogs();<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      assertEquals(i + 2, logs.size());  // Extra 1 for current ongoing wal.<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    }<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>    for (int i = 1; i &lt; procs.length; i++) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      procStore.delete(procs[i].getProcId());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    }<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    assertEquals(procs.length + 1, procStore.getActiveLogs().size());<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    procStore.delete(procs[0].getProcId());<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    assertEquals(1, procStore.getActiveLogs().size());<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  }<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>  @Test<a name="line.195"></a>
+<span class="sourceLineNo">196</span>  public void testWalCleanerUpdates() throws Exception {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    TestSequentialProcedure p1 = new TestSequentialProcedure();<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    TestSequentialProcedure p2 = new TestSequentialProcedure();<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    procStore.insert(p1, null);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    procStore.insert(p2, null);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    procStore.rollWriterForTesting();<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    ProcedureWALFile firstLog = procStore.getActiveLogs().get(0);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    procStore.update(p1);<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    procStore.rollWriterForTesting();<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    procStore.update(p2);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    procStore.rollWriterForTesting();<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    procStore.removeInactiveLogsForTesting();<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    assertFalse(procStore.getActiveLogs().contains(firstLog));<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  }<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span>  @Test<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  public void testWalCleanerUpdatesDontLeaveHoles() throws Exception {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    TestSequentialProcedure p1 = new TestSequentialProcedure();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    TestSequentialProcedure p2 = new TestSequentialProcedure();<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    procStore.insert(p1, null);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>    procStore.insert(p2, null);<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    procStore.rollWriterForTesting();  // generates first log with p1 + p2<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    ProcedureWALFile log1 = procStore.getActiveLogs().get(0);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    procStore.update(p2);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    procStore.rollWriterForTesting();  // generates second log with p2<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    ProcedureWALFile log2 = procStore.getActiveLogs().get(1);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    procStore.update(p2);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    procStore.rollWriterForTesting();  // generates third log with p2<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    procStore.removeInactiveLogsForTesting();  // Shouldn't remove 2nd log.<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    assertEquals(4, procStore.getActiveLogs().size());<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    procStore.update(p1);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    procStore.rollWriterForTesting();  // generates fourth log with p1<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    procStore.removeInactiveLogsForTesting();  // Should remove first two logs.<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    assertEquals(3, procStore.getActiveLogs().size());<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    assertFalse(procStore.getActiveLogs().contains(log1));<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    assertFalse(procStore.getActiveLogs().contains(log2));<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span>  @Test<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public void testWalCleanerWithEmptyRolls() throws Exception {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    final Procedure[] procs = new Procedure[3];<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      procs[i] = new TestSequentialProcedure();<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      procStore.insert(procs[i], null);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    }<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    assertEquals(1, procStore.getActiveLogs().size());<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    procStore.rollWriterForTesting();<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    assertEquals(2, procStore.getActiveLogs().size());<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    procStore.rollWriterForTesting();<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    assertEquals(3, procStore.getActiveLogs().size());<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      procStore.update(procs[i]);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      procStore.rollWriterForTesting();<a name="line.249"></a>
 <span class="sourceLineNo">250</span>      procStore.rollWriterForTesting();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      procStore.rollWriterForTesting();<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      if (i &lt; (procs.length - 1)) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        assertEquals(3 + ((i + 1) * 2), procStore.getActiveLogs().size());<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      }<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    assertEquals(7, procStore.getActiveLogs().size());<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      procStore.delete(procs[i].getProcId());<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      assertEquals(7 - ((i + 1) * 2), procStore.getActiveLogs().size());<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    }<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    assertEquals(1, procStore.getActiveLogs().size());<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  }<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span>  @Test<a name="line.265"></a>
-<span class="sourceLineNo">266</span>  public void testEmptyLogLoad() throws Exception {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    LoadCounter loader = new LoadCounter();<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    storeRestart(loader);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    assertEquals(0, loader.getMaxProcId());<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    assertEquals(0, loader.getLoadedCount());<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    assertEquals(0, loader.getCorruptedCount());<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  }<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>  @Test<a name="line.274"></a>
-<span class="sourceLineNo">275</span>  public void testLoad() throws Exception {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    Set&lt;Long&gt; procIds = new HashSet&lt;&gt;();<a name="line.276"></a>
-<span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span>    // Insert something in the log<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    Procedure proc1 = new TestSequentialProcedure();<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    procIds.add(proc1.getProcId());<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    procStore.insert(proc1, null);<a name="line.281"></a>
-<span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>    Procedure proc2 = new TestSequentialProcedure();<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    Procedure[] child2 = new Procedure[2];<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    child2[0] = new TestSequentialProcedure();<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    child2[1] = new TestSequentialProcedure();<a name="line.286"></a>
-<span class="sourceLineNo">287</span><a name="line.287"></a>
-<span class="sourceLineNo">288</span>    procIds.add(proc2.getProcId());<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    procIds.add(child2[0].getProcId());<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    procIds.add(child2[1].getProcId());<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    procStore.insert(proc2, child2);<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>    // Verify that everything is there<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    verifyProcIdsOnRestart(procIds);<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>    // Update and delete something<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    procStore.update(proc1);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    procStore.update(child2[1]);<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    procStore.delete(child2[1].getProcId());<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    procIds.remove(child2[1].getProcId());<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>    // Verify that everything is there<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    verifyProcIdsOnRestart(procIds);<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>    // Remove 4 byte from the trailers<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    procStore.stop(false);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    FileStatus[] logs = fs.listStatus(logDir);<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    assertEquals(3, logs.length);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    for (int i = 0; i &lt; logs.length; ++i) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      corruptLog(logs[i], 4);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    verifyProcIdsOnRestart(procIds);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  }<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span>  @Test<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  public void testNoTrailerDoubleRestart() throws Exception {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>    // log-0001: proc 0, 1 and 2 are inserted<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    Procedure proc0 = new TestSequentialProcedure();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    procStore.insert(proc0, null);<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    Procedure proc1 = new TestSequentialProcedure();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    procStore.insert(proc1, null);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    Procedure proc2 = new TestSequentialProcedure();<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    procStore.insert(proc2, null);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    procStore.rollWriterForTesting();<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>    // log-0002: proc 1 deleted<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    procStore.delete(proc1.getProcId());<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    procStore.rollWriterForTesting();<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>    // log-0003: proc 2 is update<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    procStore.update(proc2);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    procStore.rollWriterForTesting();<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>    // log-0004: proc 2 deleted<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    procStore.delete(proc2.getProcId());<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>    // stop the store and remove the trailer<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    procStore.stop(false);<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    FileStatus[] logs = fs.listStatus(logDir);<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    assertEquals(4, logs.length);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    for (int i = 0; i &lt; logs.length; ++i) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      corruptLog(logs[i], 4);<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>    // Test Load 1<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    // Restart the store (avoid cleaning up the files, to check the rebuilded trackers)<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    htu.getConfiguration().setBoolean(WALProcedureStore.EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY, false);<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    LoadCounter loader = new LoadCounter();<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    storeRestart(loader);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    assertEquals(1, loader.getLoadedCount());<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    assertEquals(0, loader.getCorruptedCount());<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span>    // Test Load 2<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    assertEquals(5, fs.listStatus(logDir).length);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    loader = new LoadCounter();<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    storeRestart(loader);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    assertEquals(1, loader.getLoadedCount());<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    assertEquals(0, loader.getCorruptedCount());<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>    // remove proc-0<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    procStore.delete(proc0.getProcId());<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    procStore.periodicRollForTesting();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    assertEquals(1, fs.listStatus(logDir).length);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    storeRestart(loader);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>  @Test<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  public void testProcIdHoles() throws Exception {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    // Insert<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    for (int i = 0; i &lt; 100; i += 2) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      procStore.insert(new TestProcedure(i), null);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      if (i &gt; 0 &amp;&amp; (i % 10) == 0) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>        LoadCounter loader = new LoadCounter();<a name="line.373"></a>
-<span class="sourceLineNo">374</span>        storeRestart(loader);<a name="line.374"></a>
-<span class="sourceLineNo">375</span>        assertEquals(0, loader.getCorruptedCount());<a name="line.375"></a>
-<span class="sourceLineNo">376</span>        assertEquals((i / 2) + 1, loader.getLoadedCount());<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>    assertEquals(10, procStore.getActiveLogs().size());<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>    // Delete<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    for (int i = 0; i &lt; 100; i += 2) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      procStore.delete(i);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    assertEquals(1, procStore.getActiveLogs().size());<a name="line.385"></a>
-<span class="sourceLineNo">386</span><a name="line.386"></a>
-<span class="sourceLineNo">387</span>    LoadCounter loader = new LoadCounter();<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    storeRestart(loader);<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    assertEquals(0, loader.getLoadedCount());<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    assertEquals(0, loader.getCorruptedCount());<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>  @Test<a name="line.393"></a>
-<span class="sourceLineNo">394</span>  public void testCorruptedTrailer() throws Exception {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>    // Insert something<a name="line.395"></a>
-<span class="sourceLineNo">396</span>    for (int i = 0; i &lt; 100; ++i) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      procStore.insert(new TestSequentialProcedure(), null);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    }<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span>    // Stop the store<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    procStore.stop(false);<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span>    // Remove 4 byte from the trailer<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    FileStatus[] logs = fs.listStatus(logDir);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    assertEquals(1, logs.length);<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    corruptLog(logs[0], 4);<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    LoadCounter loader = new LoadCounter();<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    storeRestart(loader);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    assertEquals(100, loader.getLoadedCount());<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    assertEquals(0, loader.getCorruptedCount());<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>  private static void assertUpdated(final ProcedureStoreTracker tracker,<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      final Procedure[] procs, final int[] updatedProcs, final int[] nonUpdatedProcs) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    for (int index : updatedProcs) {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      long procId = procs[index].getProcId();<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      assertTrue("Procedure id : " + procId, tracker.isUpdated(procId));<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    }<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    for (int index : nonUpdatedProcs) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      long procId = procs[index].getProcId();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      assertFalse("Procedure id : " + procId, tracker.isUpdated(procId));<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
-<span class="sourceLineNo">424</span>  }<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>  private static void assertDeleted(final ProcedureStoreTracker tracker,<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      final Procedure[] procs, final int[] deletedProcs, final int[] nonDeletedProcs) {<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    for (int index : deletedProcs) {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      long procId = procs[index].getProcId();<a name="line.429"></a>
-<span class="sourceLineNo">430</span>      assertEquals("Procedure id : " + procId,<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          ProcedureStoreTracker.DeleteState.YES, tracker.isDeleted(procId));<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    }<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    for (int index : nonDeletedProcs) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      long procId = procs[index].getProcId();<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      assertEquals("Procedure id : " + procId,<a name="line.435"></a>
-<span class="sourceLineNo">436</span>          ProcedureStoreTracker.DeleteState.NO, tracker.isDeleted(procId));<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  }<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  @Test<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  public void testCorruptedTrailersRebuild() throws Exception {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    final Procedure[] procs = new Procedure[6];<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      procs[i] = new TestSequentialProcedure();<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    }<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    // Log State (I=insert, U=updated, D=delete)<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    //   | log 1 | log 2 | log 3 |<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    // 0 | I, D  |       |       |<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    // 1 | I     |       |       |<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    // 2 | I     | D     |       |<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    // 3 | I     | U     |       |<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    // 4 |       | I     | D     |<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    // 5 |       |       | I     |<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    procStore.insert(procs[0], null);<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    procStore.insert(procs[1], null);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    procStore.insert(procs[2], null);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    procStore.insert(procs[3], null);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    procStore.delete(procs[0].getProcId());<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    procStore.rollWriterForTesting();<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    procStore.delete(procs[2].getProcId());<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    procStore.update(procs[3]);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    procStore.insert(procs[4], null);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    procStore.rollWriterForTesting();<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    procStore.delete(procs[4].getProcId());<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    procStore.insert(procs[5], null);<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>    // Stop the store<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    procStore.stop(false);<a name="line.468"></a>
-<span class="sourceLineNo">469</span><a name="line.469"></a>
-<span class="sourceLineNo">470</span>    // Remove 4 byte from the trailers<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    final FileStatus[] logs = fs.listStatus(logDir);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    assertEquals(3, logs.length);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    for (int i = 0; i &lt; logs.length; ++i) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      corruptLog(logs[i], 4);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span><a name="line.476"></a>
-<span class="sourceLineNo">477</span>    // Restart the store (avoid cleaning up the files, to check the rebuilded trackers)<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    htu.getConfiguration().setBoolean(WALProcedureStore.EXEC_WAL_CLEANUP_ON_LOAD_CONF_KEY, false);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    final LoadCounter loader = new LoadCounter();<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    storeRestart(loader);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    assertEquals(3, loader.getLoadedCount());  // procs 1, 3 and 5<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    assertEquals(0, loader.getCorruptedCount());<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>    // Check the Trackers<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    final ArrayList&lt;ProcedureWALFile&gt; walFiles = procStore.getActiveLogs();<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    LOG.info("WALs " + walFiles);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    assertEquals(4, walFiles.size());<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    LOG.info("Checking wal " + walFiles.get(0));<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    assertUpdated(walFiles.get(0).getTracker(), procs, new int[]{0, 1, 2, 3}, new int[] {4, 5});<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    LOG.info("Checking wal " + walFiles.get(1));<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    assertUpdated(walFiles.get(1).getTracker(), procs, new int[]{2, 3, 4}, new int[] {0, 1, 5});<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    LOG.info("Checking wal " + walFiles.get(2));<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    assertUpdated(walFiles.get(2).getTracker(), procs, new int[]{4, 5}, new int[] {0, 1, 2, 3});<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    LOG.info("Checking global tracker ");<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    assertDeleted(procStore.getStoreTracker(), procs, new int[]{0, 2, 4}, new int[] {1, 3, 5});<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>  @Test<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  public void testCorruptedEntries() throws Exception {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    // Insert something<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    for (int i = 0; i &lt; 100; ++i) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      procStore.insert(new TestSequentialProcedure(), null);<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>    // Stop the store<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    procStore.stop(false);<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span>    // Remove some byte from the log<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    // (enough to cut the trailer and corrupt some entries)<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    FileStatus[] logs = fs.listStatus(logDir);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    assertEquals(1, logs.length);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    corruptLog(logs[0], 1823);<a name="line.512"></a>
-<span class="sourceLineNo">513</span><a name="line.513"></a>
-<span class="sourceLineNo">514</span>    LoadCounter loader = new LoadCounter();<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    storeRestart(loader);<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    assertTrue(procStore.getCorruptedLogs() != null);<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    assertEquals(1, procStore.getCorruptedLogs().size());<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    assertEquals(85, loader.getLoadedCount());<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    assertEquals(0, loader.getCorruptedCount());<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  }<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>  @Test<a name="line.522"></a>
-<span class="sourceLineNo">523</span>  public void testCorruptedProcedures() throws Exception {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>    // Insert root-procedures<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    TestProcedure[] rootProcs = new TestProcedure[10];<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    for (int i = 1; i &lt;= rootProcs.length; i++) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      rootProcs[i-1] = new TestProcedure(i, 0);<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      procStore.insert(rootProcs[i-1], null);<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      rootProcs[i-1].addStackId(0);<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      procStore.update(rootProcs[i-1]);<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    }<a name="line.531"></a>
-<span class="sourceLineNo">532</span>    // insert root-child txn<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    procStore.rollWriterForTesting();<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    for (int i = 1; i &lt;= rootProcs.length; i++) {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      TestProcedure b = new TestProcedure(rootProcs.length + i, i);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      rootProcs[i-1].addStackId(1);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>      procStore.insert(rootProcs[i-1], new Procedure[] { b });<a name="line.537"></a>
-<span class="sourceLineNo">538</span>    }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    // insert child updates<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    procStore.rollWriterForTesting();<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    for (int i = 1; i &lt;= rootProcs.length; i++) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      procStore.update(new TestProcedure(rootProcs.length + i, i));<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>    // Stop the store<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    procStore.stop(false);<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>    // the first log was removed,<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    // we have insert-txn and updates in the others so everything is fine<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    FileStatus[] logs = fs.listStatus(logDir);<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    assertEquals(Arrays.toString(logs), 2, logs.length);<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    Arrays.sort(logs, new Comparator&lt;FileStatus&gt;() {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>      @Override<a name="line.553"></a>
-<span class="sourceLineNo">554</span>      public int compare(FileStatus o1, FileStatus o2) {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>        return o1.getPath().getName().compareTo(o2.getPath().getName());<a name="line.555"></a>
-<span class="sourceLineNo">556</span>      }<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    });<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>    LoadCounter loader = new LoadCounter();<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    storeRestart(loader);<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    assertEquals(rootProcs.length * 2, loader.getLoadedCount());<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    assertEquals(0, loader.getCorruptedCount());<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
-<span class="sourceLineNo">564</span>    // Remove the second log, we have lost all the root/parent references<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    fs.delete(logs[0].getPath(), false);<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    loader.reset();<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    storeRestart(loader);<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    assertEquals(0, loader.getLoadedCount());<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    assertEquals(rootProcs.length, loader.getCorruptedCount());<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    for (Procedure proc: loader.getCorrupted()) {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      assertTrue(proc.toString(), proc.getParentProcId() &lt;= rootProcs.length);<a name="line.571"></a>
-<span class="sourceLineNo">572</span>      assertTrue(proc.toString(),<a name="line.572"></a>
-<span class="sourceLineNo">573</span>                  proc.getProcId() &gt; rootProcs.length &amp;&amp;<a name="line.573"></a>
-<span class="sourceLineNo">574</span>                  proc.getProcId() &lt;= (rootProcs.length * 2));<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    }<a name="line.575"></a>
-<span class="sourceLineNo">576</span>  }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>  @Test(timeout=60000)<a name="line.578"></a>
-<span class="sourceLineNo">579</span>  public void testWalReplayOrder_AB_A() throws Exception {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    /*<a name="line.580"></a>
-<span class="sourceLineNo">581</span>     * | A B | -&gt; | A |<a name="line.581"></a>
-<span class="sourceLineNo">582</span>     */<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    TestProcedure a = new TestProcedure(1, 0);<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    TestProcedure b = new TestProcedure(2, 1);<a name="line.584"></a>
-<span class="sourceLineNo">585</span><a name="line.585"></a>
-<span class="sourceLineNo">586</span>    procStore.insert(a, null);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    a.addStackId(0);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    procStore.update(a);<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>    procStore.insert(a, new Procedure[] { b });<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    b.addStackId(1);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    procStore.update(b);<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span>    procStore.rollWriterForTesting();<a name="line.594"></a>
-<span class="sourceLineNo">595</span><a name="line.595"></a>
-<span class="sourceLineNo">596</span>    a.addStackId(2);<a name="line.596"></a>
-<span class="sourceLineNo">597</span>    procStore.update(a);<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span>    storeRestart(new ProcedureStore.ProcedureLoader() {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>      @Override<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      public void setMaxProcId(long maxProcId) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>        assertEquals(2, maxProcId);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      }<a name="line.603"></a>
-<span class="sourceLineNo">604</span><a name="line.604"></a>
-<span class="sourceLineNo">605</span>      @Override<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      public void load(ProcedureIterator procIter) throws IOException {<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        assertTrue(procIter.hasNext());<a name="line.607"></a>
-<span class="sourceLineNo">608</span>        assertEquals(1, procIter.nextAsProcedureInfo().getProcId());<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        assertTrue(procIter.hasNext());<a name="line.609"></a>
-<span class="sourceLineNo">610</span>        assertEquals(2, procIter.nextAsProcedureInfo().getProcId());<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        assertFalse(procIter.hasNext());<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>      @Override<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.615"></a>
-<span class="sourceLineNo">616</span>        assertFalse(procIter.hasNext());<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>  }<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>  @Test(timeout=60000)<a name="line.621"></a>
-<span class="sourceLineNo">622</span>  public void testWalReplayOrder_ABC_BAD() throws Exception {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>    /*<a name="line.623"></a>
-<span class="sourceLineNo">624</span>     * | A B C | -&gt; | B A D |<a name="line.624"></a>
-<span class="sourceLineNo">625</span>     */<a name="line.625"></a>
-<span class="sourceLineNo">626</span>    TestProcedure a = new TestProcedure(1, 0);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    TestProcedure b = new TestProcedure(2, 1);<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    TestProcedure c = new TestProcedure(3, 2);<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    TestProcedure d = new TestProcedure(4, 0);<a name="line.629"></a>
-<span class="sourceLineNo">630</span><a name="line.630"></a>
-<span class="sourceLineNo">631</span>    procStore.insert(a, null);<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    a.addStackId(0);<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    procStore.update(a);<a name="line.633"></a>
-<span class="sourceLineNo">634</span><a name="line.634"></a>
-<span class="sourceLineNo">635</span>    procStore.insert(a, new Procedure[] { b });<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    b.addStackId(1);<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    procStore.update(b);<a name="line.637"></a>
-<span class="sourceLineNo">638</span><a name="line.638"></a>
-<span class="sourceLineNo">639</span>    procStore.insert(b, new Procedure[] { c });<a name="line.639"></a>
-<span class="sourceLineNo">640</span>    b.addStackId(2);<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    procStore.update(b);<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span>    procStore.rollWriterForTesting();<a name="line.643"></a>
-<span class="sourceLineNo">644</span><a name="line.644"></a>
-<span class="sourceLineNo">645</span>    b.addStackId(3);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    procStore.update(b);<a name="line.646"></a>
-<span class="sourceLineNo">647</span><a name="line.647"></a>
-<span class="sourceLineNo">648</span>    a.addStackId(4);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    procStore.update(a);<a name="line.649"></a>
-<span class="sourceLineNo">650</span><a name="line.650"></a>
-<span class="sourceLineNo">651</span>    procStore.insert(d, null);<a name="line.651"></a>
-<span class="sourceLineNo">652</span>    d.addStackId(0);<a name="line.652"></a>
-<span class="sourceLineNo">653</span>    procStore.update(d);<a name="line.653"></a>
-<span class="sourceLineNo">654</span><a name="line.654"></a>
-<span class="sourceLineNo">655</span>    storeRestart(new ProcedureStore.ProcedureLoader() {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      @Override<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      public void setMaxProcId(long maxProcId) {<a name="line.657"></a>
-<span class="sourceLineNo">658</span>        assertEquals(4, maxProcId);<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>      @Override<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      public void load(ProcedureIterator procIter) throws IOException {<a name="line.662"></a>
-<span class="sourceLineNo">663</span>        assertTrue(procIter.hasNext());<a name="line.663"></a>
-<span class="sourceLineNo">664</span>        assertEquals(4, procIter.nextAsProcedureInfo().getProcId());<a name="line.664"></a>
-<span class="sourceLineNo">665</span>        // TODO: This will be multiple call once we do fast-start<a name="line.665"></a>
-<span class="sourceLineNo">666</span>        //assertFalse(procIter.hasNext());<a name="line.666"></a>
-<span class="sourceLineNo">667</span><a name="line.667"></a>
-<span class="sourceLineNo">668</span>        assertTrue(procIter.hasNext());<a name="line.668"></a>
-<span class="sourceLineNo">669</span>        assertEquals(1, procIter.nextAsProcedureInfo().getProcId());<a name="line.669"></a>
-<span class="sourceLineNo">670</span>        assertTrue(procIter.hasNext());<a name="line.670"></a>
-<span class="sourceLineNo">671</span>        assertEquals(2, procIter.nextAsProcedureInfo().getProcId());<a name="line.671"></a>
-<span class="sourceLineNo">672</span>        assertTrue(procIter.hasNext());<a name="line.672"></a>
-<span class="sourceLineNo">673</span>        assertEquals(3, procIter.nextAsProcedureInfo().getProcId());<a name="line.673"></a>
-<span class="sourceLineNo">674</span>        assertFalse(procIter.hasNext());<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>      @Override<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      public void handleCorrupted(ProcedureIterator procIter) throws IOException {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>        assertFalse(procIter.hasNext());<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      }<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    });<a name="line.681"></a>
-<span class="sourceLineNo">682</span>  }<a name="line.682"></a>
-<span class="sourceLineNo">683</span><a name="line.683"></a>
-<span class="sourceLineNo">684</span>  @Test<a name="line.684"></a>
-<span class="sourceLineNo">685</span>  public void testRollAndRemove() throws IOException {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    // Insert something in the log<a name="line.686"></a>
-<span class="sourceLineNo">687</span>    Procedure proc1 = new TestSequentialProcedure();<a name="line.687"></a>
-<span class="sourceLineNo">688</span>    procStore.insert(proc1, null);<a name="line.688"></a>
-<span class="sourceLineNo">689</span><a name="line.689"></a>
-<span class="sourceLineNo">690</span>    Procedure proc2 = new TestSequentialProcedure();<a name="line.690"></a>
-<span class="sourceLineNo">691</span>    procStore.insert(proc2, null);<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span>    // roll the log, now we have 2<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    procStore.rollWriterForTesting();<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    assertEquals(2, procStore.getActiveLogs().size());<a name="line.695"></a>
-<span class="sourceLineNo">696</span><a name="line.696"></a>
-<span class="sourceLineNo">697</span>    // everything will be up to date in the second log<a name="line.697"></a>
-<span class="sourceLineNo">698</span>    // so we can remove the first one<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    procStore.update(proc1);<a name="line.699"></a>
-<span class="sourceLineNo">700</span>    procStore.update(proc2);<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    assertEquals(1, procStore.getActiveLogs().size());<a name="line.701"></a>
-<span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span>    // roll the log, now we have 2<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    procStore.rollWriterForTesting();<a name="line.704"></a>
-<span class="sourceLineNo">705</span>    assertEquals(2, procStore.getActiveLogs().size());<a name="line.705"></a>
-<span class="sourceLineNo">706</span><a name="line.706"></a>
-<span class="sourceLineNo">707</span>    // remove everything active<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    // so we can remove all the logs<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    procStore.delete(proc1.getProcId());<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    procStore.delete(proc2.getProcId());<a name="line.710"></a>
-<span class="sourceLineNo">711</span>    assertEquals(1, procStore.getActiveLogs().size());<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span>  @Test<a name="line.714"></a>
-<span class="sourceLineNo">715</span>  public void testFileNotFoundDuringLeaseRecovery() throws IOException {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>    final TestProcedure[] procs = new TestProcedure[3];<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.717"></a>
-<span class="sourceLineNo">718</span>      procs[i] = new TestProcedure(i + 1, 0);<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      procStore.insert(procs[i], null);<a name="line.719"></a>
-<span class="sourceLineNo">720</span>    }<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    procStore.rollWriterForTesting();<a name="line.721"></a>
-<span class="sourceLineNo">722</span>    for (int i = 0; i &lt; procs.length; ++i) {<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      procStore.update(procs[i]);<a name="line.723"></a>
-<

<TRUNCATED>

[14/18] hbase-site git commit: Published site at 59e8b8e2ba4d403d042fe4cc02f8f9f80aad67af.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 b6b4cb6..a1495ff 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
@@ -1381,472 +1381,477 @@
 <span class="sourceLineNo">1373</span>        return;<a name="line.1373"></a>
 <span class="sourceLineNo">1374</span>      }<a name="line.1374"></a>
 <span class="sourceLineNo">1375</span><a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      // if the store is not running we are aborting<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      if (!store.isRunning()) return;<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span><a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>      // Commit the transaction<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span><a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>        scheduler.yield(procedure);<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        return;<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>      }<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span><a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>    } while (reExecute);<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span><a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>    // Submit the new subprocedures<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>      submitChildrenProcedures(subprocs);<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    }<a name="line.1395"></a>
+<span class="sourceLineNo">1376</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>      // Commit the transaction<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span><a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>      // if the store is not running we are aborting<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>      if (!store.isRunning()) return;<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span><a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>        scheduler.yield(procedure);<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        return;<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span><a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    } while (reExecute);<a name="line.1395"></a>
 <span class="sourceLineNo">1396</span><a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>    // if the procedure is complete and has a parent, count down the children latch<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>    if (procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      countDownChildren(procStack, procedure);<a name="line.1399"></a>
+<span class="sourceLineNo">1397</span>    // Submit the new subprocedures<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>      submitChildrenProcedures(subprocs);<a name="line.1399"></a>
 <span class="sourceLineNo">1400</span>    }<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>  }<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span><a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>  private Procedure[] initializeChildren(final RootProcedureState procStack,<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>    assert subprocs != null : "expected subprocedures";<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      final Procedure subproc = subprocs[i];<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>      if (subproc == null) {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>          new IllegalArgumentIOException(msg)));<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>        return null;<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>      }<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span><a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>      subproc.setRootProcId(rootProcId);<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>      subproc.setProcId(nextProcId());<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>      procStack.addSubProcedure(subproc);<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>    }<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span><a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>    if (!procedure.isFailed()) {<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>      switch (procedure.getState()) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>        case RUNNABLE:<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>          break;<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        case WAITING_TIMEOUT:<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>          timeoutExecutor.add(procedure);<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>          break;<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>        default:<a name="line.1432"></a>
+<span class="sourceLineNo">1401</span><a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>    // if the procedure is complete and has a parent, count down the children latch<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>    if (procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>      countDownChildren(procStack, procedure);<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>    }<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>  }<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span><a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>  private Procedure[] initializeChildren(final RootProcedureState procStack,<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>    assert subprocs != null : "expected subprocedures";<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>      final Procedure subproc = subprocs[i];<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>      if (subproc == null) {<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>          new IllegalArgumentIOException(msg)));<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>        return null;<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>      }<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span><a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>      subproc.setRootProcId(rootProcId);<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>      subproc.setProcId(nextProcId());<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>      procStack.addSubProcedure(subproc);<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span><a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>    if (!procedure.isFailed()) {<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      switch (procedure.getState()) {<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>        case RUNNABLE:<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1432"></a>
 <span class="sourceLineNo">1433</span>          break;<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>      }<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>    }<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>    return subprocs;<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>  }<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span><a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>  private void submitChildrenProcedures(final Procedure[] subprocs) {<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      final Procedure subproc = subprocs[i];<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      scheduler.addFront(subproc);<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>    }<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>  }<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span><a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>  private void countDownChildren(final RootProcedureState procStack, final Procedure procedure) {<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>    final Procedure parent = procedures.get(procedure.getParentProcId());<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>    if (parent == null) {<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      assert procStack.isRollingback();<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      return;<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>    }<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span><a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>    // If this procedure is the last child awake the parent procedure<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>    if (traceEnabled) {<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      LOG.trace(parent + " child is done: " + procedure);<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>    }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span><a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    if (parent.childrenCountDown() &amp;&amp; parent.getState() == ProcedureState.WAITING) {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>      parent.setState(ProcedureState.RUNNABLE);<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>      store.update(parent);<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>      scheduler.addFront(parent);<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>      if (traceEnabled) {<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>        LOG.trace(parent + " all the children finished their work, resume.");<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>      }<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>      return;<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>  }<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span><a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>  private void updateStoreOnExec(final RootProcedureState procStack,<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      if (LOG.isTraceEnabled()) {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>      }<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      store.insert(procedure, subprocs);<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    } else {<a name="line.1479"></a>
+<span class="sourceLineNo">1434</span>        case WAITING_TIMEOUT:<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>          timeoutExecutor.add(procedure);<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>          break;<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>        default:<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>          break;<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>      }<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>    }<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>    return subprocs;<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>  }<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span><a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>  private void submitChildrenProcedures(final Procedure[] subprocs) {<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>      final Procedure subproc = subprocs[i];<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>      scheduler.addFront(subproc);<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>    }<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>  }<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span><a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>  private void countDownChildren(final RootProcedureState procStack, final Procedure procedure) {<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>    final Procedure parent = procedures.get(procedure.getParentProcId());<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>    if (parent == null) {<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>      assert procStack.isRollingback();<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>      return;<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>    }<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span><a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    // If this procedure is the last child awake the parent procedure<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>    if (traceEnabled) {<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>      LOG.trace(parent + " child is done: " + procedure);<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>    }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span><a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>    if (parent.childrenCountDown() &amp;&amp; parent.getState() == ProcedureState.WAITING) {<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>      parent.setState(ProcedureState.RUNNABLE);<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>      store.update(parent);<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>      scheduler.addFront(parent);<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>      if (traceEnabled) {<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>        LOG.trace(parent + " all the children finished their work, resume.");<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>      }<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>      return;<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>    }<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>  }<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span><a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>  private void updateStoreOnExec(final RootProcedureState procStack,<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1479"></a>
 <span class="sourceLineNo">1480</span>      if (LOG.isTraceEnabled()) {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>        LOG.trace("Store update " + procedure);<a name="line.1481"></a>
+<span class="sourceLineNo">1481</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1481"></a>
 <span class="sourceLineNo">1482</span>      }<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>        // remove child procedures<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>        if (childProcIds != null) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>          store.delete(procedure, childProcIds);<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>            procedures.remove(childProcIds[i]);<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>          }<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>        } else {<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          store.update(procedure);<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>        }<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>      } else {<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>        store.update(procedure);<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>      }<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>    }<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>  }<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span><a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  private void handleInterruptedException(final Procedure proc, final InterruptedException e) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>    if (LOG.isTraceEnabled()) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>      LOG.trace("Interrupt during " + proc + ". suspend and retry it later.", e);<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>    }<a name="line.1503"></a>
+<span class="sourceLineNo">1483</span>      store.insert(procedure, subprocs);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>    } else {<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>      if (LOG.isTraceEnabled()) {<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>        LOG.trace("Store update " + procedure);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      }<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>        // remove child procedures<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>        if (childProcIds != null) {<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>          store.delete(procedure, childProcIds);<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>            procedures.remove(childProcIds[i]);<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>          }<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>        } else {<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>          store.update(procedure);<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        }<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>      } else {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>        store.update(procedure);<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>      }<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>    }<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>  }<a name="line.1503"></a>
 <span class="sourceLineNo">1504</span><a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>    // and the executor/store will be stopped.<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>  }<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span><a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>  private void execCompletionCleanup(final Procedure proc) {<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    final TEnvironment env = getEnvironment();<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    if (proc.holdLock(env) &amp;&amp; proc.hasLock(env)) {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      releaseLock(proc, true);<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>    }<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>    try {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>      proc.completionCleanup(env);<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>    } catch (Throwable e) {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>    }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>  }<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span><a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>  private void procedureFinished(final Procedure proc) {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    // call the procedure completion cleanup handler<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    execCompletionCleanup(proc);<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span><a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>    // update the executor internal state maps<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>    final ProcedureInfo procInfo = ProcedureUtil.convertToProcedureInfo(proc, proc.getNonceKey());<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>      procInfo.setClientAckTime(0);<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>    }<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>    completed.put(procInfo.getProcId(), procInfo);<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>    rollbackStack.remove(proc.getProcId());<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>    procedures.remove(proc.getProcId());<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>    // call the runnableSet completion cleanup handler<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>    try {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      scheduler.completionCleanup(proc);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>    } catch (Throwable e) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: " + proc, e);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>    }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span><a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    // Notify the listeners<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>  }<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span><a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>  // ==========================================================================<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>  //  Worker Thread<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>  // ==========================================================================<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>  private final class WorkerThread extends StoppableThread {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span><a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>    public WorkerThread(final ThreadGroup group) {<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      super(group, "ProcExecWorker-" + workerId.incrementAndGet());<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>    }<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span><a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>    @Override<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>    public void sendStopSignal() {<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      scheduler.signalAll();<a name="line.1563"></a>
+<span class="sourceLineNo">1505</span>  private void handleInterruptedException(final Procedure proc, final InterruptedException e) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>    if (LOG.isTraceEnabled()) {<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>      LOG.trace("Interrupt during " + proc + ". suspend and retry it later.", e);<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>    }<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span><a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>    // and the executor/store will be stopped.<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>  }<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span><a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>  private void execCompletionCleanup(final Procedure proc) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    final TEnvironment env = getEnvironment();<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    if (proc.holdLock(env) &amp;&amp; proc.hasLock(env)) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>      releaseLock(proc, true);<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>    }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>    try {<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      proc.completionCleanup(env);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>    } catch (Throwable e) {<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>    }<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>  }<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span><a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>  private void procedureFinished(final Procedure proc) {<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    // call the procedure completion cleanup handler<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    execCompletionCleanup(proc);<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span><a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>    // update the executor internal state maps<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>    final ProcedureInfo procInfo = ProcedureUtil.convertToProcedureInfo(proc, proc.getNonceKey());<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      procInfo.setClientAckTime(0);<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>    }<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span><a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>    completed.put(procInfo.getProcId(), procInfo);<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    rollbackStack.remove(proc.getProcId());<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>    procedures.remove(proc.getProcId());<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span><a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>    // call the runnableSet completion cleanup handler<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>    try {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>      scheduler.completionCleanup(proc);<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>    } catch (Throwable e) {<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: " + proc, e);<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>    }<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span><a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>    // Notify the listeners<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>  }<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span><a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>  // ==========================================================================<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>  //  Worker Thread<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>  // ==========================================================================<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>  private final class WorkerThread extends StoppableThread {<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span><a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    public WorkerThread(final ThreadGroup group) {<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>      super(group, "ProcExecWorker-" + workerId.incrementAndGet());<a name="line.1563"></a>
 <span class="sourceLineNo">1564</span>    }<a name="line.1564"></a>
 <span class="sourceLineNo">1565</span><a name="line.1565"></a>
 <span class="sourceLineNo">1566</span>    @Override<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    public void run() {<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>        final Procedure procedure = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>        if (procedure == null) continue;<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span><a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>        store.setRunningProcedureCount(activeExecutorCount.incrementAndGet());<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>        executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        try {<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          if (traceEnabled) {<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>            LOG.trace("Trying to start the execution of " + procedure);<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>          }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>          executeProcedure(procedure);<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>        } finally {<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>          store.setRunningProcedureCount(activeExecutorCount.decrementAndGet());<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>          lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>          executionStartTime.set(Long.MAX_VALUE);<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>        }<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      }<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      LOG.debug("Worker thread terminated " + this);<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>      workerThreads.remove(this);<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>    }<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span><a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>    /**<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>     * @return the time since the current procedure is running<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>     */<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    public long getCurrentRunTime() {<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    }<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span><a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    private boolean keepAlive(final long lastUpdate) {<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>      if (workerThreads.size() &lt;= corePoolSize) return true;<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      return (EnvironmentEdgeManager.currentTime() - lastUpdate) &lt; keepAliveTime;<a name="line.1600"></a>
+<span class="sourceLineNo">1567</span>    public void sendStopSignal() {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>      scheduler.signalAll();<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>    }<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span><a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    @Override<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>    public void run() {<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>        final Procedure procedure = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>        if (procedure == null) continue;<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span><a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>        store.setRunningProcedureCount(activeExecutorCount.incrementAndGet());<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>        executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>        try {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>          if (traceEnabled) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>            LOG.trace("Trying to start the execution of " + procedure);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>          }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>          executeProcedure(procedure);<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>        } finally {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          store.setRunningProcedureCount(activeExecutorCount.decrementAndGet());<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>          lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>          executionStartTime.set(Long.MAX_VALUE);<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>        }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      }<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      LOG.debug("Worker thread terminated " + this);<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      workerThreads.remove(this);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>    }<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span><a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>    /**<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>     * @return the time since the current procedure is running<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>     */<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    public long getCurrentRunTime() {<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1600"></a>
 <span class="sourceLineNo">1601</span>    }<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>  }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span><a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>  // ==========================================================================<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>  //  Timeout Thread<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>  // ==========================================================================<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>  private final class TimeoutExecutorThread extends StoppableThread {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    private final DelayQueue&lt;DelayedWithTimeout&gt; queue = new DelayQueue&lt;&gt;();<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span><a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    public TimeoutExecutorThread(final ThreadGroup group) {<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>      super(group, "ProcedureTimeoutExecutor");<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>    }<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span><a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    @Override<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>    public void sendStopSignal() {<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>      queue.add(DelayedUtil.DELAYED_POISON);<a name="line.1616"></a>
+<span class="sourceLineNo">1602</span><a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    private boolean keepAlive(final long lastUpdate) {<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      if (workerThreads.size() &lt;= corePoolSize) return true;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>      return (EnvironmentEdgeManager.currentTime() - lastUpdate) &lt; keepAliveTime;<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    }<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>  }<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span><a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>  // ==========================================================================<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>  //  Timeout Thread<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>  // ==========================================================================<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>  private final class TimeoutExecutorThread extends StoppableThread {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    private final DelayQueue&lt;DelayedWithTimeout&gt; queue = new DelayQueue&lt;&gt;();<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span><a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>    public TimeoutExecutorThread(final ThreadGroup group) {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>      super(group, "ProcedureTimeoutExecutor");<a name="line.1616"></a>
 <span class="sourceLineNo">1617</span>    }<a name="line.1617"></a>
 <span class="sourceLineNo">1618</span><a name="line.1618"></a>
 <span class="sourceLineNo">1619</span>    @Override<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    public void run() {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>      final boolean isTraceEnabled = LOG.isTraceEnabled();<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      while (isRunning()) {<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>        final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>        if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>          // the executor may be shutting down,<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>          // and the task is just the shutdown request<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>          continue;<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>        }<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span><a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>        if (isTraceEnabled) {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>          LOG.trace("Trying to start the execution of " + task);<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>        }<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span><a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>        // execute the task<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>        if (task instanceof InlineChore) {<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>          execInlineChore((InlineChore)task);<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        } else if (task instanceof DelayedProcedure) {<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>          execDelayedProcedure((DelayedProcedure)task);<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>        } else {<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>          LOG.error("CODE-BUG unknown timeout task type " + task);<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>        }<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>      }<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>    }<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span><a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>    public void add(final InlineChore chore) {<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      chore.refreshTimeout();<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>      queue.add(chore);<a name="line.1647"></a>
+<span class="sourceLineNo">1620</span>    public void sendStopSignal() {<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>      queue.add(DelayedUtil.DELAYED_POISON);<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>    }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span><a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    @Override<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    public void run() {<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      final boolean isTraceEnabled = LOG.isTraceEnabled();<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      while (isRunning()) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>        final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>        if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>          // the executor may be shutting down,<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>          // and the task is just the shutdown request<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>          continue;<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>        }<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span><a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>        if (isTraceEnabled) {<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>          LOG.trace("Trying to start the execution of " + task);<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        }<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span><a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>        // execute the task<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>        if (task instanceof InlineChore) {<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          execInlineChore((InlineChore)task);<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>        } else if (task instanceof DelayedProcedure) {<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>          execDelayedProcedure((DelayedProcedure)task);<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>        } else {<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>          LOG.error("CODE-BUG unknown timeout task type " + task);<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        }<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>      }<a name="line.1647"></a>
 <span class="sourceLineNo">1648</span>    }<a name="line.1648"></a>
 <span class="sourceLineNo">1649</span><a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    public void add(final Procedure procedure) {<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>      assert procedure.getState() == ProcedureState.WAITING_TIMEOUT;<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>      queue.add(new DelayedProcedure(procedure));<a name="line.1652"></a>
+<span class="sourceLineNo">1650</span>    public void add(final InlineChore chore) {<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>      chore.refreshTimeout();<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      queue.add(chore);<a name="line.1652"></a>
 <span class="sourceLineNo">1653</span>    }<a name="line.1653"></a>
 <span class="sourceLineNo">1654</span><a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    public boolean remove(final Procedure procedure) {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      return queue.remove(new DelayedProcedure(procedure));<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    }<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    private void execInlineChore(final InlineChore chore) {<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>      chore.run();<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      add(chore);<a name="line.1661"></a>
+<span class="sourceLineNo">1655</span>    public void add(final Procedure procedure) {<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>      assert procedure.getState() == ProcedureState.WAITING_TIMEOUT;<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>      queue.add(new DelayedProcedure(procedure));<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    }<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span><a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    public boolean remove(final Procedure procedure) {<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>      return queue.remove(new DelayedProcedure(procedure));<a name="line.1661"></a>
 <span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
 <span class="sourceLineNo">1663</span><a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>    private void execDelayedProcedure(final DelayedProcedure delayed) {<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      // TODO: treat this as a normal procedure, add it to the scheduler and<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      // let one of the workers handle it.<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      // Today we consider ProcedureInMemoryChore as InlineChores<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>      final Procedure procedure = delayed.getObject();<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      if (procedure instanceof ProcedureInMemoryChore) {<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>        executeInMemoryChore((ProcedureInMemoryChore)procedure);<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>        // if the procedure is in a waiting state again, put it back in the queue<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>        procedure.updateTimestamp();<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>        if (procedure.isWaiting()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>          delayed.setTimeout(procedure.getTimeoutTimestamp());<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>          queue.add(delayed);<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>        }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      } else {<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>        executeTimedoutProcedure(procedure);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      }<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    }<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span><a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>    private void executeInMemoryChore(final ProcedureInMemoryChore chore) {<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>      if (!chore.isWaiting()) return;<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span><a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      // The ProcedureInMemoryChore is a special case, and it acts as a chore.<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      // instead of bringing the Chore class in, we reuse this timeout thread for<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>      // this special case.<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      try {<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>        chore.periodicExecute(getEnvironment());<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      } catch (Throwable e) {<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>        LOG.error("Ignoring " + chore + " exception: " + e.getMessage(), e);<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      }<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>    }<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span><a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>    private void executeTimedoutProcedure(final Procedure proc) {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>      // The procedure received a timeout. if the procedure itself does not handle it,<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>      // call abort() and add the procedure back in the queue for rollback.<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>      if (proc.setTimeoutFailure(getEnvironment())) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>        long rootProcId = Procedure.getRootProcedureId(procedures, proc);<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>        RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>        procStack.abort();<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>        store.update(proc);<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        scheduler.addFront(proc);<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>    }<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>  }<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span><a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>  private static final class DelayedProcedure<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>      extends DelayedUtil.DelayedContainerWithTimestamp&lt;Procedure&gt; {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>    public DelayedProcedure(final Procedure procedure) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>      super(procedure, procedure.getTimeoutTimestamp());<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    }<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>  }<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span><a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>  private static abstract class StoppableThread extends Thread {<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    public StoppableThread(final ThreadGroup group, final String name) {<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>      super(group, name);<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>    }<a name="line.1718"></a>
+<span class="sourceLineNo">1664</span>    private void execInlineChore(final InlineChore chore) {<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>      chore.run();<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>      add(chore);<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>    }<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span><a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>    private void execDelayedProcedure(final DelayedProcedure delayed) {<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>      // TODO: treat this as a normal procedure, add it to the scheduler and<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      // let one of the workers handle it.<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>      // Today we consider ProcedureInMemoryChore as InlineChores<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      final Procedure procedure = delayed.getObject();<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>      if (procedure instanceof ProcedureInMemoryChore) {<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>        executeInMemoryChore((ProcedureInMemoryChore)procedure);<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>        // if the procedure is in a waiting state again, put it back in the queue<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>        procedure.updateTimestamp();<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>        if (procedure.isWaiting()) {<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>          delayed.setTimeout(procedure.getTimeoutTimestamp());<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>          queue.add(delayed);<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>        }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      } else {<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>        executeTimedoutProcedure(procedure);<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      }<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>    }<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span><a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>    private void executeInMemoryChore(final ProcedureInMemoryChore chore) {<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>      if (!chore.isWaiting()) return;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span><a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>      // The ProcedureInMemoryChore is a special case, and it acts as a chore.<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>      // instead of bringing the Chore class in, we reuse this timeout thread for<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      // this special case.<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>      try {<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>        chore.periodicExecute(getEnvironment());<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>      } catch (Throwable e) {<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>        LOG.error("Ignoring " + chore + " exception: " + e.getMessage(), e);<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      }<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>    }<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span><a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>    private void executeTimedoutProcedure(final Procedure proc) {<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>      // The procedure received a timeout. if the procedure itself does not handle it,<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>      // call abort() and add the procedure back in the queue for rollback.<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>      if (proc.setTimeoutFailure(getEnvironment())) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>        long rootProcId = Procedure.getRootProcedureId(procedures, proc);<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>        RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>        procStack.abort();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>        store.update(proc);<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>        scheduler.addFront(proc);<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>      }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>    }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  }<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span><a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>  private static final class DelayedProcedure<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      extends DelayedUtil.DelayedContainerWithTimestamp&lt;Procedure&gt; {<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>    public DelayedProcedure(final Procedure procedure) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>      super(procedure, procedure.getTimeoutTimestamp());<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>    }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>  }<a name="line.1718"></a>
 <span class="sourceLineNo">1719</span><a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    public abstract void sendStopSignal();<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span><a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>    public void awaitTermination() {<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>      try {<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>        for (int i = 0; isAlive(); ++i) {<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>          sendStopSignal();<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>          join(250);<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>          if (i &gt; 0 &amp;&amp; (i % 8) == 0) {<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>            LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>              StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>          }<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>        }<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>      } catch (InterruptedException e) {<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        LOG.warn(getName() + " join wait got interrupted", e);<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>      }<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>    }<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>  }<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span><a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>  // ==========================================================================<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>  //  Inline Chores (executors internal chores)<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>  // ==========================================================================<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>  private static abstract class InlineChore extends DelayedUtil.DelayedObject implements Runnable {<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>    private long timeout;<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span><a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>    public abstract int getTimeoutInterval();<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span><a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>    protected void refreshTimeout() {<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      this.timeout = EnvironmentEdgeManager.currentTime() + getTimeoutInterval();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    @Override<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    public long getTimeout() {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      return timeout;<a name="line.1753"></a>
+<span class="sourceLineNo">1720</span>  private static abstract class StoppableThread extends Thread {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>    public StoppableThread(final ThreadGroup group, final String name) {<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>      super(group, name);<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>    }<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span><a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>    public abstract void sendStopSignal();<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span><a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>    public void awaitTermination() {<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      try {<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>        final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>        for (int i = 0; isAlive(); ++i) {<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>          sendStopSignal();<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>          join(250);<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>          if (i &gt; 0 &amp;&amp; (i % 8) == 0) {<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>            LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>              StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>          }<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>        }<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      } catch (InterruptedException e) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        LOG.warn(getName() + " join wait got interrupted", e);<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>      }<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>    }<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>  }<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span><a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>  // ==========================================================================<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>  //  Inline Chores (executors internal chores)<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>  // ==========================================================================<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>  private static abstract class InlineChore extends DelayedUtil.DelayedObject implements Runnable {<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>    private long timeout;<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>    public abstract int getTimeoutInterval();<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span><a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    protected void refreshTimeout() {<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>      this.timeout = EnvironmentEdgeManager.currentTime() + getTimeoutInterval();<a name="line.1753"></a>
 <span class="sourceLineNo">1754</span>    }<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>  }<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span><a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>  // ----------------------------------------------------------------------------<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>  // full set of procedures pending and completed to write a compacted<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>  // version of the log (in case is a log)?<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>  // will have the tracker saying everything is in the last log.<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>  // ----------------------------------------------------------------------------<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span><a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  private final class WorkerMonitor extends InlineChore {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.1768"></a>
+<span class="sourceLineNo">1755</span><a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    @Override<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>    public long getTimeout() {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      return timeout;<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>    }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>  }<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span><a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>  // ----------------------------------------------------------------------------<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>  // full set of procedures pending and completed to write a compacted<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>  // version of the log (in case is a log)?<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>  // will have the tracker saying everything is in the last log.<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>  // ----------------------------------------------------------------------------<a name="line.1768"></a>
 <span class="sourceLineNo">1769</span><a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span><a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span><a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    public WorkerMonitor() {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>      refreshConfig();<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span><a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    @Override<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>    public void run() {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      final int stuckCount = checkForStuckWorkers();<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>      checkThreadCount(stuckCount);<a name="line.1789"></a>
+<span class="sourceLineNo">1770</span>  private final class WorkerMonitor extends InlineChore {<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span><a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span><a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span><a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span><a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    public WorkerMonitor() {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      refreshConfig();<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>    }<a name="line.1789"></a>
 <span class="sourceLineNo">1790</span><a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      // refresh interval (poor man dynamic conf update)<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      refreshConfig();<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    }<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span><a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>    private int checkForStuckWorkers() {<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>      // check if any of the worker is stuck<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>      int stuckCount = 0;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>      for (WorkerThread worker: workerThreads) {<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>          continue;<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>        }<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span><a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>        // WARN the worker is stuck<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>        stuckCount++;<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>        LOG.warn("Worker stuck " + worker +<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>            " run time " + StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>      }<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>      return stuckCount;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    }<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span><a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    private void checkThreadCount(final int stuckCount) {<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>      // nothing to do if there are no runnable tasks<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) return;<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span><a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>      // add a new thread if the worker stuck percentage exceed the threshold limit<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>      // and every handler is active.<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>      final float stuckPerc = ((float)stuckCount) / workerThreads.size();<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>      if (stuckPerc &gt;= addWorkerStuckPercentage &amp;&amp;<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>          activeExecutorCount.get() == workerThreads.size()) {<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>        final WorkerThread worker = new WorkerThread(threadGroup);<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        workerThreads.add(worker);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>        worker.start();<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        LOG.debug("Added new worker thread " + worker);<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>      }<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    }<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span><a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>    private void refreshConfig() {<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>      addWorkerStuckPercentage = conf.getFloat(WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY,<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          DEFAULT_WORKER_ADD_STUCK_PERCENTAGE);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      timeoutInterval = conf.getInt(WORKER_MONITOR_INTERVAL_CONF_KEY,<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>        DEFAULT_WORKER_MONITOR_INTERVAL);<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>      stuckThreshold = conf.getInt(WORKER_STUCK_THRESHOLD_CONF_KEY,<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        DEFAULT_WORKER_STUCK_THRESHOLD);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    }<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span><a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>    @Override<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    public int getTimeoutInterval() {<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>      return timeoutInterval;<a name="line.1838"></a>
+<span class="sourceLineNo">1791</span>    @Override<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>    public void run() {<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>      final int stuckCount = checkForStuckWorkers();<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>      checkThreadCount(stuckCount);<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span><a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>      // refresh interval (poor man dynamic conf update)<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>      refreshConfig();<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    }<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span><a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>    private int checkForStuckWorkers() {<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>      // check if any of the worker is stuck<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>      int stuckCount = 0;<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>      for (WorkerThread worker: workerThreads) {<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          continue;<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>        }<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span><a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>        // WARN the worker is stuck<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>        stuckCount++;<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>        LOG.warn("Worker stuck " + worker +<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>            " run time " + StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>      }<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>      return stuckCount;<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>    }<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span><a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>    private void checkThreadCount(final int stuckCount) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>      // nothing to do if there are no runnable tasks<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) return;<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span><a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>      // add a new thread if the worker stuck percentage exceed the threshold lim

<TRUNCATED>

[03/18] hbase-site git commit: Published site at 59e8b8e2ba4d403d042fe4cc02f8f9f80aad67af.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-shaded-client-project/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/source-repository.html b/hbase-archetypes/hbase-shaded-client-project/source-repository.html
index ba56811..50ebbb6 100644
--- a/hbase-archetypes/hbase-shaded-client-project/source-repository.html
+++ b/hbase-archetypes/hbase-shaded-client-project/source-repository.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-shaded-client-project/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/team-list.html b/hbase-archetypes/hbase-shaded-client-project/team-list.html
index 9c60c18..c3d9e56 100644
--- a/hbase-archetypes/hbase-shaded-client-project/team-list.html
+++ b/hbase-archetypes/hbase-shaded-client-project/team-list.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index c56a920..08e8e37 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -29718,8 +29718,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html#setFilterAll-boolean-">setFilterAll(boolean)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#setFinishedState--">setFinishedState()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureTestingUtility.TestProcedure</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html#setFlushCommits-boolean-">setFlushCommits(boolean)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HBaseTestingUtility.html#setFs--">setFs()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a></dt>
@@ -29930,6 +29928,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/TestHFileSeek.MyOptions.html#setStopProceed--">setStopProceed()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/TestHFileSeek.MyOptions.html" title="class in org.apache.hadoop.hbase.io.hfile">TestHFileSeek.MyOptions</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#setSuccessState--">setSuccessState()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureTestingUtility.TestProcedure</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/HBaseKerberosUtils.html#setSystemProperty-java.lang.String-java.lang.String-">setSystemProperty(String, String)</a></span> - Static method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/HBaseKerberosUtils.html" title="class in org.apache.hadoop.hbase.security">HBaseKerberosUtils</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/chaos/factories/MonkeyFactory.html#setTableName-org.apache.hadoop.hbase.TableName-">setTableName(TableName)</a></span> - Method in class org.apache.hadoop.hbase.chaos.factories.<a href="org/apache/hadoop/hbase/chaos/factories/MonkeyFactory.html" title="class in org.apache.hadoop.hbase.chaos.factories">MonkeyFactory</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/testdevapidocs/org/apache/hadoop/hbase/master/procedure/MasterProcedureSchedulerPerformanceEvaluation.RegionProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/MasterProcedureSchedulerPerformanceEvaluation.RegionProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/MasterProcedureSchedulerPerformanceEvaluation.RegionProcedure.html
index 4eda47c..c90fadd 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/MasterProcedureSchedulerPerformanceEvaluation.RegionProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/MasterProcedureSchedulerPerformanceEvaluation.RegionProcedure.html
@@ -245,7 +245,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureTestingUtility.TestProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#addStackId-int-">addStackId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#deserializeStateData-java.io.InputStream-">deserializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#serializeStateData-java.io.OutputStream-">serializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#setData-byte:A-">setData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#setFinishedState--">setFinishedState</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#addStackId-int-">addStackId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#deserializeStateData-java.io.InputStream-">deserializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#serializeStateData-java.io.OutputStream-">serializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#setData-byte:A-">setData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#setSuccessState--">setSuccessState</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.NoopProcedure">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/testdevapidocs/org/apache/hadoop/hbase/master/procedure/MasterProcedureSchedulerPerformanceEvaluation.TableProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/MasterProcedureSchedulerPerformanceEvaluation.TableProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/MasterProcedureSchedulerPerformanceEvaluation.TableProcedure.html
index 82f1d72..ff20330 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/MasterProcedureSchedulerPerformanceEvaluation.TableProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/MasterProcedureSchedulerPerformanceEvaluation.TableProcedure.html
@@ -233,7 +233,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureTestingUtility.TestProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#addStackId-int-">addStackId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#deserializeStateData-java.io.InputStream-">deserializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#serializeStateData-java.io.OutputStream-">serializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#setData-byte:A-">setData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#setFinishedState--">setFinishedState</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#addStackId-int-">addStackId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#deserializeStateData-java.io.InputStream-">deserializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#serializeStateData-java.io.OutputStream-">serializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#setData-byte:A-">setData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#setSuccessState--">setSuccessState</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.NoopProcedure">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestNamespaceProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestNamespaceProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestNamespaceProcedure.html
index 5b35238..960566b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestNamespaceProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestNamespaceProcedure.html
@@ -245,7 +245,7 @@ implements org.apache.hadoop.hbase.master.procedure.TableProcedureInterface</pre
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureTestingUtility.TestProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#acquireLock-java.lang.Void-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#addStackId-int-">addStackId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#deserializeStateData-java.io.InputStream-">deserializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#releaseLock-java.lang.Void-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#serializeStateData-java.io.OutputStream-">serializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#setData-byte:A-">setData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 TestingUtility.TestProcedure.html#setFinishedState--">setFinishedState</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#acquireLock-java.lang.Void-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#addStackId-int-">addStackId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#deserializeStateData-java.io.InputStream-">deserializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#releaseLock-java.lang.Void-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#serializeStateData-java.io.OutputStream-">serializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#setData-byte:A-">setData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 TestingUtility.TestProcedure.html#setSuccessState--">setSuccessState</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.NoopProcedure">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestRegionProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestRegionProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestRegionProcedure.html
index c2afc1c..40f7e29 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestRegionProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestRegionProcedure.html
@@ -268,7 +268,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureTestingUtility.TestProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#acquireLock-java.lang.Void-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#addStackId-int-">addStackId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#deserializeStateData-java.io.InputStream-">deserializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#releaseLock-java.lang.Void-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#serializeStateData-java.io.OutputStream-">serializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#setData-byte:A-">setData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 TestingUtility.TestProcedure.html#setFinishedState--">setFinishedState</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#acquireLock-java.lang.Void-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#addStackId-int-">addStackId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#deserializeStateData-java.io.InputStream-">deserializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#releaseLock-java.lang.Void-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#serializeStateData-java.io.OutputStream-">serializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#setData-byte:A-">setData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 TestingUtility.TestProcedure.html#setSuccessState--">setSuccessState</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.NoopProcedure">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcedure.html
index 5b67d33..192c18b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcedure.html
@@ -262,7 +262,7 @@ implements org.apache.hadoop.hbase.master.procedure.TableProcedureInterface</pre
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureTestingUtility.TestProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#acquireLock-java.lang.Void-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#addStackId-int-">addStackId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#deserializeStateData-java.io.InputStream-">deserializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#releaseLock-java.lang.Void-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#serializeStateData-java.io.OutputStream-">serializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#setData-byte:A-">setData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 TestingUtility.TestProcedure.html#setFinishedState--">setFinishedState</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#acquireLock-java.lang.Void-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#addStackId-int-">addStackId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#deserializeStateData-java.io.InputStream-">deserializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#releaseLock-java.lang.Void-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#serializeStateData-java.io.OutputStream-">serializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#setData-byte:A-">setData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 TestingUtility.TestProcedure.html#setSuccessState--">setSuccessState</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.NoopProcedure">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcedureWithEvent.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcedureWithEvent.html b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcedureWithEvent.html
index 0245ddd..e110e3a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcedureWithEvent.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestTableProcedureWithEvent.html
@@ -241,7 +241,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Test
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureTestingUtility.TestProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#acquireLock-java.lang.Void-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#addStackId-int-">addStackId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#deserializeStateData-java.io.InputStream-">deserializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#releaseLock-java.lang.Void-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#serializeStateData-java.io.OutputStream-">serializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#setData-byte:A-">setData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 TestingUtility.TestProcedure.html#setFinishedState--">setFinishedState</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#acquireLock-java.lang.Void-">acquireLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#addStackId-int-">addStackId</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#deserializeStateData-java.io.InputStream-">deserializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#releaseLock-java.lang.Void-">releaseLock</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#serializeStateData-java.io.OutputStream-">serializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#setData-byte:A-">setData</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure
 TestingUtility.TestProcedure.html#setSuccessState--">setSuccessState</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.NoopProcedure">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/testdevapidocs/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html
index 7646d94..1bebb24 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html
@@ -253,7 +253,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTest
 </tr>
 <tr id="i6" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#setFinishedState--">setFinishedState</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#setSuccessState--">setSuccessState</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -376,13 +376,13 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTest
 <pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#line.407">addStackId</a>(int&nbsp;index)</pre>
 </li>
 </ul>
-<a name="setFinishedState--">
+<a name="setSuccessState--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFinishedState</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#line.411">setFinishedState</a>()</pre>
+<h4>setSuccessState</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#line.411">setSuccessState</a>()</pre>
 </li>
 </ul>
 <a name="setData-byte:A-">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureUtil.TestProcedureNoDefaultConstructor.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureUtil.TestProcedureNoDefaultConstructor.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureUtil.TestProcedureNoDefaultConstructor.html
index 2e837ac..8ac8190 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureUtil.TestProcedureNoDefaultConstructor.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/TestProcedureUtil.TestProcedureNoDefaultConstructor.html
@@ -192,7 +192,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTest
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureTestingUtility.TestProcedure</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#acquireLock-java.lang.Void-">acquireLock</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#addStackId-int-">addStackId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#deserializeStateData-java.io.InputStream-">deserializeStateData</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#releaseLock-java.lang.Void-">releaseLock</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#serializeStateData-java.io.OutputStream-">serializeStateData</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#setData-byte:A-">setData</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestPr
 ocedure.html#setFinishedState--">setFinishedState</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#acquireLock-java.lang.Void-">acquireLock</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#addStackId-int-">addStackId</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#deserializeStateData-java.io.InputStream-">deserializeStateData</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#releaseLock-java.lang.Void-">releaseLock</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#serializeStateData-java.io.OutputStream-">serializeStateData</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#setData-byte:A-">setData</a>, <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestPr
 ocedure.html#setSuccessState--">setSuccessState</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.ProcedureTestingUtility.NoopProcedure">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/testdevapidocs/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html
index 067a21c..80c14fd 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html
@@ -127,7 +127,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.898">TestWALProcedureStore.TestSequentialProcedure</a>
+<pre>public static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.897">TestWALProcedureStore.TestSequentialProcedure</a>
 extends org.apache.hadoop.hbase.procedure2.SequentialProcedure&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</pre>
 </li>
 </ul>
@@ -267,7 +267,7 @@ extends org.apache.hadoop.hbase.procedure2.SequentialProcedure&lt;<a href="http:
 <ul class="blockListLast">
 <li class="blockList">
 <h4>seqid</h4>
-<pre>private static&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html#line.899">seqid</a></pre>
+<pre>private static&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html#line.898">seqid</a></pre>
 </li>
 </ul>
 </li>
@@ -284,7 +284,7 @@ extends org.apache.hadoop.hbase.procedure2.SequentialProcedure&lt;<a href="http:
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestSequentialProcedure</h4>
-<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html#line.901">TestSequentialProcedure</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html#line.900">TestSequentialProcedure</a>()</pre>
 </li>
 </ul>
 </li>
@@ -301,7 +301,7 @@ extends org.apache.hadoop.hbase.procedure2.SequentialProcedure&lt;<a href="http:
 <ul class="blockList">
 <li class="blockList">
 <h4>execute</h4>
-<pre>protected&nbsp;org.apache.hadoop.hbase.procedure2.Procedure[]&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html#line.906">execute</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;env)</pre>
+<pre>protected&nbsp;org.apache.hadoop.hbase.procedure2.Procedure[]&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html#line.905">execute</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;env)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>execute</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.procedure2.Procedure&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></dd>
@@ -314,7 +314,7 @@ extends org.apache.hadoop.hbase.procedure2.SequentialProcedure&lt;<a href="http:
 <ul class="blockList">
 <li class="blockList">
 <h4>rollback</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html#line.909">rollback</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;env)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html#line.908">rollback</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;env)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>rollback</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.procedure2.Procedure&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></dd>
@@ -327,7 +327,7 @@ extends org.apache.hadoop.hbase.procedure2.SequentialProcedure&lt;<a href="http:
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html#line.912">abort</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;env)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html#line.911">abort</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;env)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>abort</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.procedure2.Procedure&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></dd>
@@ -340,7 +340,7 @@ extends org.apache.hadoop.hbase.procedure2.SequentialProcedure&lt;<a href="http:
 <ul class="blockList">
 <li class="blockList">
 <h4>serializeStateData</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html#line.915">serializeStateData</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;stream)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html#line.914">serializeStateData</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/io/OutputStream.html?is-external=true" title="class or interface in java.io">OutputStream</a>&nbsp;stream)
                            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="overrideSpecifyLabel">Overrides:</span></dt>
@@ -356,7 +356,7 @@ extends org.apache.hadoop.hbase.procedure2.SequentialProcedure&lt;<a href="http:
 <ul class="blockListLast">
 <li class="blockList">
 <h4>deserializeStateData</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html#line.923">deserializeStateData</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;stream)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html#line.922">deserializeStateData</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a>&nbsp;stream)
                              throws <a href="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="overrideSpecifyLabel">Overrides:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/testdevapidocs/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html
index 34f1a2b..4071b53 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.63">TestWALProcedureStore</a>
+<pre>public class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.62">TestWALProcedureStore</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>
@@ -384,7 +384,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/procedure2/store/wal/TestWALProcedureStore.html#line.64">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.63">LOG</a></pre>
 </li>
 </ul>
 <a name="PROCEDURE_STORE_SLOTS">
@@ -393,7 +393,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>PROCEDURE_STORE_SLOTS</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.66">PROCEDURE_STORE_SLOTS</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.65">PROCEDURE_STORE_SLOTS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.store.wal.TestWALProcedureStore.PROCEDURE_STORE_SLOTS">Constant Field Values</a></dd>
@@ -406,7 +406,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>NULL_PROC</h4>
-<pre>private static final&nbsp;org.apache.hadoop.hbase.procedure2.Procedure <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.67">NULL_PROC</a></pre>
+<pre>private static final&nbsp;org.apache.hadoop.hbase.procedure2.Procedure <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.66">NULL_PROC</a></pre>
 </li>
 </ul>
 <a name="procStore">
@@ -415,7 +415,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>procStore</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.69">procStore</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.68">procStore</a></pre>
 </li>
 </ul>
 <a name="htu">
@@ -424,7 +424,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>htu</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/HBaseCommonTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseCommonTestingUtility</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.71">htu</a></pre>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/HBaseCommonTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseCommonTestingUtility</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.70">htu</a></pre>
 </li>
 </ul>
 <a name="fs">
@@ -433,7 +433,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>fs</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.72">fs</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.71">fs</a></pre>
 </li>
 </ul>
 <a name="testDir">
@@ -442,7 +442,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testDir</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.73">testDir</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.72">testDir</a></pre>
 </li>
 </ul>
 <a name="logDir">
@@ -451,7 +451,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>logDir</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.74">logDir</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.73">logDir</a></pre>
 </li>
 </ul>
 </li>
@@ -468,7 +468,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestWALProcedureStore</h4>
-<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.63">TestWALProcedureStore</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.62">TestWALProcedureStore</a>()</pre>
 </li>
 </ul>
 </li>
@@ -485,7 +485,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setupConfig</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.76">setupConfig</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.75">setupConfig</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
 <a name="setUp--">
@@ -494,7 +494,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/procedure2/store/wal/TestWALProcedureStore.html#line.81">setUp</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.80">setUp</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>
@@ -508,7 +508,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/procedure2/store/wal/TestWALProcedureStore.html#line.96">tearDown</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.95">tearDown</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>
@@ -522,7 +522,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>storeRestart</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.101">storeRestart</a>(org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureLoader&nbsp;loader)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.100">storeRestart</a>(org.apache.hadoop.hbase.procedure2.store.ProcedureStore.ProcedureLoader&nbsp;loader)
                    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>
@@ -536,7 +536,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testEmptyRoll</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.106">testEmptyRoll</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.105">testEmptyRoll</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>
@@ -550,7 +550,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testRestartWithoutData</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.116">testRestartWithoutData</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.115">testRestartWithoutData</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>
@@ -564,7 +564,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>trackersLoadedForAllOldLogs</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.131">trackersLoadedForAllOldLogs</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.130">trackersLoadedForAllOldLogs</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>
 <div class="block">Tests that tracker for all old logs are loaded back after procedure store is restarted.</div>
 <dl>
@@ -579,7 +579,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testWalCleanerSequentialClean</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.147">testWalCleanerSequentialClean</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.146">testWalCleanerSequentialClean</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>
@@ -593,7 +593,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testWalCleanerNoHoles</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.176">testWalCleanerNoHoles</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.175">testWalCleanerNoHoles</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>
@@ -607,7 +607,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testWalCleanerUpdates</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.197">testWalCleanerUpdates</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.196">testWalCleanerUpdates</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>
@@ -621,7 +621,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testWalCleanerUpdatesDontLeaveHoles</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.213">testWalCleanerUpdatesDontLeaveHoles</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.212">testWalCleanerUpdatesDontLeaveHoles</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>
@@ -635,7 +635,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testWalCleanerWithEmptyRolls</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.236">testWalCleanerWithEmptyRolls</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.235">testWalCleanerWithEmptyRolls</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>
@@ -649,7 +649,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testEmptyLogLoad</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.266">testEmptyLogLoad</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.265">testEmptyLogLoad</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>
@@ -663,7 +663,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testLoad</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.275">testLoad</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.274">testLoad</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>
@@ -677,7 +677,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testNoTrailerDoubleRestart</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.316">testNoTrailerDoubleRestart</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.315">testNoTrailerDoubleRestart</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>
@@ -691,7 +691,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testProcIdHoles</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.368">testProcIdHoles</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.367">testProcIdHoles</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>
@@ -705,7 +705,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testCorruptedTrailer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.394">testCorruptedTrailer</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.393">testCorruptedTrailer</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>
@@ -719,7 +719,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>assertUpdated</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.414">assertUpdated</a>(org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker&nbsp;tracker,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.413">assertUpdated</a>(org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker&nbsp;tracker,
                                   org.apache.hadoop.hbase.procedure2.Procedure[]&nbsp;procs,
                                   int[]&nbsp;updatedProcs,
                                   int[]&nbsp;nonUpdatedProcs)</pre>
@@ -731,7 +731,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>assertDeleted</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.426">assertDeleted</a>(org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker&nbsp;tracker,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.425">assertDeleted</a>(org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker&nbsp;tracker,
                                   org.apache.hadoop.hbase.procedure2.Procedure[]&nbsp;procs,
                                   int[]&nbsp;deletedProcs,
                                   int[]&nbsp;nonDeletedProcs)</pre>
@@ -743,7 +743,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testCorruptedTrailersRebuild</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.441">testCorruptedTrailersRebuild</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.440">testCorruptedTrailersRebuild</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>
@@ -757,7 +757,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testCorruptedEntries</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.499">testCorruptedEntries</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.498">testCorruptedEntries</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>
@@ -771,7 +771,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testCorruptedProcedures</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.523">testCorruptedProcedures</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.522">testCorruptedProcedures</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>
@@ -785,7 +785,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testWalReplayOrder_AB_A</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.579">testWalReplayOrder_AB_A</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.578">testWalReplayOrder_AB_A</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>
@@ -799,7 +799,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testWalReplayOrder_ABC_BAD</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.622">testWalReplayOrder_ABC_BAD</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.621">testWalReplayOrder_ABC_BAD</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>
@@ -813,7 +813,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testRollAndRemove</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.685">testRollAndRemove</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.684">testRollAndRemove</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>
@@ -827,7 +827,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testFileNotFoundDuringLeaseRecovery</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.715">testFileNotFoundDuringLeaseRecovery</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.714">testFileNotFoundDuringLeaseRecovery</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>
@@ -841,7 +841,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testLoadChildren</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.758">testLoadChildren</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.757">testLoadChildren</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>
@@ -855,7 +855,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testBatchDelete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.794">testBatchDelete</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.793">testBatchDelete</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>
@@ -869,7 +869,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testBatchInsert</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.841">testBatchInsert</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.840">testBatchInsert</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>
@@ -883,7 +883,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>restartAndAssert</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.LoadCounter.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureTestingUtility.LoadCounter</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.859">restartAndAssert</a>(long&nbsp;maxProcId,
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.LoadCounter.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureTestingUtility.LoadCounter</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.858">restartAndAssert</a>(long&nbsp;maxProcId,
                                                              long&nbsp;runnableCount,
                                                              int&nbsp;completedCount,
                                                              int&nbsp;corruptedCount)
@@ -900,7 +900,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>corruptLog</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.865">corruptLog</a>(org.apache.hadoop.fs.FileStatus&nbsp;logFile,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.864">corruptLog</a>(org.apache.hadoop.fs.FileStatus&nbsp;logFile,
                         long&nbsp;dropBytes)
                  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>
@@ -915,7 +915,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyProcIdsOnRestart</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.879">verifyProcIdsOnRestart</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="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;procIds)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.878">verifyProcIdsOnRestart</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="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;procIds)
                              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>
@@ -929,7 +929,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>assertEmptyLogDir</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.887">assertEmptyLogDir</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.886">assertEmptyLogDir</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 0da6f6e..40f51ed 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
@@ -416,7 +416,7 @@
 <span class="sourceLineNo">408</span>      addStackIndex(index);<a name="line.408"></a>
 <span class="sourceLineNo">409</span>    }<a name="line.409"></a>
 <span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    public void setFinishedState() {<a name="line.411"></a>
+<span class="sourceLineNo">411</span>    public void setSuccessState() {<a name="line.411"></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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 0da6f6e..40f51ed 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
@@ -416,7 +416,7 @@
 <span class="sourceLineNo">408</span>      addStackIndex(index);<a name="line.408"></a>
 <span class="sourceLineNo">409</span>    }<a name="line.409"></a>
 <span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    public void setFinishedState() {<a name="line.411"></a>
+<span class="sourceLineNo">411</span>    public void setSuccessState() {<a name="line.411"></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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 0da6f6e..40f51ed 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
@@ -416,7 +416,7 @@
 <span class="sourceLineNo">408</span>      addStackIndex(index);<a name="line.408"></a>
 <span class="sourceLineNo">409</span>    }<a name="line.409"></a>
 <span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    public void setFinishedState() {<a name="line.411"></a>
+<span class="sourceLineNo">411</span>    public void setSuccessState() {<a name="line.411"></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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 0da6f6e..40f51ed 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.html
@@ -416,7 +416,7 @@
 <span class="sourceLineNo">408</span>      addStackIndex(index);<a name="line.408"></a>
 <span class="sourceLineNo">409</span>    }<a name="line.409"></a>
 <span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>    public void setFinishedState() {<a name="line.411"></a>
+<span class="sourceLineNo">411</span>    public void setSuccessState() {<a name="line.411"></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>


[09/18] hbase-site git commit: Published site at 59e8b8e2ba4d403d042fe4cc02f8f9f80aad67af.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 b6b4cb6..a1495ff 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
@@ -1381,472 +1381,477 @@
 <span class="sourceLineNo">1373</span>        return;<a name="line.1373"></a>
 <span class="sourceLineNo">1374</span>      }<a name="line.1374"></a>
 <span class="sourceLineNo">1375</span><a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      // if the store is not running we are aborting<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      if (!store.isRunning()) return;<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span><a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>      // Commit the transaction<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span><a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>        scheduler.yield(procedure);<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        return;<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>      }<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span><a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>    } while (reExecute);<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span><a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>    // Submit the new subprocedures<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>      submitChildrenProcedures(subprocs);<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    }<a name="line.1395"></a>
+<span class="sourceLineNo">1376</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>      // Commit the transaction<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span><a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>      // if the store is not running we are aborting<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>      if (!store.isRunning()) return;<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span><a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>        scheduler.yield(procedure);<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        return;<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span><a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    } while (reExecute);<a name="line.1395"></a>
 <span class="sourceLineNo">1396</span><a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>    // if the procedure is complete and has a parent, count down the children latch<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>    if (procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      countDownChildren(procStack, procedure);<a name="line.1399"></a>
+<span class="sourceLineNo">1397</span>    // Submit the new subprocedures<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>      submitChildrenProcedures(subprocs);<a name="line.1399"></a>
 <span class="sourceLineNo">1400</span>    }<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>  }<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span><a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>  private Procedure[] initializeChildren(final RootProcedureState procStack,<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>    assert subprocs != null : "expected subprocedures";<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      final Procedure subproc = subprocs[i];<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>      if (subproc == null) {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>          new IllegalArgumentIOException(msg)));<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>        return null;<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>      }<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span><a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>      subproc.setRootProcId(rootProcId);<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>      subproc.setProcId(nextProcId());<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>      procStack.addSubProcedure(subproc);<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>    }<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span><a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>    if (!procedure.isFailed()) {<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>      switch (procedure.getState()) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>        case RUNNABLE:<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>          break;<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        case WAITING_TIMEOUT:<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>          timeoutExecutor.add(procedure);<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>          break;<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>        default:<a name="line.1432"></a>
+<span class="sourceLineNo">1401</span><a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>    // if the procedure is complete and has a parent, count down the children latch<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>    if (procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>      countDownChildren(procStack, procedure);<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>    }<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>  }<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span><a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>  private Procedure[] initializeChildren(final RootProcedureState procStack,<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>    assert subprocs != null : "expected subprocedures";<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>      final Procedure subproc = subprocs[i];<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>      if (subproc == null) {<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>          new IllegalArgumentIOException(msg)));<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>        return null;<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>      }<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span><a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>      subproc.setRootProcId(rootProcId);<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>      subproc.setProcId(nextProcId());<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>      procStack.addSubProcedure(subproc);<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span><a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>    if (!procedure.isFailed()) {<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      switch (procedure.getState()) {<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>        case RUNNABLE:<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1432"></a>
 <span class="sourceLineNo">1433</span>          break;<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>      }<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>    }<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>    return subprocs;<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>  }<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span><a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>  private void submitChildrenProcedures(final Procedure[] subprocs) {<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      final Procedure subproc = subprocs[i];<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      scheduler.addFront(subproc);<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>    }<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>  }<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span><a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>  private void countDownChildren(final RootProcedureState procStack, final Procedure procedure) {<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>    final Procedure parent = procedures.get(procedure.getParentProcId());<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>    if (parent == null) {<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      assert procStack.isRollingback();<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      return;<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>    }<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span><a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>    // If this procedure is the last child awake the parent procedure<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>    if (traceEnabled) {<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      LOG.trace(parent + " child is done: " + procedure);<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>    }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span><a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    if (parent.childrenCountDown() &amp;&amp; parent.getState() == ProcedureState.WAITING) {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>      parent.setState(ProcedureState.RUNNABLE);<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>      store.update(parent);<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>      scheduler.addFront(parent);<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>      if (traceEnabled) {<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>        LOG.trace(parent + " all the children finished their work, resume.");<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>      }<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>      return;<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>  }<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span><a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>  private void updateStoreOnExec(final RootProcedureState procStack,<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      if (LOG.isTraceEnabled()) {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>      }<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      store.insert(procedure, subprocs);<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    } else {<a name="line.1479"></a>
+<span class="sourceLineNo">1434</span>        case WAITING_TIMEOUT:<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>          timeoutExecutor.add(procedure);<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>          break;<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>        default:<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>          break;<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>      }<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>    }<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>    return subprocs;<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>  }<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span><a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>  private void submitChildrenProcedures(final Procedure[] subprocs) {<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>      final Procedure subproc = subprocs[i];<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>      scheduler.addFront(subproc);<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>    }<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>  }<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span><a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>  private void countDownChildren(final RootProcedureState procStack, final Procedure procedure) {<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>    final Procedure parent = procedures.get(procedure.getParentProcId());<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>    if (parent == null) {<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>      assert procStack.isRollingback();<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>      return;<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>    }<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span><a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    // If this procedure is the last child awake the parent procedure<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>    if (traceEnabled) {<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>      LOG.trace(parent + " child is done: " + procedure);<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>    }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span><a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>    if (parent.childrenCountDown() &amp;&amp; parent.getState() == ProcedureState.WAITING) {<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>      parent.setState(ProcedureState.RUNNABLE);<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>      store.update(parent);<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>      scheduler.addFront(parent);<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>      if (traceEnabled) {<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>        LOG.trace(parent + " all the children finished their work, resume.");<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>      }<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>      return;<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>    }<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>  }<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span><a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>  private void updateStoreOnExec(final RootProcedureState procStack,<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1479"></a>
 <span class="sourceLineNo">1480</span>      if (LOG.isTraceEnabled()) {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>        LOG.trace("Store update " + procedure);<a name="line.1481"></a>
+<span class="sourceLineNo">1481</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1481"></a>
 <span class="sourceLineNo">1482</span>      }<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>        // remove child procedures<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>        if (childProcIds != null) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>          store.delete(procedure, childProcIds);<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>            procedures.remove(childProcIds[i]);<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>          }<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>        } else {<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          store.update(procedure);<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>        }<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>      } else {<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>        store.update(procedure);<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>      }<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>    }<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>  }<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span><a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  private void handleInterruptedException(final Procedure proc, final InterruptedException e) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>    if (LOG.isTraceEnabled()) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>      LOG.trace("Interrupt during " + proc + ". suspend and retry it later.", e);<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>    }<a name="line.1503"></a>
+<span class="sourceLineNo">1483</span>      store.insert(procedure, subprocs);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>    } else {<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>      if (LOG.isTraceEnabled()) {<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>        LOG.trace("Store update " + procedure);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      }<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>        // remove child procedures<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>        if (childProcIds != null) {<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>          store.delete(procedure, childProcIds);<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>            procedures.remove(childProcIds[i]);<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>          }<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>        } else {<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>          store.update(procedure);<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        }<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>      } else {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>        store.update(procedure);<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>      }<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>    }<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>  }<a name="line.1503"></a>
 <span class="sourceLineNo">1504</span><a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>    // and the executor/store will be stopped.<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>  }<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span><a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>  private void execCompletionCleanup(final Procedure proc) {<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    final TEnvironment env = getEnvironment();<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    if (proc.holdLock(env) &amp;&amp; proc.hasLock(env)) {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      releaseLock(proc, true);<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>    }<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>    try {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>      proc.completionCleanup(env);<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>    } catch (Throwable e) {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>    }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>  }<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span><a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>  private void procedureFinished(final Procedure proc) {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    // call the procedure completion cleanup handler<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    execCompletionCleanup(proc);<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span><a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>    // update the executor internal state maps<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>    final ProcedureInfo procInfo = ProcedureUtil.convertToProcedureInfo(proc, proc.getNonceKey());<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>      procInfo.setClientAckTime(0);<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>    }<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>    completed.put(procInfo.getProcId(), procInfo);<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>    rollbackStack.remove(proc.getProcId());<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>    procedures.remove(proc.getProcId());<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>    // call the runnableSet completion cleanup handler<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>    try {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      scheduler.completionCleanup(proc);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>    } catch (Throwable e) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: " + proc, e);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>    }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span><a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    // Notify the listeners<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>  }<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span><a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>  // ==========================================================================<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>  //  Worker Thread<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>  // ==========================================================================<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>  private final class WorkerThread extends StoppableThread {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span><a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>    public WorkerThread(final ThreadGroup group) {<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      super(group, "ProcExecWorker-" + workerId.incrementAndGet());<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>    }<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span><a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>    @Override<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>    public void sendStopSignal() {<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      scheduler.signalAll();<a name="line.1563"></a>
+<span class="sourceLineNo">1505</span>  private void handleInterruptedException(final Procedure proc, final InterruptedException e) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>    if (LOG.isTraceEnabled()) {<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>      LOG.trace("Interrupt during " + proc + ". suspend and retry it later.", e);<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>    }<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span><a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>    // and the executor/store will be stopped.<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>  }<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span><a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>  private void execCompletionCleanup(final Procedure proc) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    final TEnvironment env = getEnvironment();<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    if (proc.holdLock(env) &amp;&amp; proc.hasLock(env)) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>      releaseLock(proc, true);<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>    }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>    try {<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      proc.completionCleanup(env);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>    } catch (Throwable e) {<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>    }<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>  }<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span><a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>  private void procedureFinished(final Procedure proc) {<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    // call the procedure completion cleanup handler<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    execCompletionCleanup(proc);<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span><a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>    // update the executor internal state maps<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>    final ProcedureInfo procInfo = ProcedureUtil.convertToProcedureInfo(proc, proc.getNonceKey());<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      procInfo.setClientAckTime(0);<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>    }<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span><a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>    completed.put(procInfo.getProcId(), procInfo);<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    rollbackStack.remove(proc.getProcId());<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>    procedures.remove(proc.getProcId());<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span><a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>    // call the runnableSet completion cleanup handler<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>    try {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>      scheduler.completionCleanup(proc);<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>    } catch (Throwable e) {<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: " + proc, e);<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>    }<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span><a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>    // Notify the listeners<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>  }<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span><a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>  // ==========================================================================<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>  //  Worker Thread<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>  // ==========================================================================<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>  private final class WorkerThread extends StoppableThread {<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span><a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    public WorkerThread(final ThreadGroup group) {<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>      super(group, "ProcExecWorker-" + workerId.incrementAndGet());<a name="line.1563"></a>
 <span class="sourceLineNo">1564</span>    }<a name="line.1564"></a>
 <span class="sourceLineNo">1565</span><a name="line.1565"></a>
 <span class="sourceLineNo">1566</span>    @Override<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    public void run() {<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>        final Procedure procedure = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>        if (procedure == null) continue;<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span><a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>        store.setRunningProcedureCount(activeExecutorCount.incrementAndGet());<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>        executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        try {<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          if (traceEnabled) {<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>            LOG.trace("Trying to start the execution of " + procedure);<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>          }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>          executeProcedure(procedure);<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>        } finally {<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>          store.setRunningProcedureCount(activeExecutorCount.decrementAndGet());<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>          lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>          executionStartTime.set(Long.MAX_VALUE);<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>        }<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      }<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      LOG.debug("Worker thread terminated " + this);<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>      workerThreads.remove(this);<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>    }<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span><a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>    /**<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>     * @return the time since the current procedure is running<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>     */<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    public long getCurrentRunTime() {<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    }<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span><a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    private boolean keepAlive(final long lastUpdate) {<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>      if (workerThreads.size() &lt;= corePoolSize) return true;<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      return (EnvironmentEdgeManager.currentTime() - lastUpdate) &lt; keepAliveTime;<a name="line.1600"></a>
+<span class="sourceLineNo">1567</span>    public void sendStopSignal() {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>      scheduler.signalAll();<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>    }<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span><a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    @Override<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>    public void run() {<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>        final Procedure procedure = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>        if (procedure == null) continue;<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span><a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>        store.setRunningProcedureCount(activeExecutorCount.incrementAndGet());<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>        executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>        try {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>          if (traceEnabled) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>            LOG.trace("Trying to start the execution of " + procedure);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>          }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>          executeProcedure(procedure);<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>        } finally {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          store.setRunningProcedureCount(activeExecutorCount.decrementAndGet());<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>          lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>          executionStartTime.set(Long.MAX_VALUE);<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>        }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      }<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      LOG.debug("Worker thread terminated " + this);<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      workerThreads.remove(this);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>    }<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span><a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>    /**<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>     * @return the time since the current procedure is running<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>     */<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    public long getCurrentRunTime() {<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1600"></a>
 <span class="sourceLineNo">1601</span>    }<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>  }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span><a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>  // ==========================================================================<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>  //  Timeout Thread<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>  // ==========================================================================<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>  private final class TimeoutExecutorThread extends StoppableThread {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    private final DelayQueue&lt;DelayedWithTimeout&gt; queue = new DelayQueue&lt;&gt;();<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span><a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    public TimeoutExecutorThread(final ThreadGroup group) {<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>      super(group, "ProcedureTimeoutExecutor");<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>    }<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span><a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    @Override<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>    public void sendStopSignal() {<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>      queue.add(DelayedUtil.DELAYED_POISON);<a name="line.1616"></a>
+<span class="sourceLineNo">1602</span><a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    private boolean keepAlive(final long lastUpdate) {<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      if (workerThreads.size() &lt;= corePoolSize) return true;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>      return (EnvironmentEdgeManager.currentTime() - lastUpdate) &lt; keepAliveTime;<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    }<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>  }<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span><a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>  // ==========================================================================<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>  //  Timeout Thread<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>  // ==========================================================================<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>  private final class TimeoutExecutorThread extends StoppableThread {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    private final DelayQueue&lt;DelayedWithTimeout&gt; queue = new DelayQueue&lt;&gt;();<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span><a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>    public TimeoutExecutorThread(final ThreadGroup group) {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>      super(group, "ProcedureTimeoutExecutor");<a name="line.1616"></a>
 <span class="sourceLineNo">1617</span>    }<a name="line.1617"></a>
 <span class="sourceLineNo">1618</span><a name="line.1618"></a>
 <span class="sourceLineNo">1619</span>    @Override<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    public void run() {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>      final boolean isTraceEnabled = LOG.isTraceEnabled();<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      while (isRunning()) {<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>        final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>        if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>          // the executor may be shutting down,<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>          // and the task is just the shutdown request<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>          continue;<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>        }<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span><a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>        if (isTraceEnabled) {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>          LOG.trace("Trying to start the execution of " + task);<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>        }<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span><a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>        // execute the task<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>        if (task instanceof InlineChore) {<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>          execInlineChore((InlineChore)task);<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        } else if (task instanceof DelayedProcedure) {<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>          execDelayedProcedure((DelayedProcedure)task);<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>        } else {<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>          LOG.error("CODE-BUG unknown timeout task type " + task);<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>        }<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>      }<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>    }<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span><a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>    public void add(final InlineChore chore) {<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      chore.refreshTimeout();<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>      queue.add(chore);<a name="line.1647"></a>
+<span class="sourceLineNo">1620</span>    public void sendStopSignal() {<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>      queue.add(DelayedUtil.DELAYED_POISON);<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>    }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span><a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    @Override<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    public void run() {<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      final boolean isTraceEnabled = LOG.isTraceEnabled();<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      while (isRunning()) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>        final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>        if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>          // the executor may be shutting down,<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>          // and the task is just the shutdown request<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>          continue;<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>        }<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span><a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>        if (isTraceEnabled) {<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>          LOG.trace("Trying to start the execution of " + task);<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        }<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span><a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>        // execute the task<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>        if (task instanceof InlineChore) {<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          execInlineChore((InlineChore)task);<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>        } else if (task instanceof DelayedProcedure) {<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>          execDelayedProcedure((DelayedProcedure)task);<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>        } else {<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>          LOG.error("CODE-BUG unknown timeout task type " + task);<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        }<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>      }<a name="line.1647"></a>
 <span class="sourceLineNo">1648</span>    }<a name="line.1648"></a>
 <span class="sourceLineNo">1649</span><a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    public void add(final Procedure procedure) {<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>      assert procedure.getState() == ProcedureState.WAITING_TIMEOUT;<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>      queue.add(new DelayedProcedure(procedure));<a name="line.1652"></a>
+<span class="sourceLineNo">1650</span>    public void add(final InlineChore chore) {<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>      chore.refreshTimeout();<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      queue.add(chore);<a name="line.1652"></a>
 <span class="sourceLineNo">1653</span>    }<a name="line.1653"></a>
 <span class="sourceLineNo">1654</span><a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    public boolean remove(final Procedure procedure) {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      return queue.remove(new DelayedProcedure(procedure));<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    }<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    private void execInlineChore(final InlineChore chore) {<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>      chore.run();<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      add(chore);<a name="line.1661"></a>
+<span class="sourceLineNo">1655</span>    public void add(final Procedure procedure) {<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>      assert procedure.getState() == ProcedureState.WAITING_TIMEOUT;<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>      queue.add(new DelayedProcedure(procedure));<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    }<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span><a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    public boolean remove(final Procedure procedure) {<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>      return queue.remove(new DelayedProcedure(procedure));<a name="line.1661"></a>
 <span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
 <span class="sourceLineNo">1663</span><a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>    private void execDelayedProcedure(final DelayedProcedure delayed) {<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      // TODO: treat this as a normal procedure, add it to the scheduler and<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      // let one of the workers handle it.<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      // Today we consider ProcedureInMemoryChore as InlineChores<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>      final Procedure procedure = delayed.getObject();<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      if (procedure instanceof ProcedureInMemoryChore) {<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>        executeInMemoryChore((ProcedureInMemoryChore)procedure);<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>        // if the procedure is in a waiting state again, put it back in the queue<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>        procedure.updateTimestamp();<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>        if (procedure.isWaiting()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>          delayed.setTimeout(procedure.getTimeoutTimestamp());<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>          queue.add(delayed);<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>        }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      } else {<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>        executeTimedoutProcedure(procedure);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      }<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    }<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span><a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>    private void executeInMemoryChore(final ProcedureInMemoryChore chore) {<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>      if (!chore.isWaiting()) return;<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span><a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      // The ProcedureInMemoryChore is a special case, and it acts as a chore.<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      // instead of bringing the Chore class in, we reuse this timeout thread for<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>      // this special case.<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      try {<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>        chore.periodicExecute(getEnvironment());<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      } catch (Throwable e) {<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>        LOG.error("Ignoring " + chore + " exception: " + e.getMessage(), e);<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      }<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>    }<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span><a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>    private void executeTimedoutProcedure(final Procedure proc) {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>      // The procedure received a timeout. if the procedure itself does not handle it,<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>      // call abort() and add the procedure back in the queue for rollback.<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>      if (proc.setTimeoutFailure(getEnvironment())) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>        long rootProcId = Procedure.getRootProcedureId(procedures, proc);<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>        RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>        procStack.abort();<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>        store.update(proc);<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        scheduler.addFront(proc);<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>    }<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>  }<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span><a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>  private static final class DelayedProcedure<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>      extends DelayedUtil.DelayedContainerWithTimestamp&lt;Procedure&gt; {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>    public DelayedProcedure(final Procedure procedure) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>      super(procedure, procedure.getTimeoutTimestamp());<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    }<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>  }<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span><a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>  private static abstract class StoppableThread extends Thread {<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    public StoppableThread(final ThreadGroup group, final String name) {<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>      super(group, name);<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>    }<a name="line.1718"></a>
+<span class="sourceLineNo">1664</span>    private void execInlineChore(final InlineChore chore) {<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>      chore.run();<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>      add(chore);<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>    }<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span><a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>    private void execDelayedProcedure(final DelayedProcedure delayed) {<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>      // TODO: treat this as a normal procedure, add it to the scheduler and<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      // let one of the workers handle it.<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>      // Today we consider ProcedureInMemoryChore as InlineChores<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      final Procedure procedure = delayed.getObject();<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>      if (procedure instanceof ProcedureInMemoryChore) {<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>        executeInMemoryChore((ProcedureInMemoryChore)procedure);<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>        // if the procedure is in a waiting state again, put it back in the queue<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>        procedure.updateTimestamp();<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>        if (procedure.isWaiting()) {<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>          delayed.setTimeout(procedure.getTimeoutTimestamp());<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>          queue.add(delayed);<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>        }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      } else {<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>        executeTimedoutProcedure(procedure);<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      }<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>    }<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span><a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>    private void executeInMemoryChore(final ProcedureInMemoryChore chore) {<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>      if (!chore.isWaiting()) return;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span><a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>      // The ProcedureInMemoryChore is a special case, and it acts as a chore.<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>      // instead of bringing the Chore class in, we reuse this timeout thread for<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      // this special case.<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>      try {<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>        chore.periodicExecute(getEnvironment());<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>      } catch (Throwable e) {<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>        LOG.error("Ignoring " + chore + " exception: " + e.getMessage(), e);<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      }<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>    }<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span><a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>    private void executeTimedoutProcedure(final Procedure proc) {<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>      // The procedure received a timeout. if the procedure itself does not handle it,<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>      // call abort() and add the procedure back in the queue for rollback.<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>      if (proc.setTimeoutFailure(getEnvironment())) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>        long rootProcId = Procedure.getRootProcedureId(procedures, proc);<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>        RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>        procStack.abort();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>        store.update(proc);<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>        scheduler.addFront(proc);<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>      }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>    }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  }<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span><a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>  private static final class DelayedProcedure<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      extends DelayedUtil.DelayedContainerWithTimestamp&lt;Procedure&gt; {<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>    public DelayedProcedure(final Procedure procedure) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>      super(procedure, procedure.getTimeoutTimestamp());<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>    }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>  }<a name="line.1718"></a>
 <span class="sourceLineNo">1719</span><a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    public abstract void sendStopSignal();<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span><a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>    public void awaitTermination() {<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>      try {<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>        for (int i = 0; isAlive(); ++i) {<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>          sendStopSignal();<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>          join(250);<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>          if (i &gt; 0 &amp;&amp; (i % 8) == 0) {<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>            LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>              StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>          }<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>        }<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>      } catch (InterruptedException e) {<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        LOG.warn(getName() + " join wait got interrupted", e);<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>      }<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>    }<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>  }<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span><a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>  // ==========================================================================<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>  //  Inline Chores (executors internal chores)<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>  // ==========================================================================<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>  private static abstract class InlineChore extends DelayedUtil.DelayedObject implements Runnable {<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>    private long timeout;<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span><a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>    public abstract int getTimeoutInterval();<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span><a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>    protected void refreshTimeout() {<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      this.timeout = EnvironmentEdgeManager.currentTime() + getTimeoutInterval();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    @Override<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    public long getTimeout() {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      return timeout;<a name="line.1753"></a>
+<span class="sourceLineNo">1720</span>  private static abstract class StoppableThread extends Thread {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>    public StoppableThread(final ThreadGroup group, final String name) {<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>      super(group, name);<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>    }<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span><a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>    public abstract void sendStopSignal();<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span><a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>    public void awaitTermination() {<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      try {<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>        final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>        for (int i = 0; isAlive(); ++i) {<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>          sendStopSignal();<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>          join(250);<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>          if (i &gt; 0 &amp;&amp; (i % 8) == 0) {<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>            LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>              StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>          }<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>        }<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      } catch (InterruptedException e) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        LOG.warn(getName() + " join wait got interrupted", e);<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>      }<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>    }<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>  }<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span><a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>  // ==========================================================================<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>  //  Inline Chores (executors internal chores)<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>  // ==========================================================================<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>  private static abstract class InlineChore extends DelayedUtil.DelayedObject implements Runnable {<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>    private long timeout;<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>    public abstract int getTimeoutInterval();<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span><a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    protected void refreshTimeout() {<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>      this.timeout = EnvironmentEdgeManager.currentTime() + getTimeoutInterval();<a name="line.1753"></a>
 <span class="sourceLineNo">1754</span>    }<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>  }<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span><a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>  // ----------------------------------------------------------------------------<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>  // full set of procedures pending and completed to write a compacted<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>  // version of the log (in case is a log)?<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>  // will have the tracker saying everything is in the last log.<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>  // ----------------------------------------------------------------------------<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span><a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  private final class WorkerMonitor extends InlineChore {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.1768"></a>
+<span class="sourceLineNo">1755</span><a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    @Override<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>    public long getTimeout() {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      return timeout;<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>    }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>  }<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span><a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>  // ----------------------------------------------------------------------------<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>  // full set of procedures pending and completed to write a compacted<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>  // version of the log (in case is a log)?<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>  // will have the tracker saying everything is in the last log.<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>  // ----------------------------------------------------------------------------<a name="line.1768"></a>
 <span class="sourceLineNo">1769</span><a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span><a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span><a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    public WorkerMonitor() {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>      refreshConfig();<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span><a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    @Override<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>    public void run() {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      final int stuckCount = checkForStuckWorkers();<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>      checkThreadCount(stuckCount);<a name="line.1789"></a>
+<span class="sourceLineNo">1770</span>  private final class WorkerMonitor extends InlineChore {<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span><a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span><a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span><a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span><a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    public WorkerMonitor() {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      refreshConfig();<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>    }<a name="line.1789"></a>
 <span class="sourceLineNo">1790</span><a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      // refresh interval (poor man dynamic conf update)<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      refreshConfig();<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    }<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span><a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>    private int checkForStuckWorkers() {<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>      // check if any of the worker is stuck<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>      int stuckCount = 0;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>      for (WorkerThread worker: workerThreads) {<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>          continue;<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>        }<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span><a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>        // WARN the worker is stuck<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>        stuckCount++;<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>        LOG.warn("Worker stuck " + worker +<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>            " run time " + StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>      }<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>      return stuckCount;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    }<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span><a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    private void checkThreadCount(final int stuckCount) {<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>      // nothing to do if there are no runnable tasks<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) return;<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span><a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>      // add a new thread if the worker stuck percentage exceed the threshold limit<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>      // and every handler is active.<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>      final float stuckPerc = ((float)stuckCount) / workerThreads.size();<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>      if (stuckPerc &gt;= addWorkerStuckPercentage &amp;&amp;<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>          activeExecutorCount.get() == workerThreads.size()) {<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>        final WorkerThread worker = new WorkerThread(threadGroup);<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        workerThreads.add(worker);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>        worker.start();<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        LOG.debug("Added new worker thread " + worker);<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>      }<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    }<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span><a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>    private void refreshConfig() {<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>      addWorkerStuckPercentage = conf.getFloat(WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY,<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          DEFAULT_WORKER_ADD_STUCK_PERCENTAGE);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      timeoutInterval = conf.getInt(WORKER_MONITOR_INTERVAL_CONF_KEY,<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>        DEFAULT_WORKER_MONITOR_INTERVAL);<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>      stuckThreshold = conf.getInt(WORKER_STUCK_THRESHOLD_CONF_KEY,<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        DEFAULT_WORKER_STUCK_THRESHOLD);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    }<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span><a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>    @Override<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    public int getTimeoutInterval() {<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>      return timeoutInterval;<a name="line.1838"></a>
+<span class="sourceLineNo">1791</span>    @Override<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>    public void run() {<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>      final int stuckCount = checkForStuckWorkers();<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>      checkThreadCount(stuckCount);<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span><a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>      // refresh interval (poor man dynamic conf update)<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>      refreshConfig();<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    }<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span><a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>    private int checkForStuckWorkers() {<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>      // check if any of the worker is stuck<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>      int stuckCount = 0;<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>      for (WorkerThread worker: workerThreads) {<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          continue;<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>        }<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span><a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>        // WARN the worker is stuck<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>        stuckCount++;<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>        LOG.warn("Worker stuck " + worker +<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>            " run time " + StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>      }<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>      return stuckCount;<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>    }<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span><a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>    private void checkThreadCount(final int stuckCount) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>      // nothing to do if there are no runnable tasks<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) return;<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span><a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>      // add a new thread if the worker stuck percentage exceed the thr

<TRUNCATED>

[16/18] hbase-site git commit: Published site at 59e8b8e2ba4d403d042fe4cc02f8f9f80aad67af.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 b6b4cb6..a1495ff 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
@@ -1381,472 +1381,477 @@
 <span class="sourceLineNo">1373</span>        return;<a name="line.1373"></a>
 <span class="sourceLineNo">1374</span>      }<a name="line.1374"></a>
 <span class="sourceLineNo">1375</span><a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      // if the store is not running we are aborting<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      if (!store.isRunning()) return;<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span><a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>      // Commit the transaction<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span><a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>        scheduler.yield(procedure);<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        return;<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>      }<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span><a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>    } while (reExecute);<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span><a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>    // Submit the new subprocedures<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>      submitChildrenProcedures(subprocs);<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    }<a name="line.1395"></a>
+<span class="sourceLineNo">1376</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>      // Commit the transaction<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span><a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>      // if the store is not running we are aborting<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>      if (!store.isRunning()) return;<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span><a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>        scheduler.yield(procedure);<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        return;<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span><a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    } while (reExecute);<a name="line.1395"></a>
 <span class="sourceLineNo">1396</span><a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>    // if the procedure is complete and has a parent, count down the children latch<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>    if (procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      countDownChildren(procStack, procedure);<a name="line.1399"></a>
+<span class="sourceLineNo">1397</span>    // Submit the new subprocedures<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>      submitChildrenProcedures(subprocs);<a name="line.1399"></a>
 <span class="sourceLineNo">1400</span>    }<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>  }<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span><a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>  private Procedure[] initializeChildren(final RootProcedureState procStack,<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>    assert subprocs != null : "expected subprocedures";<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      final Procedure subproc = subprocs[i];<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>      if (subproc == null) {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>          new IllegalArgumentIOException(msg)));<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>        return null;<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>      }<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span><a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>      subproc.setRootProcId(rootProcId);<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>      subproc.setProcId(nextProcId());<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>      procStack.addSubProcedure(subproc);<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>    }<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span><a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>    if (!procedure.isFailed()) {<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>      switch (procedure.getState()) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>        case RUNNABLE:<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>          break;<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        case WAITING_TIMEOUT:<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>          timeoutExecutor.add(procedure);<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>          break;<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>        default:<a name="line.1432"></a>
+<span class="sourceLineNo">1401</span><a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>    // if the procedure is complete and has a parent, count down the children latch<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>    if (procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>      countDownChildren(procStack, procedure);<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>    }<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>  }<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span><a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>  private Procedure[] initializeChildren(final RootProcedureState procStack,<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>    assert subprocs != null : "expected subprocedures";<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>      final Procedure subproc = subprocs[i];<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>      if (subproc == null) {<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>          new IllegalArgumentIOException(msg)));<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>        return null;<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>      }<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span><a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>      subproc.setRootProcId(rootProcId);<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>      subproc.setProcId(nextProcId());<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>      procStack.addSubProcedure(subproc);<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span><a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>    if (!procedure.isFailed()) {<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      switch (procedure.getState()) {<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>        case RUNNABLE:<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1432"></a>
 <span class="sourceLineNo">1433</span>          break;<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>      }<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>    }<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>    return subprocs;<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>  }<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span><a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>  private void submitChildrenProcedures(final Procedure[] subprocs) {<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      final Procedure subproc = subprocs[i];<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      scheduler.addFront(subproc);<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>    }<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>  }<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span><a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>  private void countDownChildren(final RootProcedureState procStack, final Procedure procedure) {<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>    final Procedure parent = procedures.get(procedure.getParentProcId());<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>    if (parent == null) {<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      assert procStack.isRollingback();<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      return;<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>    }<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span><a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>    // If this procedure is the last child awake the parent procedure<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>    if (traceEnabled) {<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      LOG.trace(parent + " child is done: " + procedure);<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>    }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span><a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    if (parent.childrenCountDown() &amp;&amp; parent.getState() == ProcedureState.WAITING) {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>      parent.setState(ProcedureState.RUNNABLE);<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>      store.update(parent);<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>      scheduler.addFront(parent);<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>      if (traceEnabled) {<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>        LOG.trace(parent + " all the children finished their work, resume.");<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>      }<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>      return;<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>  }<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span><a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>  private void updateStoreOnExec(final RootProcedureState procStack,<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      if (LOG.isTraceEnabled()) {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>      }<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      store.insert(procedure, subprocs);<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    } else {<a name="line.1479"></a>
+<span class="sourceLineNo">1434</span>        case WAITING_TIMEOUT:<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>          timeoutExecutor.add(procedure);<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>          break;<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>        default:<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>          break;<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>      }<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>    }<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>    return subprocs;<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>  }<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span><a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>  private void submitChildrenProcedures(final Procedure[] subprocs) {<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>      final Procedure subproc = subprocs[i];<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>      scheduler.addFront(subproc);<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>    }<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>  }<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span><a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>  private void countDownChildren(final RootProcedureState procStack, final Procedure procedure) {<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>    final Procedure parent = procedures.get(procedure.getParentProcId());<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>    if (parent == null) {<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>      assert procStack.isRollingback();<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>      return;<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>    }<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span><a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    // If this procedure is the last child awake the parent procedure<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>    if (traceEnabled) {<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>      LOG.trace(parent + " child is done: " + procedure);<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>    }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span><a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>    if (parent.childrenCountDown() &amp;&amp; parent.getState() == ProcedureState.WAITING) {<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>      parent.setState(ProcedureState.RUNNABLE);<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>      store.update(parent);<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>      scheduler.addFront(parent);<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>      if (traceEnabled) {<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>        LOG.trace(parent + " all the children finished their work, resume.");<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>      }<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>      return;<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>    }<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>  }<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span><a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>  private void updateStoreOnExec(final RootProcedureState procStack,<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1479"></a>
 <span class="sourceLineNo">1480</span>      if (LOG.isTraceEnabled()) {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>        LOG.trace("Store update " + procedure);<a name="line.1481"></a>
+<span class="sourceLineNo">1481</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1481"></a>
 <span class="sourceLineNo">1482</span>      }<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>        // remove child procedures<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>        if (childProcIds != null) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>          store.delete(procedure, childProcIds);<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>            procedures.remove(childProcIds[i]);<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>          }<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>        } else {<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          store.update(procedure);<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>        }<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>      } else {<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>        store.update(procedure);<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>      }<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>    }<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>  }<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span><a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  private void handleInterruptedException(final Procedure proc, final InterruptedException e) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>    if (LOG.isTraceEnabled()) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>      LOG.trace("Interrupt during " + proc + ". suspend and retry it later.", e);<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>    }<a name="line.1503"></a>
+<span class="sourceLineNo">1483</span>      store.insert(procedure, subprocs);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>    } else {<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>      if (LOG.isTraceEnabled()) {<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>        LOG.trace("Store update " + procedure);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      }<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>        // remove child procedures<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>        if (childProcIds != null) {<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>          store.delete(procedure, childProcIds);<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>            procedures.remove(childProcIds[i]);<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>          }<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>        } else {<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>          store.update(procedure);<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        }<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>      } else {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>        store.update(procedure);<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>      }<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>    }<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>  }<a name="line.1503"></a>
 <span class="sourceLineNo">1504</span><a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>    // and the executor/store will be stopped.<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>  }<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span><a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>  private void execCompletionCleanup(final Procedure proc) {<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    final TEnvironment env = getEnvironment();<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    if (proc.holdLock(env) &amp;&amp; proc.hasLock(env)) {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      releaseLock(proc, true);<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>    }<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>    try {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>      proc.completionCleanup(env);<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>    } catch (Throwable e) {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>    }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>  }<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span><a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>  private void procedureFinished(final Procedure proc) {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    // call the procedure completion cleanup handler<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    execCompletionCleanup(proc);<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span><a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>    // update the executor internal state maps<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>    final ProcedureInfo procInfo = ProcedureUtil.convertToProcedureInfo(proc, proc.getNonceKey());<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>      procInfo.setClientAckTime(0);<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>    }<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>    completed.put(procInfo.getProcId(), procInfo);<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>    rollbackStack.remove(proc.getProcId());<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>    procedures.remove(proc.getProcId());<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>    // call the runnableSet completion cleanup handler<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>    try {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      scheduler.completionCleanup(proc);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>    } catch (Throwable e) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: " + proc, e);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>    }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span><a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    // Notify the listeners<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>  }<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span><a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>  // ==========================================================================<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>  //  Worker Thread<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>  // ==========================================================================<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>  private final class WorkerThread extends StoppableThread {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span><a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>    public WorkerThread(final ThreadGroup group) {<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      super(group, "ProcExecWorker-" + workerId.incrementAndGet());<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>    }<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span><a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>    @Override<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>    public void sendStopSignal() {<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      scheduler.signalAll();<a name="line.1563"></a>
+<span class="sourceLineNo">1505</span>  private void handleInterruptedException(final Procedure proc, final InterruptedException e) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>    if (LOG.isTraceEnabled()) {<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>      LOG.trace("Interrupt during " + proc + ". suspend and retry it later.", e);<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>    }<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span><a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>    // and the executor/store will be stopped.<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>  }<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span><a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>  private void execCompletionCleanup(final Procedure proc) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    final TEnvironment env = getEnvironment();<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    if (proc.holdLock(env) &amp;&amp; proc.hasLock(env)) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>      releaseLock(proc, true);<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>    }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>    try {<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      proc.completionCleanup(env);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>    } catch (Throwable e) {<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>    }<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>  }<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span><a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>  private void procedureFinished(final Procedure proc) {<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    // call the procedure completion cleanup handler<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    execCompletionCleanup(proc);<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span><a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>    // update the executor internal state maps<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>    final ProcedureInfo procInfo = ProcedureUtil.convertToProcedureInfo(proc, proc.getNonceKey());<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      procInfo.setClientAckTime(0);<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>    }<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span><a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>    completed.put(procInfo.getProcId(), procInfo);<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    rollbackStack.remove(proc.getProcId());<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>    procedures.remove(proc.getProcId());<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span><a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>    // call the runnableSet completion cleanup handler<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>    try {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>      scheduler.completionCleanup(proc);<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>    } catch (Throwable e) {<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: " + proc, e);<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>    }<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span><a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>    // Notify the listeners<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>  }<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span><a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>  // ==========================================================================<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>  //  Worker Thread<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>  // ==========================================================================<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>  private final class WorkerThread extends StoppableThread {<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span><a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    public WorkerThread(final ThreadGroup group) {<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>      super(group, "ProcExecWorker-" + workerId.incrementAndGet());<a name="line.1563"></a>
 <span class="sourceLineNo">1564</span>    }<a name="line.1564"></a>
 <span class="sourceLineNo">1565</span><a name="line.1565"></a>
 <span class="sourceLineNo">1566</span>    @Override<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    public void run() {<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>        final Procedure procedure = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>        if (procedure == null) continue;<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span><a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>        store.setRunningProcedureCount(activeExecutorCount.incrementAndGet());<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>        executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        try {<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          if (traceEnabled) {<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>            LOG.trace("Trying to start the execution of " + procedure);<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>          }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>          executeProcedure(procedure);<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>        } finally {<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>          store.setRunningProcedureCount(activeExecutorCount.decrementAndGet());<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>          lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>          executionStartTime.set(Long.MAX_VALUE);<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>        }<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      }<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      LOG.debug("Worker thread terminated " + this);<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>      workerThreads.remove(this);<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>    }<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span><a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>    /**<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>     * @return the time since the current procedure is running<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>     */<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    public long getCurrentRunTime() {<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    }<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span><a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    private boolean keepAlive(final long lastUpdate) {<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>      if (workerThreads.size() &lt;= corePoolSize) return true;<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      return (EnvironmentEdgeManager.currentTime() - lastUpdate) &lt; keepAliveTime;<a name="line.1600"></a>
+<span class="sourceLineNo">1567</span>    public void sendStopSignal() {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>      scheduler.signalAll();<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>    }<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span><a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    @Override<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>    public void run() {<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>        final Procedure procedure = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>        if (procedure == null) continue;<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span><a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>        store.setRunningProcedureCount(activeExecutorCount.incrementAndGet());<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>        executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>        try {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>          if (traceEnabled) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>            LOG.trace("Trying to start the execution of " + procedure);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>          }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>          executeProcedure(procedure);<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>        } finally {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          store.setRunningProcedureCount(activeExecutorCount.decrementAndGet());<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>          lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>          executionStartTime.set(Long.MAX_VALUE);<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>        }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      }<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      LOG.debug("Worker thread terminated " + this);<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      workerThreads.remove(this);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>    }<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span><a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>    /**<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>     * @return the time since the current procedure is running<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>     */<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    public long getCurrentRunTime() {<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1600"></a>
 <span class="sourceLineNo">1601</span>    }<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>  }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span><a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>  // ==========================================================================<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>  //  Timeout Thread<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>  // ==========================================================================<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>  private final class TimeoutExecutorThread extends StoppableThread {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    private final DelayQueue&lt;DelayedWithTimeout&gt; queue = new DelayQueue&lt;&gt;();<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span><a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    public TimeoutExecutorThread(final ThreadGroup group) {<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>      super(group, "ProcedureTimeoutExecutor");<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>    }<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span><a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    @Override<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>    public void sendStopSignal() {<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>      queue.add(DelayedUtil.DELAYED_POISON);<a name="line.1616"></a>
+<span class="sourceLineNo">1602</span><a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    private boolean keepAlive(final long lastUpdate) {<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      if (workerThreads.size() &lt;= corePoolSize) return true;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>      return (EnvironmentEdgeManager.currentTime() - lastUpdate) &lt; keepAliveTime;<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    }<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>  }<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span><a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>  // ==========================================================================<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>  //  Timeout Thread<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>  // ==========================================================================<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>  private final class TimeoutExecutorThread extends StoppableThread {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    private final DelayQueue&lt;DelayedWithTimeout&gt; queue = new DelayQueue&lt;&gt;();<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span><a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>    public TimeoutExecutorThread(final ThreadGroup group) {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>      super(group, "ProcedureTimeoutExecutor");<a name="line.1616"></a>
 <span class="sourceLineNo">1617</span>    }<a name="line.1617"></a>
 <span class="sourceLineNo">1618</span><a name="line.1618"></a>
 <span class="sourceLineNo">1619</span>    @Override<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    public void run() {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>      final boolean isTraceEnabled = LOG.isTraceEnabled();<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      while (isRunning()) {<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>        final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>        if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>          // the executor may be shutting down,<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>          // and the task is just the shutdown request<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>          continue;<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>        }<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span><a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>        if (isTraceEnabled) {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>          LOG.trace("Trying to start the execution of " + task);<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>        }<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span><a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>        // execute the task<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>        if (task instanceof InlineChore) {<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>          execInlineChore((InlineChore)task);<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        } else if (task instanceof DelayedProcedure) {<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>          execDelayedProcedure((DelayedProcedure)task);<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>        } else {<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>          LOG.error("CODE-BUG unknown timeout task type " + task);<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>        }<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>      }<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>    }<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span><a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>    public void add(final InlineChore chore) {<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      chore.refreshTimeout();<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>      queue.add(chore);<a name="line.1647"></a>
+<span class="sourceLineNo">1620</span>    public void sendStopSignal() {<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>      queue.add(DelayedUtil.DELAYED_POISON);<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>    }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span><a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    @Override<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    public void run() {<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      final boolean isTraceEnabled = LOG.isTraceEnabled();<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      while (isRunning()) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>        final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>        if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>          // the executor may be shutting down,<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>          // and the task is just the shutdown request<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>          continue;<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>        }<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span><a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>        if (isTraceEnabled) {<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>          LOG.trace("Trying to start the execution of " + task);<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        }<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span><a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>        // execute the task<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>        if (task instanceof InlineChore) {<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          execInlineChore((InlineChore)task);<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>        } else if (task instanceof DelayedProcedure) {<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>          execDelayedProcedure((DelayedProcedure)task);<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>        } else {<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>          LOG.error("CODE-BUG unknown timeout task type " + task);<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        }<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>      }<a name="line.1647"></a>
 <span class="sourceLineNo">1648</span>    }<a name="line.1648"></a>
 <span class="sourceLineNo">1649</span><a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    public void add(final Procedure procedure) {<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>      assert procedure.getState() == ProcedureState.WAITING_TIMEOUT;<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>      queue.add(new DelayedProcedure(procedure));<a name="line.1652"></a>
+<span class="sourceLineNo">1650</span>    public void add(final InlineChore chore) {<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>      chore.refreshTimeout();<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      queue.add(chore);<a name="line.1652"></a>
 <span class="sourceLineNo">1653</span>    }<a name="line.1653"></a>
 <span class="sourceLineNo">1654</span><a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    public boolean remove(final Procedure procedure) {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      return queue.remove(new DelayedProcedure(procedure));<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    }<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    private void execInlineChore(final InlineChore chore) {<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>      chore.run();<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      add(chore);<a name="line.1661"></a>
+<span class="sourceLineNo">1655</span>    public void add(final Procedure procedure) {<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>      assert procedure.getState() == ProcedureState.WAITING_TIMEOUT;<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>      queue.add(new DelayedProcedure(procedure));<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    }<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span><a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    public boolean remove(final Procedure procedure) {<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>      return queue.remove(new DelayedProcedure(procedure));<a name="line.1661"></a>
 <span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
 <span class="sourceLineNo">1663</span><a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>    private void execDelayedProcedure(final DelayedProcedure delayed) {<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      // TODO: treat this as a normal procedure, add it to the scheduler and<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      // let one of the workers handle it.<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      // Today we consider ProcedureInMemoryChore as InlineChores<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>      final Procedure procedure = delayed.getObject();<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      if (procedure instanceof ProcedureInMemoryChore) {<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>        executeInMemoryChore((ProcedureInMemoryChore)procedure);<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>        // if the procedure is in a waiting state again, put it back in the queue<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>        procedure.updateTimestamp();<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>        if (procedure.isWaiting()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>          delayed.setTimeout(procedure.getTimeoutTimestamp());<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>          queue.add(delayed);<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>        }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      } else {<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>        executeTimedoutProcedure(procedure);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      }<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    }<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span><a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>    private void executeInMemoryChore(final ProcedureInMemoryChore chore) {<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>      if (!chore.isWaiting()) return;<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span><a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      // The ProcedureInMemoryChore is a special case, and it acts as a chore.<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      // instead of bringing the Chore class in, we reuse this timeout thread for<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>      // this special case.<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      try {<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>        chore.periodicExecute(getEnvironment());<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      } catch (Throwable e) {<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>        LOG.error("Ignoring " + chore + " exception: " + e.getMessage(), e);<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      }<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>    }<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span><a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>    private void executeTimedoutProcedure(final Procedure proc) {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>      // The procedure received a timeout. if the procedure itself does not handle it,<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>      // call abort() and add the procedure back in the queue for rollback.<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>      if (proc.setTimeoutFailure(getEnvironment())) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>        long rootProcId = Procedure.getRootProcedureId(procedures, proc);<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>        RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>        procStack.abort();<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>        store.update(proc);<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        scheduler.addFront(proc);<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>    }<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>  }<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span><a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>  private static final class DelayedProcedure<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>      extends DelayedUtil.DelayedContainerWithTimestamp&lt;Procedure&gt; {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>    public DelayedProcedure(final Procedure procedure) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>      super(procedure, procedure.getTimeoutTimestamp());<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    }<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>  }<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span><a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>  private static abstract class StoppableThread extends Thread {<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    public StoppableThread(final ThreadGroup group, final String name) {<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>      super(group, name);<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>    }<a name="line.1718"></a>
+<span class="sourceLineNo">1664</span>    private void execInlineChore(final InlineChore chore) {<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>      chore.run();<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>      add(chore);<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>    }<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span><a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>    private void execDelayedProcedure(final DelayedProcedure delayed) {<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>      // TODO: treat this as a normal procedure, add it to the scheduler and<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      // let one of the workers handle it.<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>      // Today we consider ProcedureInMemoryChore as InlineChores<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      final Procedure procedure = delayed.getObject();<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>      if (procedure instanceof ProcedureInMemoryChore) {<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>        executeInMemoryChore((ProcedureInMemoryChore)procedure);<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>        // if the procedure is in a waiting state again, put it back in the queue<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>        procedure.updateTimestamp();<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>        if (procedure.isWaiting()) {<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>          delayed.setTimeout(procedure.getTimeoutTimestamp());<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>          queue.add(delayed);<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>        }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      } else {<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>        executeTimedoutProcedure(procedure);<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      }<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>    }<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span><a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>    private void executeInMemoryChore(final ProcedureInMemoryChore chore) {<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>      if (!chore.isWaiting()) return;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span><a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>      // The ProcedureInMemoryChore is a special case, and it acts as a chore.<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>      // instead of bringing the Chore class in, we reuse this timeout thread for<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      // this special case.<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>      try {<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>        chore.periodicExecute(getEnvironment());<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>      } catch (Throwable e) {<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>        LOG.error("Ignoring " + chore + " exception: " + e.getMessage(), e);<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      }<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>    }<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span><a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>    private void executeTimedoutProcedure(final Procedure proc) {<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>      // The procedure received a timeout. if the procedure itself does not handle it,<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>      // call abort() and add the procedure back in the queue for rollback.<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>      if (proc.setTimeoutFailure(getEnvironment())) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>        long rootProcId = Procedure.getRootProcedureId(procedures, proc);<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>        RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>        procStack.abort();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>        store.update(proc);<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>        scheduler.addFront(proc);<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>      }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>    }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  }<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span><a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>  private static final class DelayedProcedure<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      extends DelayedUtil.DelayedContainerWithTimestamp&lt;Procedure&gt; {<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>    public DelayedProcedure(final Procedure procedure) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>      super(procedure, procedure.getTimeoutTimestamp());<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>    }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>  }<a name="line.1718"></a>
 <span class="sourceLineNo">1719</span><a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    public abstract void sendStopSignal();<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span><a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>    public void awaitTermination() {<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>      try {<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>        for (int i = 0; isAlive(); ++i) {<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>          sendStopSignal();<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>          join(250);<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>          if (i &gt; 0 &amp;&amp; (i % 8) == 0) {<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>            LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>              StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>          }<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>        }<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>      } catch (InterruptedException e) {<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        LOG.warn(getName() + " join wait got interrupted", e);<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>      }<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>    }<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>  }<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span><a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>  // ==========================================================================<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>  //  Inline Chores (executors internal chores)<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>  // ==========================================================================<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>  private static abstract class InlineChore extends DelayedUtil.DelayedObject implements Runnable {<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>    private long timeout;<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span><a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>    public abstract int getTimeoutInterval();<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span><a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>    protected void refreshTimeout() {<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      this.timeout = EnvironmentEdgeManager.currentTime() + getTimeoutInterval();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    @Override<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    public long getTimeout() {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      return timeout;<a name="line.1753"></a>
+<span class="sourceLineNo">1720</span>  private static abstract class StoppableThread extends Thread {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>    public StoppableThread(final ThreadGroup group, final String name) {<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>      super(group, name);<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>    }<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span><a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>    public abstract void sendStopSignal();<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span><a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>    public void awaitTermination() {<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      try {<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>        final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>        for (int i = 0; isAlive(); ++i) {<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>          sendStopSignal();<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>          join(250);<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>          if (i &gt; 0 &amp;&amp; (i % 8) == 0) {<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>            LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>              StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>          }<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>        }<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      } catch (InterruptedException e) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        LOG.warn(getName() + " join wait got interrupted", e);<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>      }<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>    }<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>  }<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span><a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>  // ==========================================================================<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>  //  Inline Chores (executors internal chores)<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>  // ==========================================================================<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>  private static abstract class InlineChore extends DelayedUtil.DelayedObject implements Runnable {<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>    private long timeout;<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>    public abstract int getTimeoutInterval();<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span><a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    protected void refreshTimeout() {<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>      this.timeout = EnvironmentEdgeManager.currentTime() + getTimeoutInterval();<a name="line.1753"></a>
 <span class="sourceLineNo">1754</span>    }<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>  }<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span><a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>  // ----------------------------------------------------------------------------<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>  // full set of procedures pending and completed to write a compacted<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>  // version of the log (in case is a log)?<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>  // will have the tracker saying everything is in the last log.<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>  // ----------------------------------------------------------------------------<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span><a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  private final class WorkerMonitor extends InlineChore {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.1768"></a>
+<span class="sourceLineNo">1755</span><a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    @Override<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>    public long getTimeout() {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      return timeout;<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>    }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>  }<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span><a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>  // ----------------------------------------------------------------------------<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>  // full set of procedures pending and completed to write a compacted<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>  // version of the log (in case is a log)?<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>  // will have the tracker saying everything is in the last log.<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>  // ----------------------------------------------------------------------------<a name="line.1768"></a>
 <span class="sourceLineNo">1769</span><a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span><a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span><a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    public WorkerMonitor() {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>      refreshConfig();<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span><a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    @Override<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>    public void run() {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      final int stuckCount = checkForStuckWorkers();<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>      checkThreadCount(stuckCount);<a name="line.1789"></a>
+<span class="sourceLineNo">1770</span>  private final class WorkerMonitor extends InlineChore {<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span><a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span><a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span><a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span><a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    public WorkerMonitor() {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      refreshConfig();<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>    }<a name="line.1789"></a>
 <span class="sourceLineNo">1790</span><a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      // refresh interval (poor man dynamic conf update)<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      refreshConfig();<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    }<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span><a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>    private int checkForStuckWorkers() {<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>      // check if any of the worker is stuck<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>      int stuckCount = 0;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>      for (WorkerThread worker: workerThreads) {<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>          continue;<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>        }<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span><a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>        // WARN the worker is stuck<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>        stuckCount++;<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>        LOG.warn("Worker stuck " + worker +<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>            " run time " + StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>      }<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>      return stuckCount;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    }<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span><a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    private void checkThreadCount(final int stuckCount) {<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>      // nothing to do if there are no runnable tasks<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) return;<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span><a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>      // add a new thread if the worker stuck percentage exceed the threshold limit<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>      // and every handler is active.<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>      final float stuckPerc = ((float)stuckCount) / workerThreads.size();<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>      if (stuckPerc &gt;= addWorkerStuckPercentage &amp;&amp;<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>          activeExecutorCount.get() == workerThreads.size()) {<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>        final WorkerThread worker = new WorkerThread(threadGroup);<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        workerThreads.add(worker);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>        worker.start();<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        LOG.debug("Added new worker thread " + worker);<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>      }<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    }<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span><a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>    private void refreshConfig() {<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>      addWorkerStuckPercentage = conf.getFloat(WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY,<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          DEFAULT_WORKER_ADD_STUCK_PERCENTAGE);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      timeoutInterval = conf.getInt(WORKER_MONITOR_INTERVAL_CONF_KEY,<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>        DEFAULT_WORKER_MONITOR_INTERVAL);<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>      stuckThreshold = conf.getInt(WORKER_STUCK_THRESHOLD_CONF_KEY,<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        DEFAULT_WORKER_STUCK_THRESHOLD);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    }<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span><a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>    @Override<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    public int getTimeoutInterval() {<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>      return timeoutInterval;<a name="line.1838"></a>
+<span class="sourceLineNo">1791</span>    @Override<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>    public void run() {<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>      final int stuckCount = checkForStuckWorkers();<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>      checkThreadCount(stuckCount);<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span><a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>      // refresh interval (poor man dynamic conf update)<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>      refreshConfig();<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    }<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span><a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>    private int checkForStuckWorkers() {<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>      // check if any of the worker is stuck<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>      int stuckCount = 0;<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>      for (WorkerThread worker: workerThreads) {<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          continue;<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>        }<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span><a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>        // WARN the worker is stuck<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>        stuckCount++;<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>        LOG.warn("Worker stuck " + worker +<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>            " run time " + StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>      }<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>      return stuckCount;<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>    }<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span><a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>    private void checkThreadCount(final int stuckCount) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>      // nothing to do if there are no runnable tasks<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) return;<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span><a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>      // ad

<TRUNCATED>

[08/18] hbase-site git commit: Published site at 59e8b8e2ba4d403d042fe4cc02f8f9f80aad67af.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 b6b4cb6..a1495ff 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
@@ -1381,472 +1381,477 @@
 <span class="sourceLineNo">1373</span>        return;<a name="line.1373"></a>
 <span class="sourceLineNo">1374</span>      }<a name="line.1374"></a>
 <span class="sourceLineNo">1375</span><a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      // if the store is not running we are aborting<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      if (!store.isRunning()) return;<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span><a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>      // Commit the transaction<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span><a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>        scheduler.yield(procedure);<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        return;<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>      }<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span><a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>    } while (reExecute);<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span><a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>    // Submit the new subprocedures<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>      submitChildrenProcedures(subprocs);<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    }<a name="line.1395"></a>
+<span class="sourceLineNo">1376</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>      // Commit the transaction<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span><a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>      // if the store is not running we are aborting<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>      if (!store.isRunning()) return;<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span><a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>        scheduler.yield(procedure);<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        return;<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span><a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    } while (reExecute);<a name="line.1395"></a>
 <span class="sourceLineNo">1396</span><a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>    // if the procedure is complete and has a parent, count down the children latch<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>    if (procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      countDownChildren(procStack, procedure);<a name="line.1399"></a>
+<span class="sourceLineNo">1397</span>    // Submit the new subprocedures<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>      submitChildrenProcedures(subprocs);<a name="line.1399"></a>
 <span class="sourceLineNo">1400</span>    }<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>  }<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span><a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>  private Procedure[] initializeChildren(final RootProcedureState procStack,<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>    assert subprocs != null : "expected subprocedures";<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      final Procedure subproc = subprocs[i];<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>      if (subproc == null) {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>          new IllegalArgumentIOException(msg)));<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>        return null;<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>      }<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span><a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>      subproc.setRootProcId(rootProcId);<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>      subproc.setProcId(nextProcId());<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>      procStack.addSubProcedure(subproc);<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>    }<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span><a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>    if (!procedure.isFailed()) {<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>      switch (procedure.getState()) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>        case RUNNABLE:<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>          break;<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        case WAITING_TIMEOUT:<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>          timeoutExecutor.add(procedure);<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>          break;<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>        default:<a name="line.1432"></a>
+<span class="sourceLineNo">1401</span><a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>    // if the procedure is complete and has a parent, count down the children latch<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>    if (procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>      countDownChildren(procStack, procedure);<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>    }<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>  }<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span><a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>  private Procedure[] initializeChildren(final RootProcedureState procStack,<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>    assert subprocs != null : "expected subprocedures";<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>      final Procedure subproc = subprocs[i];<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>      if (subproc == null) {<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>          new IllegalArgumentIOException(msg)));<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>        return null;<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>      }<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span><a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>      subproc.setRootProcId(rootProcId);<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>      subproc.setProcId(nextProcId());<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>      procStack.addSubProcedure(subproc);<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span><a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>    if (!procedure.isFailed()) {<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      switch (procedure.getState()) {<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>        case RUNNABLE:<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1432"></a>
 <span class="sourceLineNo">1433</span>          break;<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>      }<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>    }<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>    return subprocs;<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>  }<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span><a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>  private void submitChildrenProcedures(final Procedure[] subprocs) {<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      final Procedure subproc = subprocs[i];<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      scheduler.addFront(subproc);<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>    }<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>  }<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span><a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>  private void countDownChildren(final RootProcedureState procStack, final Procedure procedure) {<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>    final Procedure parent = procedures.get(procedure.getParentProcId());<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>    if (parent == null) {<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      assert procStack.isRollingback();<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      return;<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>    }<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span><a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>    // If this procedure is the last child awake the parent procedure<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>    if (traceEnabled) {<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      LOG.trace(parent + " child is done: " + procedure);<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>    }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span><a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    if (parent.childrenCountDown() &amp;&amp; parent.getState() == ProcedureState.WAITING) {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>      parent.setState(ProcedureState.RUNNABLE);<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>      store.update(parent);<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>      scheduler.addFront(parent);<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>      if (traceEnabled) {<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>        LOG.trace(parent + " all the children finished their work, resume.");<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>      }<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>      return;<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>  }<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span><a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>  private void updateStoreOnExec(final RootProcedureState procStack,<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      if (LOG.isTraceEnabled()) {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>      }<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      store.insert(procedure, subprocs);<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    } else {<a name="line.1479"></a>
+<span class="sourceLineNo">1434</span>        case WAITING_TIMEOUT:<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>          timeoutExecutor.add(procedure);<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>          break;<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>        default:<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>          break;<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>      }<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>    }<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>    return subprocs;<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>  }<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span><a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>  private void submitChildrenProcedures(final Procedure[] subprocs) {<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>      final Procedure subproc = subprocs[i];<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>      scheduler.addFront(subproc);<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>    }<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>  }<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span><a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>  private void countDownChildren(final RootProcedureState procStack, final Procedure procedure) {<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>    final Procedure parent = procedures.get(procedure.getParentProcId());<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>    if (parent == null) {<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>      assert procStack.isRollingback();<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>      return;<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>    }<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span><a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    // If this procedure is the last child awake the parent procedure<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>    if (traceEnabled) {<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>      LOG.trace(parent + " child is done: " + procedure);<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>    }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span><a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>    if (parent.childrenCountDown() &amp;&amp; parent.getState() == ProcedureState.WAITING) {<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>      parent.setState(ProcedureState.RUNNABLE);<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>      store.update(parent);<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>      scheduler.addFront(parent);<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>      if (traceEnabled) {<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>        LOG.trace(parent + " all the children finished their work, resume.");<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>      }<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>      return;<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>    }<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>  }<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span><a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>  private void updateStoreOnExec(final RootProcedureState procStack,<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1479"></a>
 <span class="sourceLineNo">1480</span>      if (LOG.isTraceEnabled()) {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>        LOG.trace("Store update " + procedure);<a name="line.1481"></a>
+<span class="sourceLineNo">1481</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1481"></a>
 <span class="sourceLineNo">1482</span>      }<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>        // remove child procedures<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>        if (childProcIds != null) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>          store.delete(procedure, childProcIds);<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>            procedures.remove(childProcIds[i]);<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>          }<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>        } else {<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          store.update(procedure);<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>        }<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>      } else {<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>        store.update(procedure);<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>      }<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>    }<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>  }<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span><a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  private void handleInterruptedException(final Procedure proc, final InterruptedException e) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>    if (LOG.isTraceEnabled()) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>      LOG.trace("Interrupt during " + proc + ". suspend and retry it later.", e);<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>    }<a name="line.1503"></a>
+<span class="sourceLineNo">1483</span>      store.insert(procedure, subprocs);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>    } else {<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>      if (LOG.isTraceEnabled()) {<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>        LOG.trace("Store update " + procedure);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      }<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>        // remove child procedures<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>        if (childProcIds != null) {<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>          store.delete(procedure, childProcIds);<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>            procedures.remove(childProcIds[i]);<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>          }<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>        } else {<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>          store.update(procedure);<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        }<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>      } else {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>        store.update(procedure);<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>      }<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>    }<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>  }<a name="line.1503"></a>
 <span class="sourceLineNo">1504</span><a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>    // and the executor/store will be stopped.<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>  }<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span><a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>  private void execCompletionCleanup(final Procedure proc) {<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    final TEnvironment env = getEnvironment();<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    if (proc.holdLock(env) &amp;&amp; proc.hasLock(env)) {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      releaseLock(proc, true);<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>    }<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>    try {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>      proc.completionCleanup(env);<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>    } catch (Throwable e) {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>    }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>  }<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span><a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>  private void procedureFinished(final Procedure proc) {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    // call the procedure completion cleanup handler<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    execCompletionCleanup(proc);<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span><a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>    // update the executor internal state maps<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>    final ProcedureInfo procInfo = ProcedureUtil.convertToProcedureInfo(proc, proc.getNonceKey());<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>      procInfo.setClientAckTime(0);<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>    }<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>    completed.put(procInfo.getProcId(), procInfo);<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>    rollbackStack.remove(proc.getProcId());<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>    procedures.remove(proc.getProcId());<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>    // call the runnableSet completion cleanup handler<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>    try {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      scheduler.completionCleanup(proc);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>    } catch (Throwable e) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: " + proc, e);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>    }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span><a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    // Notify the listeners<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>  }<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span><a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>  // ==========================================================================<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>  //  Worker Thread<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>  // ==========================================================================<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>  private final class WorkerThread extends StoppableThread {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span><a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>    public WorkerThread(final ThreadGroup group) {<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      super(group, "ProcExecWorker-" + workerId.incrementAndGet());<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>    }<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span><a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>    @Override<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>    public void sendStopSignal() {<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      scheduler.signalAll();<a name="line.1563"></a>
+<span class="sourceLineNo">1505</span>  private void handleInterruptedException(final Procedure proc, final InterruptedException e) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>    if (LOG.isTraceEnabled()) {<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>      LOG.trace("Interrupt during " + proc + ". suspend and retry it later.", e);<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>    }<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span><a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>    // and the executor/store will be stopped.<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>  }<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span><a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>  private void execCompletionCleanup(final Procedure proc) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    final TEnvironment env = getEnvironment();<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    if (proc.holdLock(env) &amp;&amp; proc.hasLock(env)) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>      releaseLock(proc, true);<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>    }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>    try {<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      proc.completionCleanup(env);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>    } catch (Throwable e) {<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>    }<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>  }<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span><a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>  private void procedureFinished(final Procedure proc) {<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    // call the procedure completion cleanup handler<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    execCompletionCleanup(proc);<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span><a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>    // update the executor internal state maps<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>    final ProcedureInfo procInfo = ProcedureUtil.convertToProcedureInfo(proc, proc.getNonceKey());<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      procInfo.setClientAckTime(0);<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>    }<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span><a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>    completed.put(procInfo.getProcId(), procInfo);<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    rollbackStack.remove(proc.getProcId());<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>    procedures.remove(proc.getProcId());<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span><a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>    // call the runnableSet completion cleanup handler<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>    try {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>      scheduler.completionCleanup(proc);<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>    } catch (Throwable e) {<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: " + proc, e);<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>    }<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span><a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>    // Notify the listeners<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>  }<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span><a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>  // ==========================================================================<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>  //  Worker Thread<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>  // ==========================================================================<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>  private final class WorkerThread extends StoppableThread {<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span><a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    public WorkerThread(final ThreadGroup group) {<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>      super(group, "ProcExecWorker-" + workerId.incrementAndGet());<a name="line.1563"></a>
 <span class="sourceLineNo">1564</span>    }<a name="line.1564"></a>
 <span class="sourceLineNo">1565</span><a name="line.1565"></a>
 <span class="sourceLineNo">1566</span>    @Override<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    public void run() {<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>        final Procedure procedure = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>        if (procedure == null) continue;<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span><a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>        store.setRunningProcedureCount(activeExecutorCount.incrementAndGet());<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>        executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        try {<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          if (traceEnabled) {<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>            LOG.trace("Trying to start the execution of " + procedure);<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>          }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>          executeProcedure(procedure);<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>        } finally {<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>          store.setRunningProcedureCount(activeExecutorCount.decrementAndGet());<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>          lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>          executionStartTime.set(Long.MAX_VALUE);<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>        }<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      }<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      LOG.debug("Worker thread terminated " + this);<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>      workerThreads.remove(this);<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>    }<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span><a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>    /**<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>     * @return the time since the current procedure is running<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>     */<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    public long getCurrentRunTime() {<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    }<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span><a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    private boolean keepAlive(final long lastUpdate) {<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>      if (workerThreads.size() &lt;= corePoolSize) return true;<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      return (EnvironmentEdgeManager.currentTime() - lastUpdate) &lt; keepAliveTime;<a name="line.1600"></a>
+<span class="sourceLineNo">1567</span>    public void sendStopSignal() {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>      scheduler.signalAll();<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>    }<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span><a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    @Override<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>    public void run() {<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>        final Procedure procedure = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>        if (procedure == null) continue;<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span><a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>        store.setRunningProcedureCount(activeExecutorCount.incrementAndGet());<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>        executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>        try {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>          if (traceEnabled) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>            LOG.trace("Trying to start the execution of " + procedure);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>          }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>          executeProcedure(procedure);<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>        } finally {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          store.setRunningProcedureCount(activeExecutorCount.decrementAndGet());<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>          lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>          executionStartTime.set(Long.MAX_VALUE);<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>        }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      }<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      LOG.debug("Worker thread terminated " + this);<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      workerThreads.remove(this);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>    }<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span><a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>    /**<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>     * @return the time since the current procedure is running<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>     */<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    public long getCurrentRunTime() {<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1600"></a>
 <span class="sourceLineNo">1601</span>    }<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>  }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span><a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>  // ==========================================================================<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>  //  Timeout Thread<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>  // ==========================================================================<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>  private final class TimeoutExecutorThread extends StoppableThread {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    private final DelayQueue&lt;DelayedWithTimeout&gt; queue = new DelayQueue&lt;&gt;();<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span><a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    public TimeoutExecutorThread(final ThreadGroup group) {<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>      super(group, "ProcedureTimeoutExecutor");<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>    }<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span><a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    @Override<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>    public void sendStopSignal() {<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>      queue.add(DelayedUtil.DELAYED_POISON);<a name="line.1616"></a>
+<span class="sourceLineNo">1602</span><a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    private boolean keepAlive(final long lastUpdate) {<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      if (workerThreads.size() &lt;= corePoolSize) return true;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>      return (EnvironmentEdgeManager.currentTime() - lastUpdate) &lt; keepAliveTime;<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    }<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>  }<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span><a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>  // ==========================================================================<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>  //  Timeout Thread<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>  // ==========================================================================<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>  private final class TimeoutExecutorThread extends StoppableThread {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    private final DelayQueue&lt;DelayedWithTimeout&gt; queue = new DelayQueue&lt;&gt;();<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span><a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>    public TimeoutExecutorThread(final ThreadGroup group) {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>      super(group, "ProcedureTimeoutExecutor");<a name="line.1616"></a>
 <span class="sourceLineNo">1617</span>    }<a name="line.1617"></a>
 <span class="sourceLineNo">1618</span><a name="line.1618"></a>
 <span class="sourceLineNo">1619</span>    @Override<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    public void run() {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>      final boolean isTraceEnabled = LOG.isTraceEnabled();<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      while (isRunning()) {<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>        final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>        if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>          // the executor may be shutting down,<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>          // and the task is just the shutdown request<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>          continue;<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>        }<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span><a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>        if (isTraceEnabled) {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>          LOG.trace("Trying to start the execution of " + task);<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>        }<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span><a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>        // execute the task<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>        if (task instanceof InlineChore) {<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>          execInlineChore((InlineChore)task);<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        } else if (task instanceof DelayedProcedure) {<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>          execDelayedProcedure((DelayedProcedure)task);<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>        } else {<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>          LOG.error("CODE-BUG unknown timeout task type " + task);<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>        }<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>      }<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>    }<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span><a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>    public void add(final InlineChore chore) {<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      chore.refreshTimeout();<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>      queue.add(chore);<a name="line.1647"></a>
+<span class="sourceLineNo">1620</span>    public void sendStopSignal() {<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>      queue.add(DelayedUtil.DELAYED_POISON);<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>    }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span><a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    @Override<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    public void run() {<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      final boolean isTraceEnabled = LOG.isTraceEnabled();<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      while (isRunning()) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>        final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>        if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>          // the executor may be shutting down,<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>          // and the task is just the shutdown request<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>          continue;<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>        }<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span><a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>        if (isTraceEnabled) {<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>          LOG.trace("Trying to start the execution of " + task);<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        }<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span><a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>        // execute the task<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>        if (task instanceof InlineChore) {<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          execInlineChore((InlineChore)task);<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>        } else if (task instanceof DelayedProcedure) {<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>          execDelayedProcedure((DelayedProcedure)task);<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>        } else {<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>          LOG.error("CODE-BUG unknown timeout task type " + task);<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        }<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>      }<a name="line.1647"></a>
 <span class="sourceLineNo">1648</span>    }<a name="line.1648"></a>
 <span class="sourceLineNo">1649</span><a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    public void add(final Procedure procedure) {<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>      assert procedure.getState() == ProcedureState.WAITING_TIMEOUT;<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>      queue.add(new DelayedProcedure(procedure));<a name="line.1652"></a>
+<span class="sourceLineNo">1650</span>    public void add(final InlineChore chore) {<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>      chore.refreshTimeout();<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      queue.add(chore);<a name="line.1652"></a>
 <span class="sourceLineNo">1653</span>    }<a name="line.1653"></a>
 <span class="sourceLineNo">1654</span><a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    public boolean remove(final Procedure procedure) {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      return queue.remove(new DelayedProcedure(procedure));<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    }<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    private void execInlineChore(final InlineChore chore) {<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>      chore.run();<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      add(chore);<a name="line.1661"></a>
+<span class="sourceLineNo">1655</span>    public void add(final Procedure procedure) {<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>      assert procedure.getState() == ProcedureState.WAITING_TIMEOUT;<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>      queue.add(new DelayedProcedure(procedure));<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    }<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span><a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    public boolean remove(final Procedure procedure) {<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>      return queue.remove(new DelayedProcedure(procedure));<a name="line.1661"></a>
 <span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
 <span class="sourceLineNo">1663</span><a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>    private void execDelayedProcedure(final DelayedProcedure delayed) {<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      // TODO: treat this as a normal procedure, add it to the scheduler and<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      // let one of the workers handle it.<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      // Today we consider ProcedureInMemoryChore as InlineChores<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>      final Procedure procedure = delayed.getObject();<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      if (procedure instanceof ProcedureInMemoryChore) {<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>        executeInMemoryChore((ProcedureInMemoryChore)procedure);<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>        // if the procedure is in a waiting state again, put it back in the queue<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>        procedure.updateTimestamp();<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>        if (procedure.isWaiting()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>          delayed.setTimeout(procedure.getTimeoutTimestamp());<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>          queue.add(delayed);<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>        }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      } else {<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>        executeTimedoutProcedure(procedure);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      }<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    }<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span><a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>    private void executeInMemoryChore(final ProcedureInMemoryChore chore) {<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>      if (!chore.isWaiting()) return;<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span><a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      // The ProcedureInMemoryChore is a special case, and it acts as a chore.<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      // instead of bringing the Chore class in, we reuse this timeout thread for<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>      // this special case.<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      try {<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>        chore.periodicExecute(getEnvironment());<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      } catch (Throwable e) {<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>        LOG.error("Ignoring " + chore + " exception: " + e.getMessage(), e);<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      }<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>    }<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span><a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>    private void executeTimedoutProcedure(final Procedure proc) {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>      // The procedure received a timeout. if the procedure itself does not handle it,<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>      // call abort() and add the procedure back in the queue for rollback.<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>      if (proc.setTimeoutFailure(getEnvironment())) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>        long rootProcId = Procedure.getRootProcedureId(procedures, proc);<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>        RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>        procStack.abort();<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>        store.update(proc);<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        scheduler.addFront(proc);<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>    }<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>  }<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span><a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>  private static final class DelayedProcedure<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>      extends DelayedUtil.DelayedContainerWithTimestamp&lt;Procedure&gt; {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>    public DelayedProcedure(final Procedure procedure) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>      super(procedure, procedure.getTimeoutTimestamp());<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    }<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>  }<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span><a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>  private static abstract class StoppableThread extends Thread {<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    public StoppableThread(final ThreadGroup group, final String name) {<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>      super(group, name);<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>    }<a name="line.1718"></a>
+<span class="sourceLineNo">1664</span>    private void execInlineChore(final InlineChore chore) {<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>      chore.run();<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>      add(chore);<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>    }<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span><a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>    private void execDelayedProcedure(final DelayedProcedure delayed) {<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>      // TODO: treat this as a normal procedure, add it to the scheduler and<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      // let one of the workers handle it.<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>      // Today we consider ProcedureInMemoryChore as InlineChores<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      final Procedure procedure = delayed.getObject();<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>      if (procedure instanceof ProcedureInMemoryChore) {<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>        executeInMemoryChore((ProcedureInMemoryChore)procedure);<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>        // if the procedure is in a waiting state again, put it back in the queue<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>        procedure.updateTimestamp();<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>        if (procedure.isWaiting()) {<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>          delayed.setTimeout(procedure.getTimeoutTimestamp());<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>          queue.add(delayed);<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>        }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      } else {<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>        executeTimedoutProcedure(procedure);<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      }<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>    }<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span><a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>    private void executeInMemoryChore(final ProcedureInMemoryChore chore) {<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>      if (!chore.isWaiting()) return;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span><a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>      // The ProcedureInMemoryChore is a special case, and it acts as a chore.<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>      // instead of bringing the Chore class in, we reuse this timeout thread for<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      // this special case.<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>      try {<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>        chore.periodicExecute(getEnvironment());<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>      } catch (Throwable e) {<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>        LOG.error("Ignoring " + chore + " exception: " + e.getMessage(), e);<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      }<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>    }<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span><a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>    private void executeTimedoutProcedure(final Procedure proc) {<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>      // The procedure received a timeout. if the procedure itself does not handle it,<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>      // call abort() and add the procedure back in the queue for rollback.<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>      if (proc.setTimeoutFailure(getEnvironment())) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>        long rootProcId = Procedure.getRootProcedureId(procedures, proc);<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>        RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>        procStack.abort();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>        store.update(proc);<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>        scheduler.addFront(proc);<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>      }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>    }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  }<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span><a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>  private static final class DelayedProcedure<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      extends DelayedUtil.DelayedContainerWithTimestamp&lt;Procedure&gt; {<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>    public DelayedProcedure(final Procedure procedure) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>      super(procedure, procedure.getTimeoutTimestamp());<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>    }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>  }<a name="line.1718"></a>
 <span class="sourceLineNo">1719</span><a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    public abstract void sendStopSignal();<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span><a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>    public void awaitTermination() {<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>      try {<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>        for (int i = 0; isAlive(); ++i) {<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>          sendStopSignal();<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>          join(250);<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>          if (i &gt; 0 &amp;&amp; (i % 8) == 0) {<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>            LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>              StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>          }<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>        }<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>      } catch (InterruptedException e) {<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        LOG.warn(getName() + " join wait got interrupted", e);<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>      }<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>    }<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>  }<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span><a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>  // ==========================================================================<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>  //  Inline Chores (executors internal chores)<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>  // ==========================================================================<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>  private static abstract class InlineChore extends DelayedUtil.DelayedObject implements Runnable {<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>    private long timeout;<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span><a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>    public abstract int getTimeoutInterval();<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span><a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>    protected void refreshTimeout() {<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      this.timeout = EnvironmentEdgeManager.currentTime() + getTimeoutInterval();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    @Override<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    public long getTimeout() {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      return timeout;<a name="line.1753"></a>
+<span class="sourceLineNo">1720</span>  private static abstract class StoppableThread extends Thread {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>    public StoppableThread(final ThreadGroup group, final String name) {<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>      super(group, name);<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>    }<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span><a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>    public abstract void sendStopSignal();<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span><a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>    public void awaitTermination() {<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      try {<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>        final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>        for (int i = 0; isAlive(); ++i) {<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>          sendStopSignal();<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>          join(250);<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>          if (i &gt; 0 &amp;&amp; (i % 8) == 0) {<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>            LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>              StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>          }<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>        }<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      } catch (InterruptedException e) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        LOG.warn(getName() + " join wait got interrupted", e);<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>      }<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>    }<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>  }<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span><a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>  // ==========================================================================<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>  //  Inline Chores (executors internal chores)<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>  // ==========================================================================<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>  private static abstract class InlineChore extends DelayedUtil.DelayedObject implements Runnable {<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>    private long timeout;<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>    public abstract int getTimeoutInterval();<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span><a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    protected void refreshTimeout() {<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>      this.timeout = EnvironmentEdgeManager.currentTime() + getTimeoutInterval();<a name="line.1753"></a>
 <span class="sourceLineNo">1754</span>    }<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>  }<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span><a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>  // ----------------------------------------------------------------------------<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>  // full set of procedures pending and completed to write a compacted<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>  // version of the log (in case is a log)?<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>  // will have the tracker saying everything is in the last log.<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>  // ----------------------------------------------------------------------------<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span><a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  private final class WorkerMonitor extends InlineChore {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.1768"></a>
+<span class="sourceLineNo">1755</span><a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    @Override<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>    public long getTimeout() {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      return timeout;<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>    }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>  }<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span><a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>  // ----------------------------------------------------------------------------<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>  // full set of procedures pending and completed to write a compacted<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>  // version of the log (in case is a log)?<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>  // will have the tracker saying everything is in the last log.<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>  // ----------------------------------------------------------------------------<a name="line.1768"></a>
 <span class="sourceLineNo">1769</span><a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span><a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span><a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    public WorkerMonitor() {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>      refreshConfig();<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span><a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    @Override<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>    public void run() {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      final int stuckCount = checkForStuckWorkers();<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>      checkThreadCount(stuckCount);<a name="line.1789"></a>
+<span class="sourceLineNo">1770</span>  private final class WorkerMonitor extends InlineChore {<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span><a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span><a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span><a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span><a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    public WorkerMonitor() {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      refreshConfig();<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>    }<a name="line.1789"></a>
 <span class="sourceLineNo">1790</span><a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      // refresh interval (poor man dynamic conf update)<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      refreshConfig();<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    }<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span><a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>    private int checkForStuckWorkers() {<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>      // check if any of the worker is stuck<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>      int stuckCount = 0;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>      for (WorkerThread worker: workerThreads) {<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>          continue;<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>        }<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span><a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>        // WARN the worker is stuck<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>        stuckCount++;<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>        LOG.warn("Worker stuck " + worker +<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>            " run time " + StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>      }<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>      return stuckCount;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    }<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span><a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    private void checkThreadCount(final int stuckCount) {<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>      // nothing to do if there are no runnable tasks<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) return;<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span><a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>      // add a new thread if the worker stuck percentage exceed the threshold limit<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>      // and every handler is active.<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>      final float stuckPerc = ((float)stuckCount) / workerThreads.size();<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>      if (stuckPerc &gt;= addWorkerStuckPercentage &amp;&amp;<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>          activeExecutorCount.get() == workerThreads.size()) {<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>        final WorkerThread worker = new WorkerThread(threadGroup);<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        workerThreads.add(worker);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>        worker.start();<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        LOG.debug("Added new worker thread " + worker);<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>      }<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    }<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span><a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>    private void refreshConfig() {<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>      addWorkerStuckPercentage = conf.getFloat(WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY,<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          DEFAULT_WORKER_ADD_STUCK_PERCENTAGE);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      timeoutInterval = conf.getInt(WORKER_MONITOR_INTERVAL_CONF_KEY,<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>        DEFAULT_WORKER_MONITOR_INTERVAL);<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>      stuckThreshold = conf.getInt(WORKER_STUCK_THRESHOLD_CONF_KEY,<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        DEFAULT_WORKER_STUCK_THRESHOLD);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    }<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span><a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>    @Override<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    public int getTimeoutInterval() {<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>      return timeoutInterval;<a name="line.1838"></a>
+<span class="sourceLineNo">1791</span>    @Override<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>    public void run() {<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>      final int stuckCount = checkForStuckWorkers();<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>      checkThreadCount(stuckCount);<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span><a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>      // refresh interval (poor man dynamic conf update)<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>      refreshConfig();<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    }<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span><a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>    private int checkForStuckWorkers() {<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>      // check if any of the worker is stuck<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>      int stuckCount = 0;<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>      for (WorkerThread worker: workerThreads) {<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          continue;<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>        }<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span><a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>        // WARN the worker is stuck<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>        stuckCount++;<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>        LOG.warn("Worker stuck " + worker +<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>            " run time " + StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>      }<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>      return stuckCount;<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>    }<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span><a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>    private void checkThreadCount(final int stuckCount) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>      // nothing to do if there are no runnable tasks<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) return;<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span><a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>      // add a new thread if the worker stuck percentage exceed the threshol

<TRUNCATED>

[13/18] hbase-site git commit: Published site at 59e8b8e2ba4d403d042fe4cc02f8f9f80aad67af.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 b6b4cb6..a1495ff 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
@@ -1381,472 +1381,477 @@
 <span class="sourceLineNo">1373</span>        return;<a name="line.1373"></a>
 <span class="sourceLineNo">1374</span>      }<a name="line.1374"></a>
 <span class="sourceLineNo">1375</span><a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      // if the store is not running we are aborting<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      if (!store.isRunning()) return;<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span><a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>      // Commit the transaction<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span><a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>        scheduler.yield(procedure);<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        return;<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>      }<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span><a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>    } while (reExecute);<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span><a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>    // Submit the new subprocedures<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>      submitChildrenProcedures(subprocs);<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    }<a name="line.1395"></a>
+<span class="sourceLineNo">1376</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>      // Commit the transaction<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span><a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>      // if the store is not running we are aborting<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>      if (!store.isRunning()) return;<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span><a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>        scheduler.yield(procedure);<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        return;<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span><a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    } while (reExecute);<a name="line.1395"></a>
 <span class="sourceLineNo">1396</span><a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>    // if the procedure is complete and has a parent, count down the children latch<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>    if (procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      countDownChildren(procStack, procedure);<a name="line.1399"></a>
+<span class="sourceLineNo">1397</span>    // Submit the new subprocedures<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>      submitChildrenProcedures(subprocs);<a name="line.1399"></a>
 <span class="sourceLineNo">1400</span>    }<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>  }<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span><a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>  private Procedure[] initializeChildren(final RootProcedureState procStack,<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>    assert subprocs != null : "expected subprocedures";<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      final Procedure subproc = subprocs[i];<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>      if (subproc == null) {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>          new IllegalArgumentIOException(msg)));<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>        return null;<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>      }<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span><a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>      subproc.setRootProcId(rootProcId);<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>      subproc.setProcId(nextProcId());<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>      procStack.addSubProcedure(subproc);<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>    }<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span><a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>    if (!procedure.isFailed()) {<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>      switch (procedure.getState()) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>        case RUNNABLE:<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>          break;<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        case WAITING_TIMEOUT:<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>          timeoutExecutor.add(procedure);<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>          break;<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>        default:<a name="line.1432"></a>
+<span class="sourceLineNo">1401</span><a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>    // if the procedure is complete and has a parent, count down the children latch<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>    if (procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>      countDownChildren(procStack, procedure);<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>    }<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>  }<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span><a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>  private Procedure[] initializeChildren(final RootProcedureState procStack,<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>    assert subprocs != null : "expected subprocedures";<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>      final Procedure subproc = subprocs[i];<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>      if (subproc == null) {<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>          new IllegalArgumentIOException(msg)));<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>        return null;<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>      }<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span><a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>      subproc.setRootProcId(rootProcId);<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>      subproc.setProcId(nextProcId());<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>      procStack.addSubProcedure(subproc);<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span><a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>    if (!procedure.isFailed()) {<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      switch (procedure.getState()) {<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>        case RUNNABLE:<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1432"></a>
 <span class="sourceLineNo">1433</span>          break;<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>      }<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>    }<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>    return subprocs;<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>  }<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span><a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>  private void submitChildrenProcedures(final Procedure[] subprocs) {<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      final Procedure subproc = subprocs[i];<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      scheduler.addFront(subproc);<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>    }<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>  }<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span><a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>  private void countDownChildren(final RootProcedureState procStack, final Procedure procedure) {<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>    final Procedure parent = procedures.get(procedure.getParentProcId());<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>    if (parent == null) {<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      assert procStack.isRollingback();<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      return;<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>    }<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span><a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>    // If this procedure is the last child awake the parent procedure<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>    if (traceEnabled) {<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      LOG.trace(parent + " child is done: " + procedure);<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>    }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span><a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    if (parent.childrenCountDown() &amp;&amp; parent.getState() == ProcedureState.WAITING) {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>      parent.setState(ProcedureState.RUNNABLE);<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>      store.update(parent);<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>      scheduler.addFront(parent);<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>      if (traceEnabled) {<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>        LOG.trace(parent + " all the children finished their work, resume.");<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>      }<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>      return;<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>  }<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span><a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>  private void updateStoreOnExec(final RootProcedureState procStack,<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      if (LOG.isTraceEnabled()) {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>      }<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      store.insert(procedure, subprocs);<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    } else {<a name="line.1479"></a>
+<span class="sourceLineNo">1434</span>        case WAITING_TIMEOUT:<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>          timeoutExecutor.add(procedure);<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>          break;<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>        default:<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>          break;<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>      }<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>    }<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>    return subprocs;<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>  }<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span><a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>  private void submitChildrenProcedures(final Procedure[] subprocs) {<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>      final Procedure subproc = subprocs[i];<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>      scheduler.addFront(subproc);<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>    }<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>  }<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span><a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>  private void countDownChildren(final RootProcedureState procStack, final Procedure procedure) {<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>    final Procedure parent = procedures.get(procedure.getParentProcId());<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>    if (parent == null) {<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>      assert procStack.isRollingback();<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>      return;<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>    }<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span><a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    // If this procedure is the last child awake the parent procedure<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>    if (traceEnabled) {<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>      LOG.trace(parent + " child is done: " + procedure);<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>    }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span><a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>    if (parent.childrenCountDown() &amp;&amp; parent.getState() == ProcedureState.WAITING) {<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>      parent.setState(ProcedureState.RUNNABLE);<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>      store.update(parent);<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>      scheduler.addFront(parent);<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>      if (traceEnabled) {<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>        LOG.trace(parent + " all the children finished their work, resume.");<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>      }<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>      return;<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>    }<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>  }<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span><a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>  private void updateStoreOnExec(final RootProcedureState procStack,<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1479"></a>
 <span class="sourceLineNo">1480</span>      if (LOG.isTraceEnabled()) {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>        LOG.trace("Store update " + procedure);<a name="line.1481"></a>
+<span class="sourceLineNo">1481</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1481"></a>
 <span class="sourceLineNo">1482</span>      }<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>        // remove child procedures<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>        if (childProcIds != null) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>          store.delete(procedure, childProcIds);<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>            procedures.remove(childProcIds[i]);<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>          }<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>        } else {<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          store.update(procedure);<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>        }<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>      } else {<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>        store.update(procedure);<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>      }<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>    }<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>  }<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span><a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  private void handleInterruptedException(final Procedure proc, final InterruptedException e) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>    if (LOG.isTraceEnabled()) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>      LOG.trace("Interrupt during " + proc + ". suspend and retry it later.", e);<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>    }<a name="line.1503"></a>
+<span class="sourceLineNo">1483</span>      store.insert(procedure, subprocs);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>    } else {<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>      if (LOG.isTraceEnabled()) {<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>        LOG.trace("Store update " + procedure);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      }<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>        // remove child procedures<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>        if (childProcIds != null) {<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>          store.delete(procedure, childProcIds);<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>            procedures.remove(childProcIds[i]);<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>          }<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>        } else {<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>          store.update(procedure);<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        }<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>      } else {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>        store.update(procedure);<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>      }<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>    }<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>  }<a name="line.1503"></a>
 <span class="sourceLineNo">1504</span><a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>    // and the executor/store will be stopped.<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>  }<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span><a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>  private void execCompletionCleanup(final Procedure proc) {<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    final TEnvironment env = getEnvironment();<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    if (proc.holdLock(env) &amp;&amp; proc.hasLock(env)) {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      releaseLock(proc, true);<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>    }<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>    try {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>      proc.completionCleanup(env);<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>    } catch (Throwable e) {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>    }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>  }<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span><a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>  private void procedureFinished(final Procedure proc) {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    // call the procedure completion cleanup handler<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    execCompletionCleanup(proc);<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span><a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>    // update the executor internal state maps<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>    final ProcedureInfo procInfo = ProcedureUtil.convertToProcedureInfo(proc, proc.getNonceKey());<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>      procInfo.setClientAckTime(0);<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>    }<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>    completed.put(procInfo.getProcId(), procInfo);<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>    rollbackStack.remove(proc.getProcId());<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>    procedures.remove(proc.getProcId());<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>    // call the runnableSet completion cleanup handler<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>    try {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      scheduler.completionCleanup(proc);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>    } catch (Throwable e) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: " + proc, e);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>    }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span><a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    // Notify the listeners<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>  }<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span><a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>  // ==========================================================================<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>  //  Worker Thread<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>  // ==========================================================================<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>  private final class WorkerThread extends StoppableThread {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span><a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>    public WorkerThread(final ThreadGroup group) {<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      super(group, "ProcExecWorker-" + workerId.incrementAndGet());<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>    }<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span><a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>    @Override<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>    public void sendStopSignal() {<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      scheduler.signalAll();<a name="line.1563"></a>
+<span class="sourceLineNo">1505</span>  private void handleInterruptedException(final Procedure proc, final InterruptedException e) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>    if (LOG.isTraceEnabled()) {<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>      LOG.trace("Interrupt during " + proc + ". suspend and retry it later.", e);<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>    }<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span><a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>    // and the executor/store will be stopped.<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>  }<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span><a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>  private void execCompletionCleanup(final Procedure proc) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    final TEnvironment env = getEnvironment();<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    if (proc.holdLock(env) &amp;&amp; proc.hasLock(env)) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>      releaseLock(proc, true);<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>    }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>    try {<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      proc.completionCleanup(env);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>    } catch (Throwable e) {<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>    }<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>  }<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span><a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>  private void procedureFinished(final Procedure proc) {<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    // call the procedure completion cleanup handler<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    execCompletionCleanup(proc);<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span><a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>    // update the executor internal state maps<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>    final ProcedureInfo procInfo = ProcedureUtil.convertToProcedureInfo(proc, proc.getNonceKey());<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      procInfo.setClientAckTime(0);<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>    }<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span><a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>    completed.put(procInfo.getProcId(), procInfo);<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    rollbackStack.remove(proc.getProcId());<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>    procedures.remove(proc.getProcId());<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span><a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>    // call the runnableSet completion cleanup handler<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>    try {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>      scheduler.completionCleanup(proc);<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>    } catch (Throwable e) {<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: " + proc, e);<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>    }<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span><a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>    // Notify the listeners<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>  }<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span><a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>  // ==========================================================================<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>  //  Worker Thread<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>  // ==========================================================================<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>  private final class WorkerThread extends StoppableThread {<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span><a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    public WorkerThread(final ThreadGroup group) {<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>      super(group, "ProcExecWorker-" + workerId.incrementAndGet());<a name="line.1563"></a>
 <span class="sourceLineNo">1564</span>    }<a name="line.1564"></a>
 <span class="sourceLineNo">1565</span><a name="line.1565"></a>
 <span class="sourceLineNo">1566</span>    @Override<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    public void run() {<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>        final Procedure procedure = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>        if (procedure == null) continue;<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span><a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>        store.setRunningProcedureCount(activeExecutorCount.incrementAndGet());<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>        executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        try {<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          if (traceEnabled) {<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>            LOG.trace("Trying to start the execution of " + procedure);<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>          }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>          executeProcedure(procedure);<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>        } finally {<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>          store.setRunningProcedureCount(activeExecutorCount.decrementAndGet());<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>          lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>          executionStartTime.set(Long.MAX_VALUE);<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>        }<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      }<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      LOG.debug("Worker thread terminated " + this);<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>      workerThreads.remove(this);<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>    }<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span><a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>    /**<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>     * @return the time since the current procedure is running<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>     */<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    public long getCurrentRunTime() {<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    }<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span><a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    private boolean keepAlive(final long lastUpdate) {<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>      if (workerThreads.size() &lt;= corePoolSize) return true;<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      return (EnvironmentEdgeManager.currentTime() - lastUpdate) &lt; keepAliveTime;<a name="line.1600"></a>
+<span class="sourceLineNo">1567</span>    public void sendStopSignal() {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>      scheduler.signalAll();<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>    }<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span><a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    @Override<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>    public void run() {<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>        final Procedure procedure = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>        if (procedure == null) continue;<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span><a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>        store.setRunningProcedureCount(activeExecutorCount.incrementAndGet());<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>        executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>        try {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>          if (traceEnabled) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>            LOG.trace("Trying to start the execution of " + procedure);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>          }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>          executeProcedure(procedure);<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>        } finally {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          store.setRunningProcedureCount(activeExecutorCount.decrementAndGet());<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>          lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>          executionStartTime.set(Long.MAX_VALUE);<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>        }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      }<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      LOG.debug("Worker thread terminated " + this);<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      workerThreads.remove(this);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>    }<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span><a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>    /**<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>     * @return the time since the current procedure is running<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>     */<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    public long getCurrentRunTime() {<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1600"></a>
 <span class="sourceLineNo">1601</span>    }<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>  }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span><a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>  // ==========================================================================<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>  //  Timeout Thread<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>  // ==========================================================================<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>  private final class TimeoutExecutorThread extends StoppableThread {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    private final DelayQueue&lt;DelayedWithTimeout&gt; queue = new DelayQueue&lt;&gt;();<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span><a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    public TimeoutExecutorThread(final ThreadGroup group) {<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>      super(group, "ProcedureTimeoutExecutor");<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>    }<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span><a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    @Override<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>    public void sendStopSignal() {<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>      queue.add(DelayedUtil.DELAYED_POISON);<a name="line.1616"></a>
+<span class="sourceLineNo">1602</span><a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    private boolean keepAlive(final long lastUpdate) {<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      if (workerThreads.size() &lt;= corePoolSize) return true;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>      return (EnvironmentEdgeManager.currentTime() - lastUpdate) &lt; keepAliveTime;<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    }<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>  }<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span><a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>  // ==========================================================================<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>  //  Timeout Thread<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>  // ==========================================================================<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>  private final class TimeoutExecutorThread extends StoppableThread {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    private final DelayQueue&lt;DelayedWithTimeout&gt; queue = new DelayQueue&lt;&gt;();<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span><a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>    public TimeoutExecutorThread(final ThreadGroup group) {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>      super(group, "ProcedureTimeoutExecutor");<a name="line.1616"></a>
 <span class="sourceLineNo">1617</span>    }<a name="line.1617"></a>
 <span class="sourceLineNo">1618</span><a name="line.1618"></a>
 <span class="sourceLineNo">1619</span>    @Override<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    public void run() {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>      final boolean isTraceEnabled = LOG.isTraceEnabled();<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      while (isRunning()) {<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>        final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>        if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>          // the executor may be shutting down,<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>          // and the task is just the shutdown request<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>          continue;<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>        }<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span><a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>        if (isTraceEnabled) {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>          LOG.trace("Trying to start the execution of " + task);<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>        }<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span><a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>        // execute the task<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>        if (task instanceof InlineChore) {<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>          execInlineChore((InlineChore)task);<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        } else if (task instanceof DelayedProcedure) {<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>          execDelayedProcedure((DelayedProcedure)task);<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>        } else {<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>          LOG.error("CODE-BUG unknown timeout task type " + task);<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>        }<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>      }<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>    }<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span><a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>    public void add(final InlineChore chore) {<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      chore.refreshTimeout();<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>      queue.add(chore);<a name="line.1647"></a>
+<span class="sourceLineNo">1620</span>    public void sendStopSignal() {<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>      queue.add(DelayedUtil.DELAYED_POISON);<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>    }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span><a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    @Override<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    public void run() {<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      final boolean isTraceEnabled = LOG.isTraceEnabled();<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      while (isRunning()) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>        final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>        if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>          // the executor may be shutting down,<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>          // and the task is just the shutdown request<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>          continue;<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>        }<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span><a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>        if (isTraceEnabled) {<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>          LOG.trace("Trying to start the execution of " + task);<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        }<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span><a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>        // execute the task<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>        if (task instanceof InlineChore) {<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          execInlineChore((InlineChore)task);<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>        } else if (task instanceof DelayedProcedure) {<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>          execDelayedProcedure((DelayedProcedure)task);<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>        } else {<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>          LOG.error("CODE-BUG unknown timeout task type " + task);<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        }<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>      }<a name="line.1647"></a>
 <span class="sourceLineNo">1648</span>    }<a name="line.1648"></a>
 <span class="sourceLineNo">1649</span><a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    public void add(final Procedure procedure) {<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>      assert procedure.getState() == ProcedureState.WAITING_TIMEOUT;<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>      queue.add(new DelayedProcedure(procedure));<a name="line.1652"></a>
+<span class="sourceLineNo">1650</span>    public void add(final InlineChore chore) {<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>      chore.refreshTimeout();<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      queue.add(chore);<a name="line.1652"></a>
 <span class="sourceLineNo">1653</span>    }<a name="line.1653"></a>
 <span class="sourceLineNo">1654</span><a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    public boolean remove(final Procedure procedure) {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      return queue.remove(new DelayedProcedure(procedure));<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    }<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    private void execInlineChore(final InlineChore chore) {<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>      chore.run();<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      add(chore);<a name="line.1661"></a>
+<span class="sourceLineNo">1655</span>    public void add(final Procedure procedure) {<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>      assert procedure.getState() == ProcedureState.WAITING_TIMEOUT;<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>      queue.add(new DelayedProcedure(procedure));<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    }<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span><a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    public boolean remove(final Procedure procedure) {<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>      return queue.remove(new DelayedProcedure(procedure));<a name="line.1661"></a>
 <span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
 <span class="sourceLineNo">1663</span><a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>    private void execDelayedProcedure(final DelayedProcedure delayed) {<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      // TODO: treat this as a normal procedure, add it to the scheduler and<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      // let one of the workers handle it.<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      // Today we consider ProcedureInMemoryChore as InlineChores<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>      final Procedure procedure = delayed.getObject();<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      if (procedure instanceof ProcedureInMemoryChore) {<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>        executeInMemoryChore((ProcedureInMemoryChore)procedure);<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>        // if the procedure is in a waiting state again, put it back in the queue<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>        procedure.updateTimestamp();<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>        if (procedure.isWaiting()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>          delayed.setTimeout(procedure.getTimeoutTimestamp());<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>          queue.add(delayed);<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>        }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      } else {<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>        executeTimedoutProcedure(procedure);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      }<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    }<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span><a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>    private void executeInMemoryChore(final ProcedureInMemoryChore chore) {<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>      if (!chore.isWaiting()) return;<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span><a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      // The ProcedureInMemoryChore is a special case, and it acts as a chore.<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      // instead of bringing the Chore class in, we reuse this timeout thread for<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>      // this special case.<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      try {<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>        chore.periodicExecute(getEnvironment());<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      } catch (Throwable e) {<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>        LOG.error("Ignoring " + chore + " exception: " + e.getMessage(), e);<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      }<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>    }<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span><a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>    private void executeTimedoutProcedure(final Procedure proc) {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>      // The procedure received a timeout. if the procedure itself does not handle it,<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>      // call abort() and add the procedure back in the queue for rollback.<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>      if (proc.setTimeoutFailure(getEnvironment())) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>        long rootProcId = Procedure.getRootProcedureId(procedures, proc);<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>        RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>        procStack.abort();<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>        store.update(proc);<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        scheduler.addFront(proc);<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>    }<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>  }<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span><a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>  private static final class DelayedProcedure<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>      extends DelayedUtil.DelayedContainerWithTimestamp&lt;Procedure&gt; {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>    public DelayedProcedure(final Procedure procedure) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>      super(procedure, procedure.getTimeoutTimestamp());<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    }<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>  }<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span><a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>  private static abstract class StoppableThread extends Thread {<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    public StoppableThread(final ThreadGroup group, final String name) {<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>      super(group, name);<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>    }<a name="line.1718"></a>
+<span class="sourceLineNo">1664</span>    private void execInlineChore(final InlineChore chore) {<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>      chore.run();<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>      add(chore);<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>    }<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span><a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>    private void execDelayedProcedure(final DelayedProcedure delayed) {<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>      // TODO: treat this as a normal procedure, add it to the scheduler and<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      // let one of the workers handle it.<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>      // Today we consider ProcedureInMemoryChore as InlineChores<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      final Procedure procedure = delayed.getObject();<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>      if (procedure instanceof ProcedureInMemoryChore) {<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>        executeInMemoryChore((ProcedureInMemoryChore)procedure);<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>        // if the procedure is in a waiting state again, put it back in the queue<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>        procedure.updateTimestamp();<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>        if (procedure.isWaiting()) {<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>          delayed.setTimeout(procedure.getTimeoutTimestamp());<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>          queue.add(delayed);<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>        }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      } else {<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>        executeTimedoutProcedure(procedure);<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      }<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>    }<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span><a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>    private void executeInMemoryChore(final ProcedureInMemoryChore chore) {<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>      if (!chore.isWaiting()) return;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span><a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>      // The ProcedureInMemoryChore is a special case, and it acts as a chore.<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>      // instead of bringing the Chore class in, we reuse this timeout thread for<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      // this special case.<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>      try {<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>        chore.periodicExecute(getEnvironment());<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>      } catch (Throwable e) {<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>        LOG.error("Ignoring " + chore + " exception: " + e.getMessage(), e);<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      }<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>    }<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span><a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>    private void executeTimedoutProcedure(final Procedure proc) {<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>      // The procedure received a timeout. if the procedure itself does not handle it,<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>      // call abort() and add the procedure back in the queue for rollback.<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>      if (proc.setTimeoutFailure(getEnvironment())) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>        long rootProcId = Procedure.getRootProcedureId(procedures, proc);<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>        RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>        procStack.abort();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>        store.update(proc);<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>        scheduler.addFront(proc);<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>      }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>    }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  }<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span><a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>  private static final class DelayedProcedure<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      extends DelayedUtil.DelayedContainerWithTimestamp&lt;Procedure&gt; {<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>    public DelayedProcedure(final Procedure procedure) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>      super(procedure, procedure.getTimeoutTimestamp());<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>    }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>  }<a name="line.1718"></a>
 <span class="sourceLineNo">1719</span><a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    public abstract void sendStopSignal();<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span><a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>    public void awaitTermination() {<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>      try {<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>        for (int i = 0; isAlive(); ++i) {<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>          sendStopSignal();<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>          join(250);<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>          if (i &gt; 0 &amp;&amp; (i % 8) == 0) {<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>            LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>              StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>          }<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>        }<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>      } catch (InterruptedException e) {<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        LOG.warn(getName() + " join wait got interrupted", e);<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>      }<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>    }<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>  }<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span><a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>  // ==========================================================================<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>  //  Inline Chores (executors internal chores)<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>  // ==========================================================================<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>  private static abstract class InlineChore extends DelayedUtil.DelayedObject implements Runnable {<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>    private long timeout;<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span><a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>    public abstract int getTimeoutInterval();<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span><a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>    protected void refreshTimeout() {<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      this.timeout = EnvironmentEdgeManager.currentTime() + getTimeoutInterval();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    @Override<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    public long getTimeout() {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      return timeout;<a name="line.1753"></a>
+<span class="sourceLineNo">1720</span>  private static abstract class StoppableThread extends Thread {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>    public StoppableThread(final ThreadGroup group, final String name) {<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>      super(group, name);<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>    }<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span><a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>    public abstract void sendStopSignal();<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span><a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>    public void awaitTermination() {<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      try {<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>        final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>        for (int i = 0; isAlive(); ++i) {<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>          sendStopSignal();<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>          join(250);<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>          if (i &gt; 0 &amp;&amp; (i % 8) == 0) {<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>            LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>              StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>          }<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>        }<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      } catch (InterruptedException e) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        LOG.warn(getName() + " join wait got interrupted", e);<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>      }<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>    }<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>  }<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span><a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>  // ==========================================================================<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>  //  Inline Chores (executors internal chores)<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>  // ==========================================================================<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>  private static abstract class InlineChore extends DelayedUtil.DelayedObject implements Runnable {<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>    private long timeout;<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>    public abstract int getTimeoutInterval();<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span><a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    protected void refreshTimeout() {<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>      this.timeout = EnvironmentEdgeManager.currentTime() + getTimeoutInterval();<a name="line.1753"></a>
 <span class="sourceLineNo">1754</span>    }<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>  }<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span><a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>  // ----------------------------------------------------------------------------<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>  // full set of procedures pending and completed to write a compacted<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>  // version of the log (in case is a log)?<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>  // will have the tracker saying everything is in the last log.<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>  // ----------------------------------------------------------------------------<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span><a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  private final class WorkerMonitor extends InlineChore {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.1768"></a>
+<span class="sourceLineNo">1755</span><a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    @Override<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>    public long getTimeout() {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      return timeout;<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>    }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>  }<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span><a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>  // ----------------------------------------------------------------------------<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>  // full set of procedures pending and completed to write a compacted<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>  // version of the log (in case is a log)?<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>  // will have the tracker saying everything is in the last log.<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>  // ----------------------------------------------------------------------------<a name="line.1768"></a>
 <span class="sourceLineNo">1769</span><a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span><a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span><a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    public WorkerMonitor() {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>      refreshConfig();<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span><a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    @Override<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>    public void run() {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      final int stuckCount = checkForStuckWorkers();<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>      checkThreadCount(stuckCount);<a name="line.1789"></a>
+<span class="sourceLineNo">1770</span>  private final class WorkerMonitor extends InlineChore {<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span><a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span><a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span><a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span><a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    public WorkerMonitor() {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      refreshConfig();<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>    }<a name="line.1789"></a>
 <span class="sourceLineNo">1790</span><a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      // refresh interval (poor man dynamic conf update)<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      refreshConfig();<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    }<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span><a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>    private int checkForStuckWorkers() {<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>      // check if any of the worker is stuck<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>      int stuckCount = 0;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>      for (WorkerThread worker: workerThreads) {<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>          continue;<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>        }<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span><a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>        // WARN the worker is stuck<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>        stuckCount++;<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>        LOG.warn("Worker stuck " + worker +<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>            " run time " + StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>      }<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>      return stuckCount;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    }<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span><a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    private void checkThreadCount(final int stuckCount) {<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>      // nothing to do if there are no runnable tasks<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) return;<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span><a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>      // add a new thread if the worker stuck percentage exceed the threshold limit<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>      // and every handler is active.<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>      final float stuckPerc = ((float)stuckCount) / workerThreads.size();<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>      if (stuckPerc &gt;= addWorkerStuckPercentage &amp;&amp;<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>          activeExecutorCount.get() == workerThreads.size()) {<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>        final WorkerThread worker = new WorkerThread(threadGroup);<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        workerThreads.add(worker);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>        worker.start();<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        LOG.debug("Added new worker thread " + worker);<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>      }<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    }<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span><a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>    private void refreshConfig() {<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>      addWorkerStuckPercentage = conf.getFloat(WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY,<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          DEFAULT_WORKER_ADD_STUCK_PERCENTAGE);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      timeoutInterval = conf.getInt(WORKER_MONITOR_INTERVAL_CONF_KEY,<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>        DEFAULT_WORKER_MONITOR_INTERVAL);<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>      stuckThreshold = conf.getInt(WORKER_STUCK_THRESHOLD_CONF_KEY,<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        DEFAULT_WORKER_STUCK_THRESHOLD);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    }<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span><a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>    @Override<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    public int getTimeoutInterval() {<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>      return timeoutInterval;<a name="line.1838"></a>
+<span class="sourceLineNo">1791</span>    @Override<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>    public void run() {<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>      final int stuckCount = checkForStuckWorkers();<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>      checkThreadCount(stuckCount);<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span><a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>      // refresh interval (poor man dynamic conf update)<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>      refreshConfig();<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    }<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span><a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>    private int checkForStuckWorkers() {<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>      // check if any of the worker is stuck<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>      int stuckCount = 0;<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>      for (WorkerThread worker: workerThreads) {<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          continue;<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>        }<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span><a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>        // WARN the worker is stuck<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>        stuckCount++;<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>        LOG.warn("Worker stuck " + worker +<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>            " run time " + StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>      }<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>      return stuckCount;<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>    }<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span><a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>    private void checkThreadCount(final int stuckCount) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>      // nothing to do if there are no runnable tasks<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) return;<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span><a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>      // ad

<TRUNCATED>

[17/18] hbase-site git commit: Published site at 59e8b8e2ba4d403d042fe4cc02f8f9f80aad67af.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 048be99..fd93aea 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
@@ -393,166 +393,166 @@ 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_frags">
 <!--   -->
 </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_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.124">m_frags</a></pre>
 </li>
 </ul>
-<a name="m_assignmentManager__IsNotDefault">
+<a name="m_frags__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_frags__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.129">m_frags__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_format">
+<a name="m_serverManager">
 <!--   -->
 </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.141">m_format</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.141">m_serverManager</a></pre>
 </li>
 </ul>
-<a name="m_format__IsNotDefault">
+<a name="m_serverManager__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.146">m_format__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.146">m_serverManager__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_servers">
+<a name="m_catalogJanitorEnabled">
 <!--   -->
 </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.158">m_servers</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_servers__IsNotDefault">
+<a name="m_catalogJanitorEnabled__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.163">m_servers__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_metaLocation">
+<a name="m_servers">
 <!--   -->
 </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.175">m_metaLocation</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.175">m_servers</a></pre>
 </li>
 </ul>
-<a name="m_metaLocation__IsNotDefault">
+<a name="m_servers__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.180">m_metaLocation__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.180">m_servers__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_deadServers">
+<a name="m_format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_deadServers</h4>
-<pre>private&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.ImplData.html#line.192">m_deadServers</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.192">m_format</a></pre>
 </li>
 </ul>
-<a name="m_deadServers__IsNotDefault">
+<a name="m_format__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_deadServers__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.197">m_deadServers__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.197">m_format__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_serverManager">
+<a name="m_deadServers">
 <!--   -->
 </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.209">m_serverManager</a></pre>
+<h4>m_deadServers</h4>
+<pre>private&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.ImplData.html#line.209">m_deadServers</a></pre>
 </li>
 </ul>
-<a name="m_serverManager__IsNotDefault">
+<a name="m_deadServers__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.214">m_serverManager__IsNotDefault</a></pre>
+<h4>m_deadServers__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.214">m_deadServers__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_catalogJanitorEnabled">
+<a name="m_assignmentManager">
 <!--   -->
 </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.226">m_catalogJanitorEnabled</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.226">m_assignmentManager</a></pre>
 </li>
 </ul>
-<a name="m_catalogJanitorEnabled__IsNotDefault">
+<a name="m_assignmentManager__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.231">m_catalogJanitorEnabled__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.231">m_assignmentManager__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_filter">
+<a name="m_metaLocation">
 <!--   -->
 </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.243">m_filter</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.243">m_metaLocation</a></pre>
 </li>
 </ul>
-<a name="m_filter__IsNotDefault">
+<a name="m_metaLocation__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <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.248">m_filter__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.248">m_metaLocation__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_frags">
+<a name="m_filter">
 <!--   -->
 </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.260">m_frags</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.260">m_filter</a></pre>
 </li>
 </ul>
-<a name="m_frags__IsNotDefault">
+<a name="m_filter__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <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.265">m_frags__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.265">m_filter__IsNotDefault</a></pre>
 </li>
 </ul>
 </li>
@@ -598,247 +598,247 @@ 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="setFrags-java.util.Map-">
 <!--   -->
 </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>setFrags</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.114">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="getAssignmentManager--">
+<a name="getFrags--">
 <!--   -->
 </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>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.120">getFrags</a>()</pre>
 </li>
 </ul>
-<a name="getAssignmentManager__IsNotDefault--">
+<a name="getFrags__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>getFrags__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.125">getFrags__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFormat-java.lang.String-">
+<a name="setServerManager-org.apache.hadoop.hbase.master.ServerManager-">
 <!--   -->
 </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.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>
+<h4>setServerManager</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.131">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="getFormat--">
+<a name="getServerManager--">
 <!--   -->
 </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.137">getFormat</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.137">getServerManager</a>()</pre>
 </li>
 </ul>
-<a name="getFormat__IsNotDefault--">
+<a name="getServerManager__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.142">getFormat__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.142">getServerManager__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setServers-java.util.List-">
+<a name="setCatalogJanitorEnabled-boolean-">
 <!--   -->
 </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.148">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>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="getServers--">
+<a name="getCatalogJanitorEnabled--">
 <!--   -->
 </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.154">getServers</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="getServers__IsNotDefault--">
+<a name="getCatalogJanitorEnabled__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.159">getServers__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="setMetaLocation-org.apache.hadoop.hbase.ServerName-">
+<a name="setServers-java.util.List-">
 <!--   -->
 </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.165">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;metaLocation)</pre>
+<h4>setServers</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.165">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="getMetaLocation--">
+<a name="getServers--">
 <!--   -->
 </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.171">getMetaLocation</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.171">getServers</a>()</pre>
 </li>
 </ul>
-<a name="getMetaLocation__IsNotDefault--">
+<a name="getServers__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.176">getMetaLocation__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.176">getServers__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setDeadServers-java.util.Set-">
+<a name="setFormat-java.lang.String-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setDeadServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.182">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;deadServers)</pre>
+<h4>setFormat</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.182">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="getDeadServers--">
+<a name="getFormat--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getDeadServers</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="../../../../../../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.188">getDeadServers</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.188">getFormat</a>()</pre>
 </li>
 </ul>
-<a name="getDeadServers__IsNotDefault--">
+<a name="getFormat__IsNotDefault--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getDeadServers__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.193">getDeadServers__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.193">getFormat__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setServerManager-org.apache.hadoop.hbase.master.ServerManager-">
+<a name="setDeadServers-java.util.Set-">
 <!--   -->
 </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.199">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>setDeadServers</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.199">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;deadServers)</pre>
 </li>
 </ul>
-<a name="getServerManager--">
+<a name="getDeadServers--">
 <!--   -->
 </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.205">getServerManager</a>()</pre>
+<h4>getDeadServers</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="../../../../../../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.205">getDeadServers</a>()</pre>
 </li>
 </ul>
-<a name="getServerManager__IsNotDefault--">
+<a name="getDeadServers__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.210">getServerManager__IsNotDefault</a>()</pre>
+<h4>getDeadServers__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.210">getDeadServers__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setCatalogJanitorEnabled-boolean-">
+<a name="setAssignmentManager-org.apache.hadoop.hbase.master.AssignmentManager-">
 <!--   -->
 </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.216">setCatalogJanitorEnabled</a>(boolean&nbsp;catalogJanitorEnabled)</pre>
+<h4>setAssignmentManager</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.216">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="getCatalogJanitorEnabled--">
+<a name="getAssignmentManager--">
 <!--   -->
 </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.222">getCatalogJanitorEnabled</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.222">getAssignmentManager</a>()</pre>
 </li>
 </ul>
-<a name="getCatalogJanitorEnabled__IsNotDefault--">
+<a name="getAssignmentManager__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.227">getCatalogJanitorEnabled__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.227">getAssignmentManager__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFilter-java.lang.String-">
+<a name="setMetaLocation-org.apache.hadoop.hbase.ServerName-">
 <!--   -->
 </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.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>
+<h4>setMetaLocation</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.233">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="getFilter--">
+<a name="getMetaLocation--">
 <!--   -->
 </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.239">getFilter</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.239">getMetaLocation</a>()</pre>
 </li>
 </ul>
-<a name="getFilter__IsNotDefault--">
+<a name="getMetaLocation__IsNotDefault--">
 <!--   -->
 </a>
 <ul class="blockList">
 <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.244">getFilter__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.244">getMetaLocation__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFrags-java.util.Map-">
+<a name="setFilter-java.lang.String-">
 <!--   -->
 </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.250">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>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>
 </li>
 </ul>
-<a name="getFrags--">
+<a name="getFilter--">
 <!--   -->
 </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.256">getFrags</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.256">getFilter</a>()</pre>
 </li>
 </ul>
-<a name="getFrags__IsNotDefault--">
+<a name="getFilter__IsNotDefault--">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <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.261">getFrags__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.261">getFilter__IsNotDefault</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 2ca6028..f425568 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
@@ -337,85 +337,85 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <!--   -->
 </a>
 <h3>Field Detail</h3>
-<a name="assignmentManager">
+<a name="frags">
 <!--   -->
 </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>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.277">frags</a></pre>
 </li>
 </ul>
-<a name="format">
+<a name="serverManager">
 <!--   -->
 </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.284">format</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.284">serverManager</a></pre>
 </li>
 </ul>
-<a name="servers">
+<a name="catalogJanitorEnabled">
 <!--   -->
 </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.291">servers</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="metaLocation">
+<a name="servers">
 <!--   -->
 </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.298">metaLocation</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.298">servers</a></pre>
 </li>
 </ul>
-<a name="deadServers">
+<a name="format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>deadServers</h4>
-<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>
+<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.305">format</a></pre>
 </li>
 </ul>
-<a name="serverManager">
+<a name="deadServers">
 <!--   -->
 </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.312">serverManager</a></pre>
+<h4>deadServers</h4>
+<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.312">deadServers</a></pre>
 </li>
 </ul>
-<a name="catalogJanitorEnabled">
+<a name="assignmentManager">
 <!--   -->
 </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.319">catalogJanitorEnabled</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.319">assignmentManager</a></pre>
 </li>
 </ul>
-<a name="filter">
+<a name="metaLocation">
 <!--   -->
 </a>
 <ul class="blockList">
 <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.326">filter</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.326">metaLocation</a></pre>
 </li>
 </ul>
-<a name="frags">
+<a name="filter">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <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.333">frags</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.333">filter</a></pre>
 </li>
 </ul>
 </li>
@@ -487,85 +487,85 @@ extends org.jamon.AbstractTemplateProxy</pre>
 </dl>
 </li>
 </ul>
-<a name="setAssignmentManager-org.apache.hadoop.hbase.master.AssignmentManager-">
+<a name="setFrags-java.util.Map-">
 <!--   -->
 </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>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.278">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="setFormat-java.lang.String-">
+<a name="setServerManager-org.apache.hadoop.hbase.master.ServerManager-">
 <!--   -->
 </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.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>
+<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.285">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="setServers-java.util.List-">
+<a name="setCatalogJanitorEnabled-boolean-">
 <!--   -->
 </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.292">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>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="setMetaLocation-org.apache.hadoop.hbase.ServerName-">
+<a name="setServers-java.util.List-">
 <!--   -->
 </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.299">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;p_metaLocation)</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.299">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="setDeadServers-java.util.Set-">
+<a name="setFormat-java.lang.String-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setDeadServers</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.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>
+<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.306">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="setDeadServers-java.util.Set-">
 <!--   -->
 </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.313">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>setDeadServers</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">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="setCatalogJanitorEnabled-boolean-">
+<a name="setAssignmentManager-org.apache.hadoop.hbase.master.AssignmentManager-">
 <!--   -->
 </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.320">setCatalogJanitorEnabled</a>(boolean&nbsp;p_catalogJanitorEnabled)</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.320">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="setFilter-java.lang.String-">
+<a name="setMetaLocation-org.apache.hadoop.hbase.ServerName-">
 <!--   -->
 </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.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>
+<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.327">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="setFrags-java.util.Map-">
+<a name="setFilter-java.lang.String-">
 <!--   -->
 </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.334">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>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>
 </li>
 </ul>
 <a name="constructImpl-java.lang.Class-">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 5697a48..9e39fcb 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
@@ -278,85 +278,85 @@ 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="frags">
 <!--   -->
 </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>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.65">frags</a></pre>
 </li>
 </ul>
-<a name="format">
+<a name="serverManager">
 <!--   -->
 </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.66">format</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.66">serverManager</a></pre>
 </li>
 </ul>
-<a name="servers">
+<a name="catalogJanitorEnabled">
 <!--   -->
 </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.67">servers</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="metaLocation">
+<a name="servers">
 <!--   -->
 </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.68">metaLocation</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.68">servers</a></pre>
 </li>
 </ul>
-<a name="deadServers">
+<a name="format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>deadServers</h4>
-<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>
+<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.69">format</a></pre>
 </li>
 </ul>
-<a name="serverManager">
+<a name="deadServers">
 <!--   -->
 </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.70">serverManager</a></pre>
+<h4>deadServers</h4>
+<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.70">deadServers</a></pre>
 </li>
 </ul>
-<a name="catalogJanitorEnabled">
+<a name="assignmentManager">
 <!--   -->
 </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.71">catalogJanitorEnabled</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.71">assignmentManager</a></pre>
 </li>
 </ul>
-<a name="filter">
+<a name="metaLocation">
 <!--   -->
 </a>
 <ul class="blockList">
 <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.72">filter</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.72">metaLocation</a></pre>
 </li>
 </ul>
-<a name="frags">
+<a name="filter">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <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.73">frags</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.73">filter</a></pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 2ce5657..45bcada 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
@@ -311,58 +311,58 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.88">m_filter__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_format">
+<a name="m_bcv">
 <!--   -->
 </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.100">m_format</a></pre>
+<h4>m_bcv</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.100">m_bcv</a></pre>
 </li>
 </ul>
-<a name="m_format__IsNotDefault">
+<a name="m_bcv__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/regionserver/RSStatusTmpl.ImplData.html#line.105">m_format__IsNotDefault</a></pre>
+<h4>m_bcv__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.105">m_bcv__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_bcv">
+<a name="m_bcn">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_bcv</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.117">m_bcv</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.117">m_bcn</a></pre>
 </li>
 </ul>
-<a name="m_bcv__IsNotDefault">
+<a name="m_bcn__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_bcv__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.122">m_bcv__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.122">m_bcn__IsNotDefault</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.134">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.134">m_format</a></pre>
 </li>
 </ul>
-<a name="m_bcn__IsNotDefault">
+<a name="m_format__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <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.139">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.139">m_format__IsNotDefault</a></pre>
 </li>
 </ul>
 </li>
@@ -435,85 +435,85 @@ 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.84">getFilter__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFormat-java.lang.String-">
+<a name="setBcv-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.90">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>setBcv</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.90">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;bcv)</pre>
 </li>
 </ul>
-<a name="getFormat--">
+<a name="getBcv--">
 <!--   -->
 </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.96">getFormat</a>()</pre>
+<h4>getBcv</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.96">getBcv</a>()</pre>
 </li>
 </ul>
-<a name="getFormat__IsNotDefault--">
+<a name="getBcv__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/regionserver/RSStatusTmpl.ImplData.html#line.101">getFormat__IsNotDefault</a>()</pre>
+<h4>getBcv__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.101">getBcv__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setBcv-java.lang.String-">
+<a name="setBcn-java.lang.String-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setBcv</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.107">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;bcv)</pre>
+<h4>setBcn</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.107">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="getBcv--">
+<a name="getBcn--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getBcv</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.113">getBcv</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.113">getBcn</a>()</pre>
 </li>
 </ul>
-<a name="getBcv__IsNotDefault--">
+<a name="getBcn__IsNotDefault--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getBcv__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.118">getBcv__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.118">getBcn__IsNotDefault</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.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>
+<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>
 </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.130">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.130">getFormat</a>()</pre>
 </li>
 </ul>
-<a name="getBcn__IsNotDefault--">
+<a name="getFormat__IsNotDefault--">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <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.135">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.135">getFormat__IsNotDefault</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 252b341..4b34fc0 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
@@ -306,31 +306,31 @@ 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.151">filter</a></pre>
 </li>
 </ul>
-<a name="format">
+<a name="bcv">
 <!--   -->
 </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/regionserver/RSStatusTmpl.html#line.158">format</a></pre>
+<h4>bcv</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.158">bcv</a></pre>
 </li>
 </ul>
-<a name="bcv">
+<a name="bcn">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>bcv</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.165">bcv</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.165">bcn</a></pre>
 </li>
 </ul>
-<a name="bcn">
+<a name="format">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <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.172">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.172">format</a></pre>
 </li>
 </ul>
 </li>
@@ -411,31 +411,31 @@ 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.152">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="setFormat-java.lang.String-">
+<a name="setBcv-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.159">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>setBcv</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.159">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="setBcv-java.lang.String-">
+<a name="setBcn-java.lang.String-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setBcv</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.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>
+<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.166">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="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.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>
+<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>
 </li>
 </ul>
 <a name="constructImpl-java.lang.Class-">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 380f04c..6bce02e 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
@@ -247,31 +247,31 @@ 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.29">filter</a></pre>
 </li>
 </ul>
-<a name="format">
+<a name="bcv">
 <!--   -->
 </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/regionserver/RSStatusTmplImpl.html#line.30">format</a></pre>
+<h4>bcv</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.30">bcv</a></pre>
 </li>
 </ul>
-<a name="bcv">
+<a name="bcn">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>bcv</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.31">bcv</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.31">bcn</a></pre>
 </li>
 </ul>
-<a name="bcn">
+<a name="format">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <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.32">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.32">format</a></pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 a72ed70..be37864 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 = "18c5ecf6ed57e80b32568ca1a1a12c7af36bab46";<a name="line.11"></a>
+<span class="sourceLineNo">011</span>  public static final String revision = "59e8b8e2ba4d403d042fe4cc02f8f9f80aad67af";<a name="line.11"></a>
 <span class="sourceLineNo">012</span>  public static final String user = "jenkins";<a name="line.12"></a>
-<span class="sourceLineNo">013</span>  public static final String date = "Fri Apr  7 23:14:17 UTC 2017";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Fri Apr  7 23:44:06 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 = "95cfb09f127c6fca33e17b7795242584";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "a01d3458f243485416ee3fc5d6411aa3";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 


[04/18] hbase-site git commit: Published site at 59e8b8e2ba4d403d042fe4cc02f8f9f80aad67af.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 d2b491b..64598c2 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
@@ -35,26 +35,26 @@
 <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 filter;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>  private final String format;<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 bcn;<a name="line.32"></a>
+<span class="sourceLineNo">030</span>  private final String bcv;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>  private final String bcn;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>  private final String format;<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.getFilter__IsNotDefault())<a name="line.35"></a>
 <span class="sourceLineNo">036</span>    {<a name="line.36"></a>
 <span class="sourceLineNo">037</span>      p_implData.setFilter("general");<a name="line.37"></a>
 <span class="sourceLineNo">038</span>    }<a name="line.38"></a>
-<span class="sourceLineNo">039</span>    if(! p_implData.getFormat__IsNotDefault())<a name="line.39"></a>
+<span class="sourceLineNo">039</span>    if(! p_implData.getBcv__IsNotDefault())<a name="line.39"></a>
 <span class="sourceLineNo">040</span>    {<a name="line.40"></a>
-<span class="sourceLineNo">041</span>      p_implData.setFormat("html");<a name="line.41"></a>
+<span class="sourceLineNo">041</span>      p_implData.setBcv("");<a name="line.41"></a>
 <span class="sourceLineNo">042</span>    }<a name="line.42"></a>
-<span class="sourceLineNo">043</span>    if(! p_implData.getBcv__IsNotDefault())<a name="line.43"></a>
+<span class="sourceLineNo">043</span>    if(! p_implData.getBcn__IsNotDefault())<a name="line.43"></a>
 <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">045</span>      p_implData.setBcn("");<a name="line.45"></a>
 <span class="sourceLineNo">046</span>    }<a name="line.46"></a>
-<span class="sourceLineNo">047</span>    if(! p_implData.getBcn__IsNotDefault())<a name="line.47"></a>
+<span class="sourceLineNo">047</span>    if(! p_implData.getFormat__IsNotDefault())<a name="line.47"></a>
 <span class="sourceLineNo">048</span>    {<a name="line.48"></a>
-<span class="sourceLineNo">049</span>      p_implData.setBcn("");<a name="line.49"></a>
+<span class="sourceLineNo">049</span>      p_implData.setFormat("html");<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>
@@ -63,9 +63,9 @@
 <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>    filter = p_implData.getFilter();<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    format = p_implData.getFormat();<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    bcv = p_implData.getBcv();<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    bcn = p_implData.getBcn();<a name="line.60"></a>
+<span class="sourceLineNo">058</span>    bcv = p_implData.getBcv();<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    bcn = p_implData.getBcn();<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    format = p_implData.getFormat();<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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-archetype-builder/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/dependencies.html b/hbase-archetypes/hbase-archetype-builder/dependencies.html
index 9f0405d..d446397 100644
--- a/hbase-archetypes/hbase-archetype-builder/dependencies.html
+++ b/hbase-archetypes/hbase-archetype-builder/dependencies.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-archetype-builder/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/dependency-convergence.html b/hbase-archetypes/hbase-archetype-builder/dependency-convergence.html
index 021edcd..a321b9c 100644
--- a/hbase-archetypes/hbase-archetype-builder/dependency-convergence.html
+++ b/hbase-archetypes/hbase-archetype-builder/dependency-convergence.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-archetype-builder/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/dependency-info.html b/hbase-archetypes/hbase-archetype-builder/dependency-info.html
index 8313501..28f2ebb 100644
--- a/hbase-archetypes/hbase-archetype-builder/dependency-info.html
+++ b/hbase-archetypes/hbase-archetype-builder/dependency-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-archetype-builder/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/dependency-management.html b/hbase-archetypes/hbase-archetype-builder/dependency-management.html
index c26feed..a69d707 100644
--- a/hbase-archetypes/hbase-archetype-builder/dependency-management.html
+++ b/hbase-archetypes/hbase-archetype-builder/dependency-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-archetype-builder/index.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/index.html b/hbase-archetypes/hbase-archetype-builder/index.html
index add7cd0..284c275 100644
--- a/hbase-archetypes/hbase-archetype-builder/index.html
+++ b/hbase-archetypes/hbase-archetype-builder/index.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-archetype-builder/integration.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/integration.html b/hbase-archetypes/hbase-archetype-builder/integration.html
index 465d2c8..4d15cde 100644
--- a/hbase-archetypes/hbase-archetype-builder/integration.html
+++ b/hbase-archetypes/hbase-archetype-builder/integration.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-archetype-builder/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/issue-tracking.html b/hbase-archetypes/hbase-archetype-builder/issue-tracking.html
index 6e80ced..e56e349 100644
--- a/hbase-archetypes/hbase-archetype-builder/issue-tracking.html
+++ b/hbase-archetypes/hbase-archetype-builder/issue-tracking.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-archetype-builder/license.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/license.html b/hbase-archetypes/hbase-archetype-builder/license.html
index e91419b..e0f18ff 100644
--- a/hbase-archetypes/hbase-archetype-builder/license.html
+++ b/hbase-archetypes/hbase-archetype-builder/license.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-archetype-builder/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/mail-lists.html b/hbase-archetypes/hbase-archetype-builder/mail-lists.html
index f071684..5bc6aa8 100644
--- a/hbase-archetypes/hbase-archetype-builder/mail-lists.html
+++ b/hbase-archetypes/hbase-archetype-builder/mail-lists.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-archetype-builder/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/plugin-management.html b/hbase-archetypes/hbase-archetype-builder/plugin-management.html
index f32541d..bfe0082 100644
--- a/hbase-archetypes/hbase-archetype-builder/plugin-management.html
+++ b/hbase-archetypes/hbase-archetype-builder/plugin-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-archetype-builder/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/plugins.html b/hbase-archetypes/hbase-archetype-builder/plugins.html
index 93e54f0..8d0d4c3 100644
--- a/hbase-archetypes/hbase-archetype-builder/plugins.html
+++ b/hbase-archetypes/hbase-archetype-builder/plugins.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-archetype-builder/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/project-info.html b/hbase-archetypes/hbase-archetype-builder/project-info.html
index dda1160..63fea89 100644
--- a/hbase-archetypes/hbase-archetype-builder/project-info.html
+++ b/hbase-archetypes/hbase-archetype-builder/project-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-archetype-builder/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/project-summary.html b/hbase-archetypes/hbase-archetype-builder/project-summary.html
index dda9fc3..27e536b 100644
--- a/hbase-archetypes/hbase-archetype-builder/project-summary.html
+++ b/hbase-archetypes/hbase-archetype-builder/project-summary.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-archetype-builder/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/source-repository.html b/hbase-archetypes/hbase-archetype-builder/source-repository.html
index 414e858..55997aa 100644
--- a/hbase-archetypes/hbase-archetype-builder/source-repository.html
+++ b/hbase-archetypes/hbase-archetype-builder/source-repository.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-archetype-builder/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/team-list.html b/hbase-archetypes/hbase-archetype-builder/team-list.html
index 0efa0e9..93720e6 100644
--- a/hbase-archetypes/hbase-archetype-builder/team-list.html
+++ b/hbase-archetypes/hbase-archetype-builder/team-list.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-client-project/checkstyle.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/checkstyle.html b/hbase-archetypes/hbase-client-project/checkstyle.html
index 9ef7ea4..a9c6156 100644
--- a/hbase-archetypes/hbase-client-project/checkstyle.html
+++ b/hbase-archetypes/hbase-client-project/checkstyle.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-client-project/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/dependencies.html b/hbase-archetypes/hbase-client-project/dependencies.html
index c772a40..20ab43d 100644
--- a/hbase-archetypes/hbase-client-project/dependencies.html
+++ b/hbase-archetypes/hbase-client-project/dependencies.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-client-project/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/dependency-convergence.html b/hbase-archetypes/hbase-client-project/dependency-convergence.html
index 7b6a754..7ca2704 100644
--- a/hbase-archetypes/hbase-client-project/dependency-convergence.html
+++ b/hbase-archetypes/hbase-client-project/dependency-convergence.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-client-project/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/dependency-info.html b/hbase-archetypes/hbase-client-project/dependency-info.html
index a5eaa9f..610d647 100644
--- a/hbase-archetypes/hbase-client-project/dependency-info.html
+++ b/hbase-archetypes/hbase-client-project/dependency-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-client-project/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/dependency-management.html b/hbase-archetypes/hbase-client-project/dependency-management.html
index 3202e75..94710fd 100644
--- a/hbase-archetypes/hbase-client-project/dependency-management.html
+++ b/hbase-archetypes/hbase-client-project/dependency-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-client-project/index.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/index.html b/hbase-archetypes/hbase-client-project/index.html
index 623d419..bed04fc 100644
--- a/hbase-archetypes/hbase-client-project/index.html
+++ b/hbase-archetypes/hbase-client-project/index.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-client-project/integration.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/integration.html b/hbase-archetypes/hbase-client-project/integration.html
index 9629a06..af01757 100644
--- a/hbase-archetypes/hbase-client-project/integration.html
+++ b/hbase-archetypes/hbase-client-project/integration.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-client-project/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/issue-tracking.html b/hbase-archetypes/hbase-client-project/issue-tracking.html
index f9d9710..b3fcbd3 100644
--- a/hbase-archetypes/hbase-client-project/issue-tracking.html
+++ b/hbase-archetypes/hbase-client-project/issue-tracking.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-client-project/license.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/license.html b/hbase-archetypes/hbase-client-project/license.html
index 63ead67..dc3adf4 100644
--- a/hbase-archetypes/hbase-client-project/license.html
+++ b/hbase-archetypes/hbase-client-project/license.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-client-project/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/mail-lists.html b/hbase-archetypes/hbase-client-project/mail-lists.html
index 28fc37e..b89fd46 100644
--- a/hbase-archetypes/hbase-client-project/mail-lists.html
+++ b/hbase-archetypes/hbase-client-project/mail-lists.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-client-project/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/plugin-management.html b/hbase-archetypes/hbase-client-project/plugin-management.html
index 235e6dc..29aafa0 100644
--- a/hbase-archetypes/hbase-client-project/plugin-management.html
+++ b/hbase-archetypes/hbase-client-project/plugin-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-client-project/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/plugins.html b/hbase-archetypes/hbase-client-project/plugins.html
index f2531ec..d84b521 100644
--- a/hbase-archetypes/hbase-client-project/plugins.html
+++ b/hbase-archetypes/hbase-client-project/plugins.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-client-project/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/project-info.html b/hbase-archetypes/hbase-client-project/project-info.html
index 03ee776..5c06e6b 100644
--- a/hbase-archetypes/hbase-client-project/project-info.html
+++ b/hbase-archetypes/hbase-client-project/project-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-client-project/project-reports.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/project-reports.html b/hbase-archetypes/hbase-client-project/project-reports.html
index 33b3862..6fc5024 100644
--- a/hbase-archetypes/hbase-client-project/project-reports.html
+++ b/hbase-archetypes/hbase-client-project/project-reports.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-client-project/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/project-summary.html b/hbase-archetypes/hbase-client-project/project-summary.html
index ee8949c..62cb94a 100644
--- a/hbase-archetypes/hbase-client-project/project-summary.html
+++ b/hbase-archetypes/hbase-client-project/project-summary.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-client-project/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/source-repository.html b/hbase-archetypes/hbase-client-project/source-repository.html
index 4bbebb2..74cc213 100644
--- a/hbase-archetypes/hbase-client-project/source-repository.html
+++ b/hbase-archetypes/hbase-client-project/source-repository.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-client-project/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/team-list.html b/hbase-archetypes/hbase-client-project/team-list.html
index e6b8783..8110dfc 100644
--- a/hbase-archetypes/hbase-client-project/team-list.html
+++ b/hbase-archetypes/hbase-client-project/team-list.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-shaded-client-project/checkstyle.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/checkstyle.html b/hbase-archetypes/hbase-shaded-client-project/checkstyle.html
index 9a2ec49..728bbcf 100644
--- a/hbase-archetypes/hbase-shaded-client-project/checkstyle.html
+++ b/hbase-archetypes/hbase-shaded-client-project/checkstyle.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-shaded-client-project/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/dependencies.html b/hbase-archetypes/hbase-shaded-client-project/dependencies.html
index ab7f5e6..5226282 100644
--- a/hbase-archetypes/hbase-shaded-client-project/dependencies.html
+++ b/hbase-archetypes/hbase-shaded-client-project/dependencies.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-shaded-client-project/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/dependency-convergence.html b/hbase-archetypes/hbase-shaded-client-project/dependency-convergence.html
index d54d242..ab09fbc 100644
--- a/hbase-archetypes/hbase-shaded-client-project/dependency-convergence.html
+++ b/hbase-archetypes/hbase-shaded-client-project/dependency-convergence.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-shaded-client-project/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/dependency-info.html b/hbase-archetypes/hbase-shaded-client-project/dependency-info.html
index 403c5c1..96f0fd9 100644
--- a/hbase-archetypes/hbase-shaded-client-project/dependency-info.html
+++ b/hbase-archetypes/hbase-shaded-client-project/dependency-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-shaded-client-project/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/dependency-management.html b/hbase-archetypes/hbase-shaded-client-project/dependency-management.html
index 86ec5f2..1352007 100644
--- a/hbase-archetypes/hbase-shaded-client-project/dependency-management.html
+++ b/hbase-archetypes/hbase-shaded-client-project/dependency-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-shaded-client-project/index.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/index.html b/hbase-archetypes/hbase-shaded-client-project/index.html
index 54203e3..0622650 100644
--- a/hbase-archetypes/hbase-shaded-client-project/index.html
+++ b/hbase-archetypes/hbase-shaded-client-project/index.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-shaded-client-project/integration.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/integration.html b/hbase-archetypes/hbase-shaded-client-project/integration.html
index 0a673bf..3ffd75d 100644
--- a/hbase-archetypes/hbase-shaded-client-project/integration.html
+++ b/hbase-archetypes/hbase-shaded-client-project/integration.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-shaded-client-project/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/issue-tracking.html b/hbase-archetypes/hbase-shaded-client-project/issue-tracking.html
index a695d4c..d72a80f 100644
--- a/hbase-archetypes/hbase-shaded-client-project/issue-tracking.html
+++ b/hbase-archetypes/hbase-shaded-client-project/issue-tracking.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-shaded-client-project/license.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/license.html b/hbase-archetypes/hbase-shaded-client-project/license.html
index 5396403..8cbb160 100644
--- a/hbase-archetypes/hbase-shaded-client-project/license.html
+++ b/hbase-archetypes/hbase-shaded-client-project/license.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-shaded-client-project/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/mail-lists.html b/hbase-archetypes/hbase-shaded-client-project/mail-lists.html
index 5a0610c..1a03091 100644
--- a/hbase-archetypes/hbase-shaded-client-project/mail-lists.html
+++ b/hbase-archetypes/hbase-shaded-client-project/mail-lists.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-shaded-client-project/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/plugin-management.html b/hbase-archetypes/hbase-shaded-client-project/plugin-management.html
index 9119384..8522d0d 100644
--- a/hbase-archetypes/hbase-shaded-client-project/plugin-management.html
+++ b/hbase-archetypes/hbase-shaded-client-project/plugin-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-shaded-client-project/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/plugins.html b/hbase-archetypes/hbase-shaded-client-project/plugins.html
index 4181d5d..f484cce 100644
--- a/hbase-archetypes/hbase-shaded-client-project/plugins.html
+++ b/hbase-archetypes/hbase-shaded-client-project/plugins.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-shaded-client-project/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/project-info.html b/hbase-archetypes/hbase-shaded-client-project/project-info.html
index 8c9c19c..e79c376 100644
--- a/hbase-archetypes/hbase-shaded-client-project/project-info.html
+++ b/hbase-archetypes/hbase-shaded-client-project/project-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-shaded-client-project/project-reports.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/project-reports.html b/hbase-archetypes/hbase-shaded-client-project/project-reports.html
index f51fc03..679c15d 100644
--- a/hbase-archetypes/hbase-shaded-client-project/project-reports.html
+++ b/hbase-archetypes/hbase-shaded-client-project/project-reports.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/hbase-archetypes/hbase-shaded-client-project/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/project-summary.html b/hbase-archetypes/hbase-shaded-client-project/project-summary.html
index cc4682a..904e5d4 100644
--- a/hbase-archetypes/hbase-shaded-client-project/project-summary.html
+++ b/hbase-archetypes/hbase-shaded-client-project/project-summary.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-07 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-04-08 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170407" />
+    <meta name="Date-Revision-yyyymmdd" content="20170408" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-04-07</span>
+        <span id="publishDate">Last Published: 2017-04-08</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>


[18/18] hbase-site git commit: Published site at 59e8b8e2ba4d403d042fe4cc02f8f9f80aad67af.

Posted by gi...@apache.org.
Published site at 59e8b8e2ba4d403d042fe4cc02f8f9f80aad67af.


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

Branch: refs/heads/asf-site
Commit: 799947ba123e79c6efc534f2d01bae45d395eff3
Parents: 6cfe104
Author: jenkins <bu...@apache.org>
Authored: Sat Apr 8 00:05:33 2017 +0000
Committer: jenkins <bu...@apache.org>
Committed: Sat Apr 8 00:05:33 2017 +0000

----------------------------------------------------------------------
 apache_hbase_reference_guide.pdf                |    4 +-
 apache_hbase_reference_guide.pdfmarks           |    4 +-
 checkstyle-aggregate.html                       |   10 +-
 devapidocs/constant-values.html                 |    6 +-
 .../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     |   14 +-
 .../tmpl/master/MasterStatusTmpl.ImplData.html  |  270 +--
 .../hbase/tmpl/master/MasterStatusTmpl.html     |  108 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |   54 +-
 .../regionserver/RSStatusTmpl.ImplData.html     |   90 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |   36 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |   18 +-
 .../org/apache/hadoop/hbase/Version.html        |    6 +-
 ...edureExecutor.CompletedProcedureCleaner.html |  889 ++++-----
 .../ProcedureExecutor.DelayedProcedure.html     |  889 ++++-----
 .../ProcedureExecutor.InlineChore.html          |  889 ++++-----
 ...edureExecutor.ProcedureExecutorListener.html |  889 ++++-----
 .../ProcedureExecutor.StoppableThread.html      |  889 ++++-----
 .../procedure2/ProcedureExecutor.Testing.html   |  889 ++++-----
 ...ProcedureExecutor.TimeoutExecutorThread.html |  889 ++++-----
 .../ProcedureExecutor.WorkerMonitor.html        |  889 ++++-----
 .../ProcedureExecutor.WorkerThread.html         |  889 ++++-----
 .../hbase/procedure2/ProcedureExecutor.html     |  889 ++++-----
 .../tmpl/master/MasterStatusTmpl.ImplData.html  |  270 +--
 .../tmpl/master/MasterStatusTmpl.Intf.html      |  270 +--
 .../hbase/tmpl/master/MasterStatusTmpl.html     |  270 +--
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |   72 +-
 .../regionserver/RSStatusTmpl.ImplData.html     |   90 +-
 .../tmpl/regionserver/RSStatusTmpl.Intf.html    |   90 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |   90 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |   24 +-
 .../hbase-archetype-builder/dependencies.html   |    6 +-
 .../dependency-convergence.html                 |    6 +-
 .../dependency-info.html                        |    6 +-
 .../dependency-management.html                  |    6 +-
 .../hbase-archetype-builder/index.html          |    6 +-
 .../hbase-archetype-builder/integration.html    |    6 +-
 .../hbase-archetype-builder/issue-tracking.html |    6 +-
 .../hbase-archetype-builder/license.html        |    6 +-
 .../hbase-archetype-builder/mail-lists.html     |    6 +-
 .../plugin-management.html                      |    6 +-
 .../hbase-archetype-builder/plugins.html        |    6 +-
 .../hbase-archetype-builder/project-info.html   |    6 +-
 .../project-summary.html                        |    6 +-
 .../source-repository.html                      |    6 +-
 .../hbase-archetype-builder/team-list.html      |    6 +-
 .../hbase-client-project/checkstyle.html        |    6 +-
 .../hbase-client-project/dependencies.html      |    6 +-
 .../dependency-convergence.html                 |    6 +-
 .../hbase-client-project/dependency-info.html   |    6 +-
 .../dependency-management.html                  |    6 +-
 .../hbase-client-project/index.html             |    6 +-
 .../hbase-client-project/integration.html       |    6 +-
 .../hbase-client-project/issue-tracking.html    |    6 +-
 .../hbase-client-project/license.html           |    6 +-
 .../hbase-client-project/mail-lists.html        |    6 +-
 .../hbase-client-project/plugin-management.html |    6 +-
 .../hbase-client-project/plugins.html           |    6 +-
 .../hbase-client-project/project-info.html      |    6 +-
 .../hbase-client-project/project-reports.html   |    6 +-
 .../hbase-client-project/project-summary.html   |    6 +-
 .../hbase-client-project/source-repository.html |    6 +-
 .../hbase-client-project/team-list.html         |    6 +-
 .../hbase-shaded-client-project/checkstyle.html |    6 +-
 .../dependencies.html                           |    6 +-
 .../dependency-convergence.html                 |    6 +-
 .../dependency-info.html                        |    6 +-
 .../dependency-management.html                  |    6 +-
 .../hbase-shaded-client-project/index.html      |    6 +-
 .../integration.html                            |    6 +-
 .../issue-tracking.html                         |    6 +-
 .../hbase-shaded-client-project/license.html    |    6 +-
 .../hbase-shaded-client-project/mail-lists.html |    6 +-
 .../plugin-management.html                      |    6 +-
 .../hbase-shaded-client-project/plugins.html    |    6 +-
 .../project-info.html                           |    6 +-
 .../project-reports.html                        |    6 +-
 .../project-summary.html                        |    6 +-
 .../source-repository.html                      |    6 +-
 .../hbase-shaded-client-project/team-list.html  |    6 +-
 testdevapidocs/index-all.html                   |    4 +-
 ...erPerformanceEvaluation.RegionProcedure.html |    2 +-
 ...lerPerformanceEvaluation.TableProcedure.html |    2 +-
 ...ocedureScheduler.TestNamespaceProcedure.html |    2 +-
 ...rProcedureScheduler.TestRegionProcedure.html |    2 +-
 ...erProcedureScheduler.TestTableProcedure.html |    2 +-
 ...reScheduler.TestTableProcedureWithEvent.html |    2 +-
 .../ProcedureTestingUtility.TestProcedure.html  |    8 +-
 ...eUtil.TestProcedureNoDefaultConstructor.html |    2 +-
 ...LProcedureStore.TestSequentialProcedure.html |   16 +-
 .../store/wal/TestWALProcedureStore.html        |   86 +-
 .../ProcedureTestingUtility.LoadCounter.html    |    2 +-
 .../ProcedureTestingUtility.NoopProcedure.html  |    2 +-
 .../ProcedureTestingUtility.TestProcedure.html  |    2 +-
 .../procedure2/ProcedureTestingUtility.html     |    2 +-
 ...LProcedureStore.TestSequentialProcedure.html | 1807 +++++++++---------
 .../store/wal/TestWALProcedureStore.html        | 1807 +++++++++---------
 102 files changed, 7436 insertions(+), 7388 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index c85ef93..33caada 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:20170407232236+00'00')
-/ModDate (D:20170407232236+00'00')
+/CreationDate (D:20170407235230+00'00')
+/ModDate (D:20170407235230+00'00')
 >>
 endobj
 2 0 obj

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/apache_hbase_reference_guide.pdfmarks
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdfmarks b/apache_hbase_reference_guide.pdfmarks
index de9f175..42eafee 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:20170407232401)
-  /CreationDate (D:20170407232401)
+  /ModDate (D:20170407235357)
+  /CreationDate (D:20170407235357)
   /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/799947ba/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index d1876e6..31c4e5d 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -51583,31 +51583,31 @@
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1377</td></tr>
+<td>1385</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>1572</td></tr>
+<td>1577</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>1599</td></tr>
+<td>1604</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>1683</td></tr>
+<td>1688</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>
+<td>1818</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">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 8eee2e7..9e259c3 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>"Fri Apr  7 23:14:17 UTC 2017"</code></td>
+<td class="colLast"><code>"Fri Apr  7 23:44:06 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>"18c5ecf6ed57e80b32568ca1a1a12c7af36bab46"</code></td>
+<td class="colLast"><code>"59e8b8e2ba4d403d042fe4cc02f8f9f80aad67af"</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>"95cfb09f127c6fca33e17b7795242584"</code></td>
+<td class="colLast"><code>"a01d3458f243485416ee3fc5d6411aa3"</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/799947ba/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 86ffeb0..3230e8b 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.1708">ProcedureExecutor.DelayedProcedure</a>
+<pre>private static final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1713">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.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>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.DelayedProcedure.html#line.1715">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/799947ba/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 c0f5943..2cf686b 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.1742">ProcedureExecutor.InlineChore</a>
+<pre>private abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1747">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.1743">timeout</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html#line.1748">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.1742">InlineChore</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html#line.1747">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.1745">getTimeoutInterval</a>()</pre>
+<pre>public abstract&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html#line.1750">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.1747">refreshTimeout</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html#line.1752">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.1752">getTimeout</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html#line.1757">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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 b119ecc..7b7fb58 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.1715">ProcedureExecutor.StoppableThread</a>
+<pre>private abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1720">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.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,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html#line.1721">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.1720">sendStopSignal</a>()</pre>
+<pre>public abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html#line.1725">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.1722">awaitTermination</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html#line.1727">awaitTermination</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 0bb19cf..55bebbf 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.1607">ProcedureExecutor.TimeoutExecutorThread</a>
+<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1612">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.1608">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.1613">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.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>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1615">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.1615">sendStopSignal</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1620">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.1620">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1625">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.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>
+<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/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.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>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1655">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.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>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1660">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.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>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1664">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.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>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1669">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.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>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1687">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.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>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1700">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/799947ba/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 2f28a93..e92db8c 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.1765">ProcedureExecutor.WorkerMonitor</a>
+<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1770">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.1766">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.1771">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.1768">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.1773">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.1770">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.1775">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.1772">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.1777">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.1774">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.1779">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.1776">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.1781">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.1778">addWorkerStuckPercentage</a></pre>
+<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1783">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.1779">timeoutInterval</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1784">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.1780">stuckThreshold</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1785">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.1782">WorkerMonitor</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1787">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.1787">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1792">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.1795">checkForStuckWorkers</a>()</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1800">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.1811">checkThreadCount</a>(int&nbsp;stuckCount)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1816">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.1827">refreshConfig</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1832">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.1837">getTimeoutInterval</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1842">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/799947ba/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 779d23c..559cec9 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.1554">ProcedureExecutor.WorkerThread</a>
+<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1559">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.1555">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.1560">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.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>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1562">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.1562">sendStopSignal</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1567">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.1567">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1572">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.1594">getCurrentRunTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1599">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.1598">keepAlive</a>(long&nbsp;lastUpdate)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1603">keepAlive</a>(long&nbsp;lastUpdate)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 01d5913..87e1cbb 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
@@ -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.1403">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.1408">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.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>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1444">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.1448">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.1453">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.1472">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.1477">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.1500">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.1505">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.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>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1517">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.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>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html#line.1530">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>


[11/18] hbase-site git commit: Published site at 59e8b8e2ba4d403d042fe4cc02f8f9f80aad67af.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 b6b4cb6..a1495ff 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
@@ -1381,472 +1381,477 @@
 <span class="sourceLineNo">1373</span>        return;<a name="line.1373"></a>
 <span class="sourceLineNo">1374</span>      }<a name="line.1374"></a>
 <span class="sourceLineNo">1375</span><a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      // if the store is not running we are aborting<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      if (!store.isRunning()) return;<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span><a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>      // Commit the transaction<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span><a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>        scheduler.yield(procedure);<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        return;<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>      }<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span><a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>    } while (reExecute);<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span><a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>    // Submit the new subprocedures<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>      submitChildrenProcedures(subprocs);<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    }<a name="line.1395"></a>
+<span class="sourceLineNo">1376</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>      // Commit the transaction<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span><a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>      // if the store is not running we are aborting<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>      if (!store.isRunning()) return;<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span><a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>        scheduler.yield(procedure);<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        return;<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span><a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    } while (reExecute);<a name="line.1395"></a>
 <span class="sourceLineNo">1396</span><a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>    // if the procedure is complete and has a parent, count down the children latch<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>    if (procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      countDownChildren(procStack, procedure);<a name="line.1399"></a>
+<span class="sourceLineNo">1397</span>    // Submit the new subprocedures<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>      submitChildrenProcedures(subprocs);<a name="line.1399"></a>
 <span class="sourceLineNo">1400</span>    }<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>  }<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span><a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>  private Procedure[] initializeChildren(final RootProcedureState procStack,<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>    assert subprocs != null : "expected subprocedures";<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      final Procedure subproc = subprocs[i];<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>      if (subproc == null) {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>          new IllegalArgumentIOException(msg)));<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>        return null;<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>      }<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span><a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>      subproc.setRootProcId(rootProcId);<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>      subproc.setProcId(nextProcId());<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>      procStack.addSubProcedure(subproc);<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>    }<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span><a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>    if (!procedure.isFailed()) {<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>      switch (procedure.getState()) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>        case RUNNABLE:<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>          break;<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        case WAITING_TIMEOUT:<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>          timeoutExecutor.add(procedure);<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>          break;<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>        default:<a name="line.1432"></a>
+<span class="sourceLineNo">1401</span><a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>    // if the procedure is complete and has a parent, count down the children latch<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>    if (procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>      countDownChildren(procStack, procedure);<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>    }<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>  }<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span><a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>  private Procedure[] initializeChildren(final RootProcedureState procStack,<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>    assert subprocs != null : "expected subprocedures";<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>      final Procedure subproc = subprocs[i];<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>      if (subproc == null) {<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>          new IllegalArgumentIOException(msg)));<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>        return null;<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>      }<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span><a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>      subproc.setRootProcId(rootProcId);<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>      subproc.setProcId(nextProcId());<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>      procStack.addSubProcedure(subproc);<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span><a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>    if (!procedure.isFailed()) {<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      switch (procedure.getState()) {<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>        case RUNNABLE:<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1432"></a>
 <span class="sourceLineNo">1433</span>          break;<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>      }<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>    }<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>    return subprocs;<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>  }<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span><a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>  private void submitChildrenProcedures(final Procedure[] subprocs) {<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      final Procedure subproc = subprocs[i];<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      scheduler.addFront(subproc);<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>    }<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>  }<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span><a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>  private void countDownChildren(final RootProcedureState procStack, final Procedure procedure) {<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>    final Procedure parent = procedures.get(procedure.getParentProcId());<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>    if (parent == null) {<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      assert procStack.isRollingback();<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      return;<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>    }<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span><a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>    // If this procedure is the last child awake the parent procedure<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>    if (traceEnabled) {<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      LOG.trace(parent + " child is done: " + procedure);<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>    }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span><a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    if (parent.childrenCountDown() &amp;&amp; parent.getState() == ProcedureState.WAITING) {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>      parent.setState(ProcedureState.RUNNABLE);<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>      store.update(parent);<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>      scheduler.addFront(parent);<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>      if (traceEnabled) {<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>        LOG.trace(parent + " all the children finished their work, resume.");<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>      }<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>      return;<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>  }<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span><a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>  private void updateStoreOnExec(final RootProcedureState procStack,<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      if (LOG.isTraceEnabled()) {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>      }<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      store.insert(procedure, subprocs);<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    } else {<a name="line.1479"></a>
+<span class="sourceLineNo">1434</span>        case WAITING_TIMEOUT:<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>          timeoutExecutor.add(procedure);<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>          break;<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>        default:<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>          break;<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>      }<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>    }<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>    return subprocs;<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>  }<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span><a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>  private void submitChildrenProcedures(final Procedure[] subprocs) {<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>      final Procedure subproc = subprocs[i];<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>      scheduler.addFront(subproc);<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>    }<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>  }<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span><a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>  private void countDownChildren(final RootProcedureState procStack, final Procedure procedure) {<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>    final Procedure parent = procedures.get(procedure.getParentProcId());<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>    if (parent == null) {<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>      assert procStack.isRollingback();<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>      return;<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>    }<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span><a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    // If this procedure is the last child awake the parent procedure<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>    if (traceEnabled) {<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>      LOG.trace(parent + " child is done: " + procedure);<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>    }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span><a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>    if (parent.childrenCountDown() &amp;&amp; parent.getState() == ProcedureState.WAITING) {<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>      parent.setState(ProcedureState.RUNNABLE);<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>      store.update(parent);<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>      scheduler.addFront(parent);<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>      if (traceEnabled) {<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>        LOG.trace(parent + " all the children finished their work, resume.");<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>      }<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>      return;<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>    }<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>  }<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span><a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>  private void updateStoreOnExec(final RootProcedureState procStack,<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1479"></a>
 <span class="sourceLineNo">1480</span>      if (LOG.isTraceEnabled()) {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>        LOG.trace("Store update " + procedure);<a name="line.1481"></a>
+<span class="sourceLineNo">1481</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1481"></a>
 <span class="sourceLineNo">1482</span>      }<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>        // remove child procedures<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>        if (childProcIds != null) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>          store.delete(procedure, childProcIds);<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>            procedures.remove(childProcIds[i]);<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>          }<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>        } else {<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          store.update(procedure);<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>        }<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>      } else {<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>        store.update(procedure);<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>      }<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>    }<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>  }<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span><a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  private void handleInterruptedException(final Procedure proc, final InterruptedException e) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>    if (LOG.isTraceEnabled()) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>      LOG.trace("Interrupt during " + proc + ". suspend and retry it later.", e);<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>    }<a name="line.1503"></a>
+<span class="sourceLineNo">1483</span>      store.insert(procedure, subprocs);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>    } else {<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>      if (LOG.isTraceEnabled()) {<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>        LOG.trace("Store update " + procedure);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      }<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>        // remove child procedures<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>        if (childProcIds != null) {<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>          store.delete(procedure, childProcIds);<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>            procedures.remove(childProcIds[i]);<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>          }<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>        } else {<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>          store.update(procedure);<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        }<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>      } else {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>        store.update(procedure);<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>      }<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>    }<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>  }<a name="line.1503"></a>
 <span class="sourceLineNo">1504</span><a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>    // and the executor/store will be stopped.<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>  }<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span><a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>  private void execCompletionCleanup(final Procedure proc) {<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    final TEnvironment env = getEnvironment();<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    if (proc.holdLock(env) &amp;&amp; proc.hasLock(env)) {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      releaseLock(proc, true);<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>    }<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>    try {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>      proc.completionCleanup(env);<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>    } catch (Throwable e) {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>    }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>  }<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span><a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>  private void procedureFinished(final Procedure proc) {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    // call the procedure completion cleanup handler<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    execCompletionCleanup(proc);<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span><a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>    // update the executor internal state maps<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>    final ProcedureInfo procInfo = ProcedureUtil.convertToProcedureInfo(proc, proc.getNonceKey());<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>      procInfo.setClientAckTime(0);<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>    }<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>    completed.put(procInfo.getProcId(), procInfo);<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>    rollbackStack.remove(proc.getProcId());<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>    procedures.remove(proc.getProcId());<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>    // call the runnableSet completion cleanup handler<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>    try {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      scheduler.completionCleanup(proc);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>    } catch (Throwable e) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: " + proc, e);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>    }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span><a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    // Notify the listeners<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>  }<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span><a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>  // ==========================================================================<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>  //  Worker Thread<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>  // ==========================================================================<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>  private final class WorkerThread extends StoppableThread {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span><a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>    public WorkerThread(final ThreadGroup group) {<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      super(group, "ProcExecWorker-" + workerId.incrementAndGet());<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>    }<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span><a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>    @Override<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>    public void sendStopSignal() {<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      scheduler.signalAll();<a name="line.1563"></a>
+<span class="sourceLineNo">1505</span>  private void handleInterruptedException(final Procedure proc, final InterruptedException e) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>    if (LOG.isTraceEnabled()) {<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>      LOG.trace("Interrupt during " + proc + ". suspend and retry it later.", e);<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>    }<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span><a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>    // and the executor/store will be stopped.<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>  }<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span><a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>  private void execCompletionCleanup(final Procedure proc) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    final TEnvironment env = getEnvironment();<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    if (proc.holdLock(env) &amp;&amp; proc.hasLock(env)) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>      releaseLock(proc, true);<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>    }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>    try {<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      proc.completionCleanup(env);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>    } catch (Throwable e) {<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>    }<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>  }<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span><a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>  private void procedureFinished(final Procedure proc) {<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    // call the procedure completion cleanup handler<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    execCompletionCleanup(proc);<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span><a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>    // update the executor internal state maps<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>    final ProcedureInfo procInfo = ProcedureUtil.convertToProcedureInfo(proc, proc.getNonceKey());<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      procInfo.setClientAckTime(0);<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>    }<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span><a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>    completed.put(procInfo.getProcId(), procInfo);<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    rollbackStack.remove(proc.getProcId());<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>    procedures.remove(proc.getProcId());<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span><a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>    // call the runnableSet completion cleanup handler<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>    try {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>      scheduler.completionCleanup(proc);<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>    } catch (Throwable e) {<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: " + proc, e);<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>    }<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span><a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>    // Notify the listeners<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>  }<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span><a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>  // ==========================================================================<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>  //  Worker Thread<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>  // ==========================================================================<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>  private final class WorkerThread extends StoppableThread {<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span><a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    public WorkerThread(final ThreadGroup group) {<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>      super(group, "ProcExecWorker-" + workerId.incrementAndGet());<a name="line.1563"></a>
 <span class="sourceLineNo">1564</span>    }<a name="line.1564"></a>
 <span class="sourceLineNo">1565</span><a name="line.1565"></a>
 <span class="sourceLineNo">1566</span>    @Override<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    public void run() {<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>        final Procedure procedure = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>        if (procedure == null) continue;<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span><a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>        store.setRunningProcedureCount(activeExecutorCount.incrementAndGet());<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>        executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        try {<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          if (traceEnabled) {<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>            LOG.trace("Trying to start the execution of " + procedure);<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>          }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>          executeProcedure(procedure);<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>        } finally {<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>          store.setRunningProcedureCount(activeExecutorCount.decrementAndGet());<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>          lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>          executionStartTime.set(Long.MAX_VALUE);<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>        }<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      }<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      LOG.debug("Worker thread terminated " + this);<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>      workerThreads.remove(this);<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>    }<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span><a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>    /**<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>     * @return the time since the current procedure is running<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>     */<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    public long getCurrentRunTime() {<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    }<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span><a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    private boolean keepAlive(final long lastUpdate) {<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>      if (workerThreads.size() &lt;= corePoolSize) return true;<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      return (EnvironmentEdgeManager.currentTime() - lastUpdate) &lt; keepAliveTime;<a name="line.1600"></a>
+<span class="sourceLineNo">1567</span>    public void sendStopSignal() {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>      scheduler.signalAll();<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>    }<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span><a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    @Override<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>    public void run() {<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>        final Procedure procedure = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>        if (procedure == null) continue;<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span><a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>        store.setRunningProcedureCount(activeExecutorCount.incrementAndGet());<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>        executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>        try {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>          if (traceEnabled) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>            LOG.trace("Trying to start the execution of " + procedure);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>          }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>          executeProcedure(procedure);<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>        } finally {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          store.setRunningProcedureCount(activeExecutorCount.decrementAndGet());<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>          lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>          executionStartTime.set(Long.MAX_VALUE);<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>        }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      }<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      LOG.debug("Worker thread terminated " + this);<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      workerThreads.remove(this);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>    }<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span><a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>    /**<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>     * @return the time since the current procedure is running<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>     */<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    public long getCurrentRunTime() {<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1600"></a>
 <span class="sourceLineNo">1601</span>    }<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>  }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span><a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>  // ==========================================================================<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>  //  Timeout Thread<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>  // ==========================================================================<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>  private final class TimeoutExecutorThread extends StoppableThread {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    private final DelayQueue&lt;DelayedWithTimeout&gt; queue = new DelayQueue&lt;&gt;();<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span><a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    public TimeoutExecutorThread(final ThreadGroup group) {<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>      super(group, "ProcedureTimeoutExecutor");<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>    }<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span><a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    @Override<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>    public void sendStopSignal() {<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>      queue.add(DelayedUtil.DELAYED_POISON);<a name="line.1616"></a>
+<span class="sourceLineNo">1602</span><a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    private boolean keepAlive(final long lastUpdate) {<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      if (workerThreads.size() &lt;= corePoolSize) return true;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>      return (EnvironmentEdgeManager.currentTime() - lastUpdate) &lt; keepAliveTime;<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    }<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>  }<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span><a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>  // ==========================================================================<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>  //  Timeout Thread<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>  // ==========================================================================<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>  private final class TimeoutExecutorThread extends StoppableThread {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    private final DelayQueue&lt;DelayedWithTimeout&gt; queue = new DelayQueue&lt;&gt;();<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span><a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>    public TimeoutExecutorThread(final ThreadGroup group) {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>      super(group, "ProcedureTimeoutExecutor");<a name="line.1616"></a>
 <span class="sourceLineNo">1617</span>    }<a name="line.1617"></a>
 <span class="sourceLineNo">1618</span><a name="line.1618"></a>
 <span class="sourceLineNo">1619</span>    @Override<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    public void run() {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>      final boolean isTraceEnabled = LOG.isTraceEnabled();<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      while (isRunning()) {<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>        final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>        if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>          // the executor may be shutting down,<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>          // and the task is just the shutdown request<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>          continue;<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>        }<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span><a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>        if (isTraceEnabled) {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>          LOG.trace("Trying to start the execution of " + task);<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>        }<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span><a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>        // execute the task<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>        if (task instanceof InlineChore) {<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>          execInlineChore((InlineChore)task);<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        } else if (task instanceof DelayedProcedure) {<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>          execDelayedProcedure((DelayedProcedure)task);<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>        } else {<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>          LOG.error("CODE-BUG unknown timeout task type " + task);<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>        }<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>      }<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>    }<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span><a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>    public void add(final InlineChore chore) {<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      chore.refreshTimeout();<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>      queue.add(chore);<a name="line.1647"></a>
+<span class="sourceLineNo">1620</span>    public void sendStopSignal() {<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>      queue.add(DelayedUtil.DELAYED_POISON);<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>    }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span><a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    @Override<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    public void run() {<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      final boolean isTraceEnabled = LOG.isTraceEnabled();<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      while (isRunning()) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>        final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>        if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>          // the executor may be shutting down,<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>          // and the task is just the shutdown request<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>          continue;<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>        }<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span><a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>        if (isTraceEnabled) {<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>          LOG.trace("Trying to start the execution of " + task);<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        }<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span><a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>        // execute the task<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>        if (task instanceof InlineChore) {<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          execInlineChore((InlineChore)task);<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>        } else if (task instanceof DelayedProcedure) {<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>          execDelayedProcedure((DelayedProcedure)task);<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>        } else {<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>          LOG.error("CODE-BUG unknown timeout task type " + task);<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        }<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>      }<a name="line.1647"></a>
 <span class="sourceLineNo">1648</span>    }<a name="line.1648"></a>
 <span class="sourceLineNo">1649</span><a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    public void add(final Procedure procedure) {<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>      assert procedure.getState() == ProcedureState.WAITING_TIMEOUT;<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>      queue.add(new DelayedProcedure(procedure));<a name="line.1652"></a>
+<span class="sourceLineNo">1650</span>    public void add(final InlineChore chore) {<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>      chore.refreshTimeout();<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      queue.add(chore);<a name="line.1652"></a>
 <span class="sourceLineNo">1653</span>    }<a name="line.1653"></a>
 <span class="sourceLineNo">1654</span><a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    public boolean remove(final Procedure procedure) {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      return queue.remove(new DelayedProcedure(procedure));<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    }<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    private void execInlineChore(final InlineChore chore) {<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>      chore.run();<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      add(chore);<a name="line.1661"></a>
+<span class="sourceLineNo">1655</span>    public void add(final Procedure procedure) {<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>      assert procedure.getState() == ProcedureState.WAITING_TIMEOUT;<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>      queue.add(new DelayedProcedure(procedure));<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    }<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span><a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    public boolean remove(final Procedure procedure) {<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>      return queue.remove(new DelayedProcedure(procedure));<a name="line.1661"></a>
 <span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
 <span class="sourceLineNo">1663</span><a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>    private void execDelayedProcedure(final DelayedProcedure delayed) {<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      // TODO: treat this as a normal procedure, add it to the scheduler and<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      // let one of the workers handle it.<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      // Today we consider ProcedureInMemoryChore as InlineChores<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>      final Procedure procedure = delayed.getObject();<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      if (procedure instanceof ProcedureInMemoryChore) {<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>        executeInMemoryChore((ProcedureInMemoryChore)procedure);<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>        // if the procedure is in a waiting state again, put it back in the queue<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>        procedure.updateTimestamp();<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>        if (procedure.isWaiting()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>          delayed.setTimeout(procedure.getTimeoutTimestamp());<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>          queue.add(delayed);<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>        }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      } else {<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>        executeTimedoutProcedure(procedure);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      }<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    }<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span><a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>    private void executeInMemoryChore(final ProcedureInMemoryChore chore) {<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>      if (!chore.isWaiting()) return;<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span><a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      // The ProcedureInMemoryChore is a special case, and it acts as a chore.<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      // instead of bringing the Chore class in, we reuse this timeout thread for<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>      // this special case.<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      try {<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>        chore.periodicExecute(getEnvironment());<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      } catch (Throwable e) {<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>        LOG.error("Ignoring " + chore + " exception: " + e.getMessage(), e);<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      }<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>    }<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span><a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>    private void executeTimedoutProcedure(final Procedure proc) {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>      // The procedure received a timeout. if the procedure itself does not handle it,<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>      // call abort() and add the procedure back in the queue for rollback.<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>      if (proc.setTimeoutFailure(getEnvironment())) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>        long rootProcId = Procedure.getRootProcedureId(procedures, proc);<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>        RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>        procStack.abort();<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>        store.update(proc);<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        scheduler.addFront(proc);<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>    }<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>  }<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span><a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>  private static final class DelayedProcedure<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>      extends DelayedUtil.DelayedContainerWithTimestamp&lt;Procedure&gt; {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>    public DelayedProcedure(final Procedure procedure) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>      super(procedure, procedure.getTimeoutTimestamp());<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    }<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>  }<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span><a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>  private static abstract class StoppableThread extends Thread {<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    public StoppableThread(final ThreadGroup group, final String name) {<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>      super(group, name);<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>    }<a name="line.1718"></a>
+<span class="sourceLineNo">1664</span>    private void execInlineChore(final InlineChore chore) {<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>      chore.run();<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>      add(chore);<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>    }<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span><a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>    private void execDelayedProcedure(final DelayedProcedure delayed) {<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>      // TODO: treat this as a normal procedure, add it to the scheduler and<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      // let one of the workers handle it.<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>      // Today we consider ProcedureInMemoryChore as InlineChores<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      final Procedure procedure = delayed.getObject();<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>      if (procedure instanceof ProcedureInMemoryChore) {<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>        executeInMemoryChore((ProcedureInMemoryChore)procedure);<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>        // if the procedure is in a waiting state again, put it back in the queue<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>        procedure.updateTimestamp();<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>        if (procedure.isWaiting()) {<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>          delayed.setTimeout(procedure.getTimeoutTimestamp());<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>          queue.add(delayed);<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>        }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      } else {<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>        executeTimedoutProcedure(procedure);<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      }<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>    }<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span><a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>    private void executeInMemoryChore(final ProcedureInMemoryChore chore) {<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>      if (!chore.isWaiting()) return;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span><a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>      // The ProcedureInMemoryChore is a special case, and it acts as a chore.<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>      // instead of bringing the Chore class in, we reuse this timeout thread for<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      // this special case.<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>      try {<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>        chore.periodicExecute(getEnvironment());<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>      } catch (Throwable e) {<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>        LOG.error("Ignoring " + chore + " exception: " + e.getMessage(), e);<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      }<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>    }<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span><a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>    private void executeTimedoutProcedure(final Procedure proc) {<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>      // The procedure received a timeout. if the procedure itself does not handle it,<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>      // call abort() and add the procedure back in the queue for rollback.<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>      if (proc.setTimeoutFailure(getEnvironment())) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>        long rootProcId = Procedure.getRootProcedureId(procedures, proc);<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>        RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>        procStack.abort();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>        store.update(proc);<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>        scheduler.addFront(proc);<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>      }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>    }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  }<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span><a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>  private static final class DelayedProcedure<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      extends DelayedUtil.DelayedContainerWithTimestamp&lt;Procedure&gt; {<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>    public DelayedProcedure(final Procedure procedure) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>      super(procedure, procedure.getTimeoutTimestamp());<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>    }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>  }<a name="line.1718"></a>
 <span class="sourceLineNo">1719</span><a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    public abstract void sendStopSignal();<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span><a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>    public void awaitTermination() {<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>      try {<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>        for (int i = 0; isAlive(); ++i) {<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>          sendStopSignal();<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>          join(250);<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>          if (i &gt; 0 &amp;&amp; (i % 8) == 0) {<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>            LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>              StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>          }<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>        }<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>      } catch (InterruptedException e) {<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        LOG.warn(getName() + " join wait got interrupted", e);<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>      }<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>    }<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>  }<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span><a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>  // ==========================================================================<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>  //  Inline Chores (executors internal chores)<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>  // ==========================================================================<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>  private static abstract class InlineChore extends DelayedUtil.DelayedObject implements Runnable {<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>    private long timeout;<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span><a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>    public abstract int getTimeoutInterval();<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span><a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>    protected void refreshTimeout() {<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      this.timeout = EnvironmentEdgeManager.currentTime() + getTimeoutInterval();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    @Override<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    public long getTimeout() {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      return timeout;<a name="line.1753"></a>
+<span class="sourceLineNo">1720</span>  private static abstract class StoppableThread extends Thread {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>    public StoppableThread(final ThreadGroup group, final String name) {<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>      super(group, name);<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>    }<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span><a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>    public abstract void sendStopSignal();<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span><a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>    public void awaitTermination() {<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      try {<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>        final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>        for (int i = 0; isAlive(); ++i) {<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>          sendStopSignal();<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>          join(250);<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>          if (i &gt; 0 &amp;&amp; (i % 8) == 0) {<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>            LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>              StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>          }<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>        }<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      } catch (InterruptedException e) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        LOG.warn(getName() + " join wait got interrupted", e);<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>      }<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>    }<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>  }<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span><a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>  // ==========================================================================<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>  //  Inline Chores (executors internal chores)<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>  // ==========================================================================<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>  private static abstract class InlineChore extends DelayedUtil.DelayedObject implements Runnable {<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>    private long timeout;<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>    public abstract int getTimeoutInterval();<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span><a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    protected void refreshTimeout() {<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>      this.timeout = EnvironmentEdgeManager.currentTime() + getTimeoutInterval();<a name="line.1753"></a>
 <span class="sourceLineNo">1754</span>    }<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>  }<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span><a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>  // ----------------------------------------------------------------------------<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>  // full set of procedures pending and completed to write a compacted<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>  // version of the log (in case is a log)?<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>  // will have the tracker saying everything is in the last log.<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>  // ----------------------------------------------------------------------------<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span><a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  private final class WorkerMonitor extends InlineChore {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.1768"></a>
+<span class="sourceLineNo">1755</span><a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    @Override<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>    public long getTimeout() {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      return timeout;<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>    }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>  }<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span><a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>  // ----------------------------------------------------------------------------<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>  // full set of procedures pending and completed to write a compacted<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>  // version of the log (in case is a log)?<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>  // will have the tracker saying everything is in the last log.<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>  // ----------------------------------------------------------------------------<a name="line.1768"></a>
 <span class="sourceLineNo">1769</span><a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span><a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span><a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    public WorkerMonitor() {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>      refreshConfig();<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span><a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    @Override<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>    public void run() {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      final int stuckCount = checkForStuckWorkers();<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>      checkThreadCount(stuckCount);<a name="line.1789"></a>
+<span class="sourceLineNo">1770</span>  private final class WorkerMonitor extends InlineChore {<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span><a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span><a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span><a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span><a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    public WorkerMonitor() {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      refreshConfig();<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>    }<a name="line.1789"></a>
 <span class="sourceLineNo">1790</span><a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      // refresh interval (poor man dynamic conf update)<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      refreshConfig();<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    }<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span><a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>    private int checkForStuckWorkers() {<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>      // check if any of the worker is stuck<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>      int stuckCount = 0;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>      for (WorkerThread worker: workerThreads) {<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>          continue;<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>        }<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span><a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>        // WARN the worker is stuck<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>        stuckCount++;<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>        LOG.warn("Worker stuck " + worker +<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>            " run time " + StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>      }<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>      return stuckCount;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    }<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span><a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    private void checkThreadCount(final int stuckCount) {<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>      // nothing to do if there are no runnable tasks<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) return;<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span><a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>      // add a new thread if the worker stuck percentage exceed the threshold limit<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>      // and every handler is active.<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>      final float stuckPerc = ((float)stuckCount) / workerThreads.size();<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>      if (stuckPerc &gt;= addWorkerStuckPercentage &amp;&amp;<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>          activeExecutorCount.get() == workerThreads.size()) {<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>        final WorkerThread worker = new WorkerThread(threadGroup);<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        workerThreads.add(worker);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>        worker.start();<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        LOG.debug("Added new worker thread " + worker);<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>      }<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    }<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span><a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>    private void refreshConfig() {<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>      addWorkerStuckPercentage = conf.getFloat(WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY,<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          DEFAULT_WORKER_ADD_STUCK_PERCENTAGE);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      timeoutInterval = conf.getInt(WORKER_MONITOR_INTERVAL_CONF_KEY,<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>        DEFAULT_WORKER_MONITOR_INTERVAL);<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>      stuckThreshold = conf.getInt(WORKER_STUCK_THRESHOLD_CONF_KEY,<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        DEFAULT_WORKER_STUCK_THRESHOLD);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    }<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span><a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>    @Override<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    public int getTimeoutInterval() {<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>      return timeoutInterval;<a name="line.1838"></a>
+<span class="sourceLineNo">1791</span>    @Override<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>    public void run() {<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>      final int stuckCount = checkForStuckWorkers();<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>      checkThreadCount(stuckCount);<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span><a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>      // refresh interval (poor man dynamic conf update)<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>      refreshConfig();<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    }<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span><a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>    private int checkForStuckWorkers() {<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>      // check if any of the worker is stuck<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>      int stuckCount = 0;<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>      for (WorkerThread worker: workerThreads) {<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          continue;<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>        }<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span><a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>        // WARN the worker is stuck<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>        stuckCount++;<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>        LOG.warn("Worker stuck " + worker +<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>            " run time " + StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>      }<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>      return stuckCount;<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>    }<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span><a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>    private void checkThreadCount(final int stuckCount) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>      // nothing to do if there are no runnable tasks<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) return;<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span><a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>      // add a new thread if the worker stuck percentage exceed the threshold limit<a name="line.1820

<TRUNCATED>

[15/18] hbase-site git commit: Published site at 59e8b8e2ba4d403d042fe4cc02f8f9f80aad67af.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 b6b4cb6..a1495ff 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
@@ -1381,472 +1381,477 @@
 <span class="sourceLineNo">1373</span>        return;<a name="line.1373"></a>
 <span class="sourceLineNo">1374</span>      }<a name="line.1374"></a>
 <span class="sourceLineNo">1375</span><a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      // if the store is not running we are aborting<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      if (!store.isRunning()) return;<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span><a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>      // Commit the transaction<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span><a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>        scheduler.yield(procedure);<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        return;<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>      }<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span><a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>    } while (reExecute);<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span><a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>    // Submit the new subprocedures<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>      submitChildrenProcedures(subprocs);<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    }<a name="line.1395"></a>
+<span class="sourceLineNo">1376</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>      // Commit the transaction<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span><a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>      // if the store is not running we are aborting<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>      if (!store.isRunning()) return;<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span><a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>        scheduler.yield(procedure);<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        return;<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span><a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    } while (reExecute);<a name="line.1395"></a>
 <span class="sourceLineNo">1396</span><a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>    // if the procedure is complete and has a parent, count down the children latch<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>    if (procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      countDownChildren(procStack, procedure);<a name="line.1399"></a>
+<span class="sourceLineNo">1397</span>    // Submit the new subprocedures<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>      submitChildrenProcedures(subprocs);<a name="line.1399"></a>
 <span class="sourceLineNo">1400</span>    }<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>  }<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span><a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>  private Procedure[] initializeChildren(final RootProcedureState procStack,<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>    assert subprocs != null : "expected subprocedures";<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      final Procedure subproc = subprocs[i];<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>      if (subproc == null) {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>          new IllegalArgumentIOException(msg)));<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>        return null;<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>      }<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span><a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>      subproc.setRootProcId(rootProcId);<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>      subproc.setProcId(nextProcId());<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>      procStack.addSubProcedure(subproc);<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>    }<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span><a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>    if (!procedure.isFailed()) {<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>      switch (procedure.getState()) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>        case RUNNABLE:<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>          break;<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        case WAITING_TIMEOUT:<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>          timeoutExecutor.add(procedure);<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>          break;<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>        default:<a name="line.1432"></a>
+<span class="sourceLineNo">1401</span><a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>    // if the procedure is complete and has a parent, count down the children latch<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>    if (procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>      countDownChildren(procStack, procedure);<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>    }<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>  }<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span><a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>  private Procedure[] initializeChildren(final RootProcedureState procStack,<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>    assert subprocs != null : "expected subprocedures";<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>      final Procedure subproc = subprocs[i];<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>      if (subproc == null) {<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>          new IllegalArgumentIOException(msg)));<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>        return null;<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>      }<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span><a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>      subproc.setRootProcId(rootProcId);<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>      subproc.setProcId(nextProcId());<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>      procStack.addSubProcedure(subproc);<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span><a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>    if (!procedure.isFailed()) {<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      switch (procedure.getState()) {<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>        case RUNNABLE:<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1432"></a>
 <span class="sourceLineNo">1433</span>          break;<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>      }<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>    }<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>    return subprocs;<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>  }<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span><a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>  private void submitChildrenProcedures(final Procedure[] subprocs) {<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      final Procedure subproc = subprocs[i];<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      scheduler.addFront(subproc);<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>    }<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>  }<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span><a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>  private void countDownChildren(final RootProcedureState procStack, final Procedure procedure) {<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>    final Procedure parent = procedures.get(procedure.getParentProcId());<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>    if (parent == null) {<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      assert procStack.isRollingback();<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      return;<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>    }<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span><a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>    // If this procedure is the last child awake the parent procedure<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>    if (traceEnabled) {<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      LOG.trace(parent + " child is done: " + procedure);<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>    }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span><a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    if (parent.childrenCountDown() &amp;&amp; parent.getState() == ProcedureState.WAITING) {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>      parent.setState(ProcedureState.RUNNABLE);<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>      store.update(parent);<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>      scheduler.addFront(parent);<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>      if (traceEnabled) {<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>        LOG.trace(parent + " all the children finished their work, resume.");<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>      }<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>      return;<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>  }<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span><a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>  private void updateStoreOnExec(final RootProcedureState procStack,<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      if (LOG.isTraceEnabled()) {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>      }<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      store.insert(procedure, subprocs);<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    } else {<a name="line.1479"></a>
+<span class="sourceLineNo">1434</span>        case WAITING_TIMEOUT:<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>          timeoutExecutor.add(procedure);<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>          break;<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>        default:<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>          break;<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>      }<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>    }<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>    return subprocs;<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>  }<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span><a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>  private void submitChildrenProcedures(final Procedure[] subprocs) {<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>      final Procedure subproc = subprocs[i];<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>      scheduler.addFront(subproc);<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>    }<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>  }<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span><a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>  private void countDownChildren(final RootProcedureState procStack, final Procedure procedure) {<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>    final Procedure parent = procedures.get(procedure.getParentProcId());<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>    if (parent == null) {<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>      assert procStack.isRollingback();<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>      return;<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>    }<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span><a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    // If this procedure is the last child awake the parent procedure<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>    if (traceEnabled) {<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>      LOG.trace(parent + " child is done: " + procedure);<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>    }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span><a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>    if (parent.childrenCountDown() &amp;&amp; parent.getState() == ProcedureState.WAITING) {<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>      parent.setState(ProcedureState.RUNNABLE);<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>      store.update(parent);<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>      scheduler.addFront(parent);<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>      if (traceEnabled) {<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>        LOG.trace(parent + " all the children finished their work, resume.");<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>      }<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>      return;<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>    }<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>  }<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span><a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>  private void updateStoreOnExec(final RootProcedureState procStack,<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1479"></a>
 <span class="sourceLineNo">1480</span>      if (LOG.isTraceEnabled()) {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>        LOG.trace("Store update " + procedure);<a name="line.1481"></a>
+<span class="sourceLineNo">1481</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1481"></a>
 <span class="sourceLineNo">1482</span>      }<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>        // remove child procedures<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>        if (childProcIds != null) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>          store.delete(procedure, childProcIds);<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>            procedures.remove(childProcIds[i]);<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>          }<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>        } else {<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          store.update(procedure);<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>        }<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>      } else {<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>        store.update(procedure);<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>      }<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>    }<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>  }<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span><a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  private void handleInterruptedException(final Procedure proc, final InterruptedException e) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>    if (LOG.isTraceEnabled()) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>      LOG.trace("Interrupt during " + proc + ". suspend and retry it later.", e);<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>    }<a name="line.1503"></a>
+<span class="sourceLineNo">1483</span>      store.insert(procedure, subprocs);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>    } else {<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>      if (LOG.isTraceEnabled()) {<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>        LOG.trace("Store update " + procedure);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      }<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>        // remove child procedures<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>        if (childProcIds != null) {<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>          store.delete(procedure, childProcIds);<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>            procedures.remove(childProcIds[i]);<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>          }<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>        } else {<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>          store.update(procedure);<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        }<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>      } else {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>        store.update(procedure);<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>      }<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>    }<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>  }<a name="line.1503"></a>
 <span class="sourceLineNo">1504</span><a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>    // and the executor/store will be stopped.<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>  }<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span><a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>  private void execCompletionCleanup(final Procedure proc) {<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    final TEnvironment env = getEnvironment();<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    if (proc.holdLock(env) &amp;&amp; proc.hasLock(env)) {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      releaseLock(proc, true);<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>    }<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>    try {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>      proc.completionCleanup(env);<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>    } catch (Throwable e) {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>    }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>  }<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span><a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>  private void procedureFinished(final Procedure proc) {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    // call the procedure completion cleanup handler<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    execCompletionCleanup(proc);<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span><a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>    // update the executor internal state maps<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>    final ProcedureInfo procInfo = ProcedureUtil.convertToProcedureInfo(proc, proc.getNonceKey());<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>      procInfo.setClientAckTime(0);<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>    }<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>    completed.put(procInfo.getProcId(), procInfo);<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>    rollbackStack.remove(proc.getProcId());<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>    procedures.remove(proc.getProcId());<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>    // call the runnableSet completion cleanup handler<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>    try {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      scheduler.completionCleanup(proc);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>    } catch (Throwable e) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: " + proc, e);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>    }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span><a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    // Notify the listeners<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>  }<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span><a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>  // ==========================================================================<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>  //  Worker Thread<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>  // ==========================================================================<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>  private final class WorkerThread extends StoppableThread {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span><a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>    public WorkerThread(final ThreadGroup group) {<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      super(group, "ProcExecWorker-" + workerId.incrementAndGet());<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>    }<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span><a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>    @Override<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>    public void sendStopSignal() {<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      scheduler.signalAll();<a name="line.1563"></a>
+<span class="sourceLineNo">1505</span>  private void handleInterruptedException(final Procedure proc, final InterruptedException e) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>    if (LOG.isTraceEnabled()) {<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>      LOG.trace("Interrupt during " + proc + ". suspend and retry it later.", e);<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>    }<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span><a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>    // and the executor/store will be stopped.<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>  }<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span><a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>  private void execCompletionCleanup(final Procedure proc) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    final TEnvironment env = getEnvironment();<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    if (proc.holdLock(env) &amp;&amp; proc.hasLock(env)) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>      releaseLock(proc, true);<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>    }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>    try {<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      proc.completionCleanup(env);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>    } catch (Throwable e) {<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>    }<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>  }<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span><a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>  private void procedureFinished(final Procedure proc) {<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    // call the procedure completion cleanup handler<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    execCompletionCleanup(proc);<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span><a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>    // update the executor internal state maps<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>    final ProcedureInfo procInfo = ProcedureUtil.convertToProcedureInfo(proc, proc.getNonceKey());<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      procInfo.setClientAckTime(0);<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>    }<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span><a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>    completed.put(procInfo.getProcId(), procInfo);<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    rollbackStack.remove(proc.getProcId());<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>    procedures.remove(proc.getProcId());<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span><a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>    // call the runnableSet completion cleanup handler<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>    try {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>      scheduler.completionCleanup(proc);<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>    } catch (Throwable e) {<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: " + proc, e);<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>    }<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span><a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>    // Notify the listeners<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>  }<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span><a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>  // ==========================================================================<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>  //  Worker Thread<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>  // ==========================================================================<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>  private final class WorkerThread extends StoppableThread {<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span><a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    public WorkerThread(final ThreadGroup group) {<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>      super(group, "ProcExecWorker-" + workerId.incrementAndGet());<a name="line.1563"></a>
 <span class="sourceLineNo">1564</span>    }<a name="line.1564"></a>
 <span class="sourceLineNo">1565</span><a name="line.1565"></a>
 <span class="sourceLineNo">1566</span>    @Override<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    public void run() {<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>        final Procedure procedure = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>        if (procedure == null) continue;<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span><a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>        store.setRunningProcedureCount(activeExecutorCount.incrementAndGet());<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>        executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        try {<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          if (traceEnabled) {<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>            LOG.trace("Trying to start the execution of " + procedure);<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>          }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>          executeProcedure(procedure);<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>        } finally {<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>          store.setRunningProcedureCount(activeExecutorCount.decrementAndGet());<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>          lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>          executionStartTime.set(Long.MAX_VALUE);<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>        }<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      }<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      LOG.debug("Worker thread terminated " + this);<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>      workerThreads.remove(this);<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>    }<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span><a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>    /**<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>     * @return the time since the current procedure is running<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>     */<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    public long getCurrentRunTime() {<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    }<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span><a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    private boolean keepAlive(final long lastUpdate) {<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>      if (workerThreads.size() &lt;= corePoolSize) return true;<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      return (EnvironmentEdgeManager.currentTime() - lastUpdate) &lt; keepAliveTime;<a name="line.1600"></a>
+<span class="sourceLineNo">1567</span>    public void sendStopSignal() {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>      scheduler.signalAll();<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>    }<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span><a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    @Override<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>    public void run() {<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>        final Procedure procedure = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>        if (procedure == null) continue;<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span><a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>        store.setRunningProcedureCount(activeExecutorCount.incrementAndGet());<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>        executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>        try {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>          if (traceEnabled) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>            LOG.trace("Trying to start the execution of " + procedure);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>          }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>          executeProcedure(procedure);<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>        } finally {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          store.setRunningProcedureCount(activeExecutorCount.decrementAndGet());<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>          lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>          executionStartTime.set(Long.MAX_VALUE);<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>        }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      }<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      LOG.debug("Worker thread terminated " + this);<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      workerThreads.remove(this);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>    }<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span><a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>    /**<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>     * @return the time since the current procedure is running<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>     */<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    public long getCurrentRunTime() {<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1600"></a>
 <span class="sourceLineNo">1601</span>    }<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>  }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span><a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>  // ==========================================================================<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>  //  Timeout Thread<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>  // ==========================================================================<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>  private final class TimeoutExecutorThread extends StoppableThread {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    private final DelayQueue&lt;DelayedWithTimeout&gt; queue = new DelayQueue&lt;&gt;();<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span><a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    public TimeoutExecutorThread(final ThreadGroup group) {<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>      super(group, "ProcedureTimeoutExecutor");<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>    }<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span><a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    @Override<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>    public void sendStopSignal() {<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>      queue.add(DelayedUtil.DELAYED_POISON);<a name="line.1616"></a>
+<span class="sourceLineNo">1602</span><a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    private boolean keepAlive(final long lastUpdate) {<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      if (workerThreads.size() &lt;= corePoolSize) return true;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>      return (EnvironmentEdgeManager.currentTime() - lastUpdate) &lt; keepAliveTime;<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    }<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>  }<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span><a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>  // ==========================================================================<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>  //  Timeout Thread<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>  // ==========================================================================<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>  private final class TimeoutExecutorThread extends StoppableThread {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    private final DelayQueue&lt;DelayedWithTimeout&gt; queue = new DelayQueue&lt;&gt;();<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span><a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>    public TimeoutExecutorThread(final ThreadGroup group) {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>      super(group, "ProcedureTimeoutExecutor");<a name="line.1616"></a>
 <span class="sourceLineNo">1617</span>    }<a name="line.1617"></a>
 <span class="sourceLineNo">1618</span><a name="line.1618"></a>
 <span class="sourceLineNo">1619</span>    @Override<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    public void run() {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>      final boolean isTraceEnabled = LOG.isTraceEnabled();<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      while (isRunning()) {<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>        final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>        if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>          // the executor may be shutting down,<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>          // and the task is just the shutdown request<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>          continue;<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>        }<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span><a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>        if (isTraceEnabled) {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>          LOG.trace("Trying to start the execution of " + task);<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>        }<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span><a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>        // execute the task<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>        if (task instanceof InlineChore) {<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>          execInlineChore((InlineChore)task);<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        } else if (task instanceof DelayedProcedure) {<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>          execDelayedProcedure((DelayedProcedure)task);<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>        } else {<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>          LOG.error("CODE-BUG unknown timeout task type " + task);<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>        }<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>      }<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>    }<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span><a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>    public void add(final InlineChore chore) {<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      chore.refreshTimeout();<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>      queue.add(chore);<a name="line.1647"></a>
+<span class="sourceLineNo">1620</span>    public void sendStopSignal() {<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>      queue.add(DelayedUtil.DELAYED_POISON);<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>    }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span><a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    @Override<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    public void run() {<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      final boolean isTraceEnabled = LOG.isTraceEnabled();<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      while (isRunning()) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>        final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>        if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>          // the executor may be shutting down,<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>          // and the task is just the shutdown request<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>          continue;<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>        }<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span><a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>        if (isTraceEnabled) {<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>          LOG.trace("Trying to start the execution of " + task);<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        }<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span><a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>        // execute the task<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>        if (task instanceof InlineChore) {<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          execInlineChore((InlineChore)task);<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>        } else if (task instanceof DelayedProcedure) {<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>          execDelayedProcedure((DelayedProcedure)task);<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>        } else {<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>          LOG.error("CODE-BUG unknown timeout task type " + task);<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        }<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>      }<a name="line.1647"></a>
 <span class="sourceLineNo">1648</span>    }<a name="line.1648"></a>
 <span class="sourceLineNo">1649</span><a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    public void add(final Procedure procedure) {<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>      assert procedure.getState() == ProcedureState.WAITING_TIMEOUT;<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>      queue.add(new DelayedProcedure(procedure));<a name="line.1652"></a>
+<span class="sourceLineNo">1650</span>    public void add(final InlineChore chore) {<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>      chore.refreshTimeout();<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      queue.add(chore);<a name="line.1652"></a>
 <span class="sourceLineNo">1653</span>    }<a name="line.1653"></a>
 <span class="sourceLineNo">1654</span><a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    public boolean remove(final Procedure procedure) {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      return queue.remove(new DelayedProcedure(procedure));<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    }<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    private void execInlineChore(final InlineChore chore) {<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>      chore.run();<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      add(chore);<a name="line.1661"></a>
+<span class="sourceLineNo">1655</span>    public void add(final Procedure procedure) {<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>      assert procedure.getState() == ProcedureState.WAITING_TIMEOUT;<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>      queue.add(new DelayedProcedure(procedure));<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    }<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span><a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    public boolean remove(final Procedure procedure) {<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>      return queue.remove(new DelayedProcedure(procedure));<a name="line.1661"></a>
 <span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
 <span class="sourceLineNo">1663</span><a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>    private void execDelayedProcedure(final DelayedProcedure delayed) {<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      // TODO: treat this as a normal procedure, add it to the scheduler and<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      // let one of the workers handle it.<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      // Today we consider ProcedureInMemoryChore as InlineChores<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>      final Procedure procedure = delayed.getObject();<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      if (procedure instanceof ProcedureInMemoryChore) {<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>        executeInMemoryChore((ProcedureInMemoryChore)procedure);<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>        // if the procedure is in a waiting state again, put it back in the queue<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>        procedure.updateTimestamp();<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>        if (procedure.isWaiting()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>          delayed.setTimeout(procedure.getTimeoutTimestamp());<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>          queue.add(delayed);<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>        }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      } else {<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>        executeTimedoutProcedure(procedure);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      }<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    }<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span><a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>    private void executeInMemoryChore(final ProcedureInMemoryChore chore) {<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>      if (!chore.isWaiting()) return;<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span><a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      // The ProcedureInMemoryChore is a special case, and it acts as a chore.<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      // instead of bringing the Chore class in, we reuse this timeout thread for<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>      // this special case.<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      try {<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>        chore.periodicExecute(getEnvironment());<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      } catch (Throwable e) {<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>        LOG.error("Ignoring " + chore + " exception: " + e.getMessage(), e);<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      }<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>    }<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span><a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>    private void executeTimedoutProcedure(final Procedure proc) {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>      // The procedure received a timeout. if the procedure itself does not handle it,<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>      // call abort() and add the procedure back in the queue for rollback.<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>      if (proc.setTimeoutFailure(getEnvironment())) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>        long rootProcId = Procedure.getRootProcedureId(procedures, proc);<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>        RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>        procStack.abort();<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>        store.update(proc);<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        scheduler.addFront(proc);<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>    }<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>  }<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span><a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>  private static final class DelayedProcedure<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>      extends DelayedUtil.DelayedContainerWithTimestamp&lt;Procedure&gt; {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>    public DelayedProcedure(final Procedure procedure) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>      super(procedure, procedure.getTimeoutTimestamp());<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    }<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>  }<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span><a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>  private static abstract class StoppableThread extends Thread {<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    public StoppableThread(final ThreadGroup group, final String name) {<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>      super(group, name);<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>    }<a name="line.1718"></a>
+<span class="sourceLineNo">1664</span>    private void execInlineChore(final InlineChore chore) {<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>      chore.run();<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>      add(chore);<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>    }<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span><a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>    private void execDelayedProcedure(final DelayedProcedure delayed) {<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>      // TODO: treat this as a normal procedure, add it to the scheduler and<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      // let one of the workers handle it.<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>      // Today we consider ProcedureInMemoryChore as InlineChores<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      final Procedure procedure = delayed.getObject();<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>      if (procedure instanceof ProcedureInMemoryChore) {<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>        executeInMemoryChore((ProcedureInMemoryChore)procedure);<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>        // if the procedure is in a waiting state again, put it back in the queue<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>        procedure.updateTimestamp();<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>        if (procedure.isWaiting()) {<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>          delayed.setTimeout(procedure.getTimeoutTimestamp());<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>          queue.add(delayed);<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>        }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      } else {<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>        executeTimedoutProcedure(procedure);<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      }<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>    }<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span><a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>    private void executeInMemoryChore(final ProcedureInMemoryChore chore) {<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>      if (!chore.isWaiting()) return;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span><a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>      // The ProcedureInMemoryChore is a special case, and it acts as a chore.<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>      // instead of bringing the Chore class in, we reuse this timeout thread for<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      // this special case.<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>      try {<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>        chore.periodicExecute(getEnvironment());<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>      } catch (Throwable e) {<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>        LOG.error("Ignoring " + chore + " exception: " + e.getMessage(), e);<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      }<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>    }<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span><a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>    private void executeTimedoutProcedure(final Procedure proc) {<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>      // The procedure received a timeout. if the procedure itself does not handle it,<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>      // call abort() and add the procedure back in the queue for rollback.<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>      if (proc.setTimeoutFailure(getEnvironment())) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>        long rootProcId = Procedure.getRootProcedureId(procedures, proc);<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>        RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>        procStack.abort();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>        store.update(proc);<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>        scheduler.addFront(proc);<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>      }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>    }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  }<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span><a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>  private static final class DelayedProcedure<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      extends DelayedUtil.DelayedContainerWithTimestamp&lt;Procedure&gt; {<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>    public DelayedProcedure(final Procedure procedure) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>      super(procedure, procedure.getTimeoutTimestamp());<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>    }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>  }<a name="line.1718"></a>
 <span class="sourceLineNo">1719</span><a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    public abstract void sendStopSignal();<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span><a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>    public void awaitTermination() {<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>      try {<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>        for (int i = 0; isAlive(); ++i) {<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>          sendStopSignal();<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>          join(250);<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>          if (i &gt; 0 &amp;&amp; (i % 8) == 0) {<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>            LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>              StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>          }<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>        }<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>      } catch (InterruptedException e) {<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        LOG.warn(getName() + " join wait got interrupted", e);<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>      }<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>    }<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>  }<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span><a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>  // ==========================================================================<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>  //  Inline Chores (executors internal chores)<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>  // ==========================================================================<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>  private static abstract class InlineChore extends DelayedUtil.DelayedObject implements Runnable {<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>    private long timeout;<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span><a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>    public abstract int getTimeoutInterval();<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span><a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>    protected void refreshTimeout() {<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      this.timeout = EnvironmentEdgeManager.currentTime() + getTimeoutInterval();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    @Override<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    public long getTimeout() {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      return timeout;<a name="line.1753"></a>
+<span class="sourceLineNo">1720</span>  private static abstract class StoppableThread extends Thread {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>    public StoppableThread(final ThreadGroup group, final String name) {<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>      super(group, name);<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>    }<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span><a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>    public abstract void sendStopSignal();<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span><a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>    public void awaitTermination() {<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      try {<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>        final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>        for (int i = 0; isAlive(); ++i) {<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>          sendStopSignal();<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>          join(250);<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>          if (i &gt; 0 &amp;&amp; (i % 8) == 0) {<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>            LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>              StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>          }<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>        }<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      } catch (InterruptedException e) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        LOG.warn(getName() + " join wait got interrupted", e);<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>      }<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>    }<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>  }<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span><a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>  // ==========================================================================<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>  //  Inline Chores (executors internal chores)<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>  // ==========================================================================<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>  private static abstract class InlineChore extends DelayedUtil.DelayedObject implements Runnable {<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>    private long timeout;<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>    public abstract int getTimeoutInterval();<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span><a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    protected void refreshTimeout() {<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>      this.timeout = EnvironmentEdgeManager.currentTime() + getTimeoutInterval();<a name="line.1753"></a>
 <span class="sourceLineNo">1754</span>    }<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>  }<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span><a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>  // ----------------------------------------------------------------------------<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>  // full set of procedures pending and completed to write a compacted<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>  // version of the log (in case is a log)?<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>  // will have the tracker saying everything is in the last log.<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>  // ----------------------------------------------------------------------------<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span><a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  private final class WorkerMonitor extends InlineChore {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.1768"></a>
+<span class="sourceLineNo">1755</span><a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    @Override<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>    public long getTimeout() {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      return timeout;<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>    }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>  }<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span><a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>  // ----------------------------------------------------------------------------<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>  // full set of procedures pending and completed to write a compacted<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>  // version of the log (in case is a log)?<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>  // will have the tracker saying everything is in the last log.<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>  // ----------------------------------------------------------------------------<a name="line.1768"></a>
 <span class="sourceLineNo">1769</span><a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span><a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span><a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    public WorkerMonitor() {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>      refreshConfig();<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span><a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    @Override<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>    public void run() {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      final int stuckCount = checkForStuckWorkers();<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>      checkThreadCount(stuckCount);<a name="line.1789"></a>
+<span class="sourceLineNo">1770</span>  private final class WorkerMonitor extends InlineChore {<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span><a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span><a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span><a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span><a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    public WorkerMonitor() {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      refreshConfig();<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>    }<a name="line.1789"></a>
 <span class="sourceLineNo">1790</span><a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      // refresh interval (poor man dynamic conf update)<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      refreshConfig();<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    }<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span><a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>    private int checkForStuckWorkers() {<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>      // check if any of the worker is stuck<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>      int stuckCount = 0;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>      for (WorkerThread worker: workerThreads) {<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>          continue;<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>        }<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span><a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>        // WARN the worker is stuck<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>        stuckCount++;<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>        LOG.warn("Worker stuck " + worker +<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>            " run time " + StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>      }<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>      return stuckCount;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    }<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span><a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    private void checkThreadCount(final int stuckCount) {<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>      // nothing to do if there are no runnable tasks<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) return;<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span><a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>      // add a new thread if the worker stuck percentage exceed the threshold limit<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>      // and every handler is active.<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>      final float stuckPerc = ((float)stuckCount) / workerThreads.size();<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>      if (stuckPerc &gt;= addWorkerStuckPercentage &amp;&amp;<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>          activeExecutorCount.get() == workerThreads.size()) {<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>        final WorkerThread worker = new WorkerThread(threadGroup);<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        workerThreads.add(worker);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>        worker.start();<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        LOG.debug("Added new worker thread " + worker);<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>      }<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    }<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span><a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>    private void refreshConfig() {<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>      addWorkerStuckPercentage = conf.getFloat(WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY,<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          DEFAULT_WORKER_ADD_STUCK_PERCENTAGE);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      timeoutInterval = conf.getInt(WORKER_MONITOR_INTERVAL_CONF_KEY,<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>        DEFAULT_WORKER_MONITOR_INTERVAL);<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>      stuckThreshold = conf.getInt(WORKER_STUCK_THRESHOLD_CONF_KEY,<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        DEFAULT_WORKER_STUCK_THRESHOLD);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    }<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span><a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>    @Override<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    public int getTimeoutInterval() {<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>      return timeoutInterval;<a name="line.1838"></a>
+<span class="sourceLineNo">1791</span>    @Override<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>    public void run() {<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>      final int stuckCount = checkForStuckWorkers();<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>      checkThreadCount(stuckCount);<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span><a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>      // refresh interval (poor man dynamic conf update)<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>      refreshConfig();<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    }<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span><a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>    private int checkForStuckWorkers() {<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>      // check if any of the worker is stuck<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>      int stuckCount = 0;<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>      for (WorkerThread worker: workerThreads) {<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          continue;<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>        }<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span><a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>        // WARN the worker is stuck<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>        stuckCount++;<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>        LOG.warn("Worker stuck " + worker +<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>            " run time " + StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>      }<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>      return stuckCount;<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>    }<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span><a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>    private void checkThreadCount(final int stuckCount) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>      // nothing to do if there are no runnable tasks<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) return;<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span><a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>      // add a new thread if the worker stuck percentage

<TRUNCATED>

[10/18] hbase-site git commit: Published site at 59e8b8e2ba4d403d042fe4cc02f8f9f80aad67af.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 b6b4cb6..a1495ff 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
@@ -1381,472 +1381,477 @@
 <span class="sourceLineNo">1373</span>        return;<a name="line.1373"></a>
 <span class="sourceLineNo">1374</span>      }<a name="line.1374"></a>
 <span class="sourceLineNo">1375</span><a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      // if the store is not running we are aborting<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      if (!store.isRunning()) return;<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span><a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>      // Commit the transaction<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span><a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>        scheduler.yield(procedure);<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        return;<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>      }<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span><a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>    } while (reExecute);<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span><a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>    // Submit the new subprocedures<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>      submitChildrenProcedures(subprocs);<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    }<a name="line.1395"></a>
+<span class="sourceLineNo">1376</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>      // Commit the transaction<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span><a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>      // if the store is not running we are aborting<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>      if (!store.isRunning()) return;<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span><a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>        scheduler.yield(procedure);<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        return;<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span><a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    } while (reExecute);<a name="line.1395"></a>
 <span class="sourceLineNo">1396</span><a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>    // if the procedure is complete and has a parent, count down the children latch<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>    if (procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      countDownChildren(procStack, procedure);<a name="line.1399"></a>
+<span class="sourceLineNo">1397</span>    // Submit the new subprocedures<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>      submitChildrenProcedures(subprocs);<a name="line.1399"></a>
 <span class="sourceLineNo">1400</span>    }<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>  }<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span><a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>  private Procedure[] initializeChildren(final RootProcedureState procStack,<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>    assert subprocs != null : "expected subprocedures";<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      final Procedure subproc = subprocs[i];<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>      if (subproc == null) {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>          new IllegalArgumentIOException(msg)));<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>        return null;<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>      }<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span><a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>      subproc.setRootProcId(rootProcId);<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>      subproc.setProcId(nextProcId());<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>      procStack.addSubProcedure(subproc);<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>    }<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span><a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>    if (!procedure.isFailed()) {<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>      switch (procedure.getState()) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>        case RUNNABLE:<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>          break;<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        case WAITING_TIMEOUT:<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>          timeoutExecutor.add(procedure);<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>          break;<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>        default:<a name="line.1432"></a>
+<span class="sourceLineNo">1401</span><a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>    // if the procedure is complete and has a parent, count down the children latch<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>    if (procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>      countDownChildren(procStack, procedure);<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>    }<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>  }<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span><a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>  private Procedure[] initializeChildren(final RootProcedureState procStack,<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>    assert subprocs != null : "expected subprocedures";<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>      final Procedure subproc = subprocs[i];<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>      if (subproc == null) {<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>          new IllegalArgumentIOException(msg)));<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>        return null;<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>      }<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span><a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>      subproc.setRootProcId(rootProcId);<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>      subproc.setProcId(nextProcId());<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>      procStack.addSubProcedure(subproc);<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span><a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>    if (!procedure.isFailed()) {<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      switch (procedure.getState()) {<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>        case RUNNABLE:<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1432"></a>
 <span class="sourceLineNo">1433</span>          break;<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>      }<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>    }<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>    return subprocs;<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>  }<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span><a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>  private void submitChildrenProcedures(final Procedure[] subprocs) {<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      final Procedure subproc = subprocs[i];<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      scheduler.addFront(subproc);<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>    }<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>  }<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span><a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>  private void countDownChildren(final RootProcedureState procStack, final Procedure procedure) {<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>    final Procedure parent = procedures.get(procedure.getParentProcId());<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>    if (parent == null) {<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      assert procStack.isRollingback();<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      return;<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>    }<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span><a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>    // If this procedure is the last child awake the parent procedure<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>    if (traceEnabled) {<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      LOG.trace(parent + " child is done: " + procedure);<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>    }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span><a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    if (parent.childrenCountDown() &amp;&amp; parent.getState() == ProcedureState.WAITING) {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>      parent.setState(ProcedureState.RUNNABLE);<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>      store.update(parent);<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>      scheduler.addFront(parent);<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>      if (traceEnabled) {<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>        LOG.trace(parent + " all the children finished their work, resume.");<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>      }<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>      return;<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>  }<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span><a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>  private void updateStoreOnExec(final RootProcedureState procStack,<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      if (LOG.isTraceEnabled()) {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>      }<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      store.insert(procedure, subprocs);<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    } else {<a name="line.1479"></a>
+<span class="sourceLineNo">1434</span>        case WAITING_TIMEOUT:<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>          timeoutExecutor.add(procedure);<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>          break;<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>        default:<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>          break;<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>      }<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>    }<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>    return subprocs;<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>  }<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span><a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>  private void submitChildrenProcedures(final Procedure[] subprocs) {<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>      final Procedure subproc = subprocs[i];<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>      scheduler.addFront(subproc);<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>    }<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>  }<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span><a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>  private void countDownChildren(final RootProcedureState procStack, final Procedure procedure) {<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>    final Procedure parent = procedures.get(procedure.getParentProcId());<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>    if (parent == null) {<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>      assert procStack.isRollingback();<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>      return;<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>    }<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span><a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    // If this procedure is the last child awake the parent procedure<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>    if (traceEnabled) {<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>      LOG.trace(parent + " child is done: " + procedure);<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>    }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span><a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>    if (parent.childrenCountDown() &amp;&amp; parent.getState() == ProcedureState.WAITING) {<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>      parent.setState(ProcedureState.RUNNABLE);<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>      store.update(parent);<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>      scheduler.addFront(parent);<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>      if (traceEnabled) {<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>        LOG.trace(parent + " all the children finished their work, resume.");<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>      }<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>      return;<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>    }<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>  }<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span><a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>  private void updateStoreOnExec(final RootProcedureState procStack,<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1479"></a>
 <span class="sourceLineNo">1480</span>      if (LOG.isTraceEnabled()) {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>        LOG.trace("Store update " + procedure);<a name="line.1481"></a>
+<span class="sourceLineNo">1481</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1481"></a>
 <span class="sourceLineNo">1482</span>      }<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>        // remove child procedures<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>        if (childProcIds != null) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>          store.delete(procedure, childProcIds);<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>            procedures.remove(childProcIds[i]);<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>          }<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>        } else {<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          store.update(procedure);<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>        }<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>      } else {<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>        store.update(procedure);<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>      }<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>    }<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>  }<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span><a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  private void handleInterruptedException(final Procedure proc, final InterruptedException e) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>    if (LOG.isTraceEnabled()) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>      LOG.trace("Interrupt during " + proc + ". suspend and retry it later.", e);<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>    }<a name="line.1503"></a>
+<span class="sourceLineNo">1483</span>      store.insert(procedure, subprocs);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>    } else {<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>      if (LOG.isTraceEnabled()) {<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>        LOG.trace("Store update " + procedure);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      }<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>        // remove child procedures<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>        if (childProcIds != null) {<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>          store.delete(procedure, childProcIds);<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>            procedures.remove(childProcIds[i]);<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>          }<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>        } else {<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>          store.update(procedure);<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        }<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>      } else {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>        store.update(procedure);<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>      }<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>    }<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>  }<a name="line.1503"></a>
 <span class="sourceLineNo">1504</span><a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>    // and the executor/store will be stopped.<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>  }<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span><a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>  private void execCompletionCleanup(final Procedure proc) {<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    final TEnvironment env = getEnvironment();<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    if (proc.holdLock(env) &amp;&amp; proc.hasLock(env)) {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      releaseLock(proc, true);<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>    }<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>    try {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>      proc.completionCleanup(env);<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>    } catch (Throwable e) {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>    }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>  }<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span><a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>  private void procedureFinished(final Procedure proc) {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    // call the procedure completion cleanup handler<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    execCompletionCleanup(proc);<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span><a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>    // update the executor internal state maps<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>    final ProcedureInfo procInfo = ProcedureUtil.convertToProcedureInfo(proc, proc.getNonceKey());<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>      procInfo.setClientAckTime(0);<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>    }<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>    completed.put(procInfo.getProcId(), procInfo);<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>    rollbackStack.remove(proc.getProcId());<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>    procedures.remove(proc.getProcId());<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>    // call the runnableSet completion cleanup handler<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>    try {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      scheduler.completionCleanup(proc);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>    } catch (Throwable e) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: " + proc, e);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>    }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span><a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    // Notify the listeners<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>  }<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span><a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>  // ==========================================================================<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>  //  Worker Thread<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>  // ==========================================================================<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>  private final class WorkerThread extends StoppableThread {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span><a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>    public WorkerThread(final ThreadGroup group) {<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      super(group, "ProcExecWorker-" + workerId.incrementAndGet());<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>    }<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span><a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>    @Override<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>    public void sendStopSignal() {<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      scheduler.signalAll();<a name="line.1563"></a>
+<span class="sourceLineNo">1505</span>  private void handleInterruptedException(final Procedure proc, final InterruptedException e) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>    if (LOG.isTraceEnabled()) {<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>      LOG.trace("Interrupt during " + proc + ". suspend and retry it later.", e);<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>    }<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span><a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>    // and the executor/store will be stopped.<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>  }<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span><a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>  private void execCompletionCleanup(final Procedure proc) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    final TEnvironment env = getEnvironment();<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    if (proc.holdLock(env) &amp;&amp; proc.hasLock(env)) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>      releaseLock(proc, true);<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>    }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>    try {<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      proc.completionCleanup(env);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>    } catch (Throwable e) {<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>    }<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>  }<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span><a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>  private void procedureFinished(final Procedure proc) {<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    // call the procedure completion cleanup handler<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    execCompletionCleanup(proc);<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span><a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>    // update the executor internal state maps<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>    final ProcedureInfo procInfo = ProcedureUtil.convertToProcedureInfo(proc, proc.getNonceKey());<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      procInfo.setClientAckTime(0);<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>    }<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span><a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>    completed.put(procInfo.getProcId(), procInfo);<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    rollbackStack.remove(proc.getProcId());<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>    procedures.remove(proc.getProcId());<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span><a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>    // call the runnableSet completion cleanup handler<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>    try {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>      scheduler.completionCleanup(proc);<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>    } catch (Throwable e) {<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: " + proc, e);<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>    }<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span><a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>    // Notify the listeners<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>  }<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span><a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>  // ==========================================================================<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>  //  Worker Thread<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>  // ==========================================================================<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>  private final class WorkerThread extends StoppableThread {<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span><a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    public WorkerThread(final ThreadGroup group) {<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>      super(group, "ProcExecWorker-" + workerId.incrementAndGet());<a name="line.1563"></a>
 <span class="sourceLineNo">1564</span>    }<a name="line.1564"></a>
 <span class="sourceLineNo">1565</span><a name="line.1565"></a>
 <span class="sourceLineNo">1566</span>    @Override<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    public void run() {<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>        final Procedure procedure = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>        if (procedure == null) continue;<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span><a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>        store.setRunningProcedureCount(activeExecutorCount.incrementAndGet());<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>        executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        try {<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          if (traceEnabled) {<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>            LOG.trace("Trying to start the execution of " + procedure);<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>          }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>          executeProcedure(procedure);<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>        } finally {<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>          store.setRunningProcedureCount(activeExecutorCount.decrementAndGet());<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>          lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>          executionStartTime.set(Long.MAX_VALUE);<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>        }<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      }<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      LOG.debug("Worker thread terminated " + this);<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>      workerThreads.remove(this);<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>    }<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span><a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>    /**<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>     * @return the time since the current procedure is running<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>     */<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    public long getCurrentRunTime() {<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    }<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span><a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    private boolean keepAlive(final long lastUpdate) {<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>      if (workerThreads.size() &lt;= corePoolSize) return true;<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      return (EnvironmentEdgeManager.currentTime() - lastUpdate) &lt; keepAliveTime;<a name="line.1600"></a>
+<span class="sourceLineNo">1567</span>    public void sendStopSignal() {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>      scheduler.signalAll();<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>    }<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span><a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    @Override<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>    public void run() {<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>        final Procedure procedure = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>        if (procedure == null) continue;<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span><a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>        store.setRunningProcedureCount(activeExecutorCount.incrementAndGet());<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>        executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>        try {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>          if (traceEnabled) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>            LOG.trace("Trying to start the execution of " + procedure);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>          }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>          executeProcedure(procedure);<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>        } finally {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          store.setRunningProcedureCount(activeExecutorCount.decrementAndGet());<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>          lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>          executionStartTime.set(Long.MAX_VALUE);<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>        }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      }<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      LOG.debug("Worker thread terminated " + this);<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      workerThreads.remove(this);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>    }<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span><a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>    /**<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>     * @return the time since the current procedure is running<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>     */<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    public long getCurrentRunTime() {<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1600"></a>
 <span class="sourceLineNo">1601</span>    }<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>  }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span><a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>  // ==========================================================================<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>  //  Timeout Thread<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>  // ==========================================================================<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>  private final class TimeoutExecutorThread extends StoppableThread {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    private final DelayQueue&lt;DelayedWithTimeout&gt; queue = new DelayQueue&lt;&gt;();<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span><a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    public TimeoutExecutorThread(final ThreadGroup group) {<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>      super(group, "ProcedureTimeoutExecutor");<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>    }<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span><a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    @Override<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>    public void sendStopSignal() {<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>      queue.add(DelayedUtil.DELAYED_POISON);<a name="line.1616"></a>
+<span class="sourceLineNo">1602</span><a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    private boolean keepAlive(final long lastUpdate) {<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      if (workerThreads.size() &lt;= corePoolSize) return true;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>      return (EnvironmentEdgeManager.currentTime() - lastUpdate) &lt; keepAliveTime;<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    }<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>  }<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span><a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>  // ==========================================================================<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>  //  Timeout Thread<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>  // ==========================================================================<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>  private final class TimeoutExecutorThread extends StoppableThread {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    private final DelayQueue&lt;DelayedWithTimeout&gt; queue = new DelayQueue&lt;&gt;();<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span><a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>    public TimeoutExecutorThread(final ThreadGroup group) {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>      super(group, "ProcedureTimeoutExecutor");<a name="line.1616"></a>
 <span class="sourceLineNo">1617</span>    }<a name="line.1617"></a>
 <span class="sourceLineNo">1618</span><a name="line.1618"></a>
 <span class="sourceLineNo">1619</span>    @Override<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    public void run() {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>      final boolean isTraceEnabled = LOG.isTraceEnabled();<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      while (isRunning()) {<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>        final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>        if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>          // the executor may be shutting down,<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>          // and the task is just the shutdown request<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>          continue;<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>        }<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span><a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>        if (isTraceEnabled) {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>          LOG.trace("Trying to start the execution of " + task);<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>        }<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span><a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>        // execute the task<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>        if (task instanceof InlineChore) {<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>          execInlineChore((InlineChore)task);<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        } else if (task instanceof DelayedProcedure) {<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>          execDelayedProcedure((DelayedProcedure)task);<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>        } else {<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>          LOG.error("CODE-BUG unknown timeout task type " + task);<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>        }<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>      }<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>    }<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span><a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>    public void add(final InlineChore chore) {<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      chore.refreshTimeout();<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>      queue.add(chore);<a name="line.1647"></a>
+<span class="sourceLineNo">1620</span>    public void sendStopSignal() {<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>      queue.add(DelayedUtil.DELAYED_POISON);<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>    }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span><a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    @Override<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    public void run() {<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      final boolean isTraceEnabled = LOG.isTraceEnabled();<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      while (isRunning()) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>        final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>        if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>          // the executor may be shutting down,<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>          // and the task is just the shutdown request<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>          continue;<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>        }<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span><a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>        if (isTraceEnabled) {<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>          LOG.trace("Trying to start the execution of " + task);<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        }<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span><a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>        // execute the task<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>        if (task instanceof InlineChore) {<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          execInlineChore((InlineChore)task);<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>        } else if (task instanceof DelayedProcedure) {<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>          execDelayedProcedure((DelayedProcedure)task);<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>        } else {<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>          LOG.error("CODE-BUG unknown timeout task type " + task);<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        }<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>      }<a name="line.1647"></a>
 <span class="sourceLineNo">1648</span>    }<a name="line.1648"></a>
 <span class="sourceLineNo">1649</span><a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    public void add(final Procedure procedure) {<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>      assert procedure.getState() == ProcedureState.WAITING_TIMEOUT;<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>      queue.add(new DelayedProcedure(procedure));<a name="line.1652"></a>
+<span class="sourceLineNo">1650</span>    public void add(final InlineChore chore) {<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>      chore.refreshTimeout();<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      queue.add(chore);<a name="line.1652"></a>
 <span class="sourceLineNo">1653</span>    }<a name="line.1653"></a>
 <span class="sourceLineNo">1654</span><a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    public boolean remove(final Procedure procedure) {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      return queue.remove(new DelayedProcedure(procedure));<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    }<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    private void execInlineChore(final InlineChore chore) {<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>      chore.run();<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      add(chore);<a name="line.1661"></a>
+<span class="sourceLineNo">1655</span>    public void add(final Procedure procedure) {<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>      assert procedure.getState() == ProcedureState.WAITING_TIMEOUT;<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>      queue.add(new DelayedProcedure(procedure));<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    }<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span><a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    public boolean remove(final Procedure procedure) {<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>      return queue.remove(new DelayedProcedure(procedure));<a name="line.1661"></a>
 <span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
 <span class="sourceLineNo">1663</span><a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>    private void execDelayedProcedure(final DelayedProcedure delayed) {<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      // TODO: treat this as a normal procedure, add it to the scheduler and<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      // let one of the workers handle it.<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      // Today we consider ProcedureInMemoryChore as InlineChores<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>      final Procedure procedure = delayed.getObject();<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      if (procedure instanceof ProcedureInMemoryChore) {<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>        executeInMemoryChore((ProcedureInMemoryChore)procedure);<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>        // if the procedure is in a waiting state again, put it back in the queue<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>        procedure.updateTimestamp();<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>        if (procedure.isWaiting()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>          delayed.setTimeout(procedure.getTimeoutTimestamp());<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>          queue.add(delayed);<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>        }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      } else {<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>        executeTimedoutProcedure(procedure);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      }<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    }<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span><a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>    private void executeInMemoryChore(final ProcedureInMemoryChore chore) {<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>      if (!chore.isWaiting()) return;<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span><a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      // The ProcedureInMemoryChore is a special case, and it acts as a chore.<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      // instead of bringing the Chore class in, we reuse this timeout thread for<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>      // this special case.<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      try {<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>        chore.periodicExecute(getEnvironment());<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      } catch (Throwable e) {<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>        LOG.error("Ignoring " + chore + " exception: " + e.getMessage(), e);<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      }<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>    }<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span><a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>    private void executeTimedoutProcedure(final Procedure proc) {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>      // The procedure received a timeout. if the procedure itself does not handle it,<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>      // call abort() and add the procedure back in the queue for rollback.<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>      if (proc.setTimeoutFailure(getEnvironment())) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>        long rootProcId = Procedure.getRootProcedureId(procedures, proc);<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>        RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>        procStack.abort();<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>        store.update(proc);<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        scheduler.addFront(proc);<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>    }<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>  }<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span><a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>  private static final class DelayedProcedure<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>      extends DelayedUtil.DelayedContainerWithTimestamp&lt;Procedure&gt; {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>    public DelayedProcedure(final Procedure procedure) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>      super(procedure, procedure.getTimeoutTimestamp());<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    }<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>  }<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span><a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>  private static abstract class StoppableThread extends Thread {<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    public StoppableThread(final ThreadGroup group, final String name) {<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>      super(group, name);<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>    }<a name="line.1718"></a>
+<span class="sourceLineNo">1664</span>    private void execInlineChore(final InlineChore chore) {<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>      chore.run();<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>      add(chore);<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>    }<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span><a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>    private void execDelayedProcedure(final DelayedProcedure delayed) {<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>      // TODO: treat this as a normal procedure, add it to the scheduler and<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      // let one of the workers handle it.<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>      // Today we consider ProcedureInMemoryChore as InlineChores<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      final Procedure procedure = delayed.getObject();<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>      if (procedure instanceof ProcedureInMemoryChore) {<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>        executeInMemoryChore((ProcedureInMemoryChore)procedure);<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>        // if the procedure is in a waiting state again, put it back in the queue<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>        procedure.updateTimestamp();<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>        if (procedure.isWaiting()) {<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>          delayed.setTimeout(procedure.getTimeoutTimestamp());<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>          queue.add(delayed);<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>        }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      } else {<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>        executeTimedoutProcedure(procedure);<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      }<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>    }<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span><a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>    private void executeInMemoryChore(final ProcedureInMemoryChore chore) {<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>      if (!chore.isWaiting()) return;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span><a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>      // The ProcedureInMemoryChore is a special case, and it acts as a chore.<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>      // instead of bringing the Chore class in, we reuse this timeout thread for<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      // this special case.<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>      try {<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>        chore.periodicExecute(getEnvironment());<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>      } catch (Throwable e) {<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>        LOG.error("Ignoring " + chore + " exception: " + e.getMessage(), e);<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      }<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>    }<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span><a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>    private void executeTimedoutProcedure(final Procedure proc) {<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>      // The procedure received a timeout. if the procedure itself does not handle it,<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>      // call abort() and add the procedure back in the queue for rollback.<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>      if (proc.setTimeoutFailure(getEnvironment())) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>        long rootProcId = Procedure.getRootProcedureId(procedures, proc);<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>        RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>        procStack.abort();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>        store.update(proc);<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>        scheduler.addFront(proc);<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>      }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>    }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  }<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span><a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>  private static final class DelayedProcedure<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      extends DelayedUtil.DelayedContainerWithTimestamp&lt;Procedure&gt; {<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>    public DelayedProcedure(final Procedure procedure) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>      super(procedure, procedure.getTimeoutTimestamp());<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>    }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>  }<a name="line.1718"></a>
 <span class="sourceLineNo">1719</span><a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    public abstract void sendStopSignal();<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span><a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>    public void awaitTermination() {<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>      try {<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>        for (int i = 0; isAlive(); ++i) {<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>          sendStopSignal();<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>          join(250);<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>          if (i &gt; 0 &amp;&amp; (i % 8) == 0) {<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>            LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>              StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>          }<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>        }<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>      } catch (InterruptedException e) {<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        LOG.warn(getName() + " join wait got interrupted", e);<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>      }<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>    }<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>  }<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span><a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>  // ==========================================================================<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>  //  Inline Chores (executors internal chores)<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>  // ==========================================================================<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>  private static abstract class InlineChore extends DelayedUtil.DelayedObject implements Runnable {<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>    private long timeout;<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span><a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>    public abstract int getTimeoutInterval();<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span><a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>    protected void refreshTimeout() {<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      this.timeout = EnvironmentEdgeManager.currentTime() + getTimeoutInterval();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    @Override<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    public long getTimeout() {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      return timeout;<a name="line.1753"></a>
+<span class="sourceLineNo">1720</span>  private static abstract class StoppableThread extends Thread {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>    public StoppableThread(final ThreadGroup group, final String name) {<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>      super(group, name);<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>    }<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span><a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>    public abstract void sendStopSignal();<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span><a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>    public void awaitTermination() {<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      try {<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>        final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>        for (int i = 0; isAlive(); ++i) {<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>          sendStopSignal();<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>          join(250);<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>          if (i &gt; 0 &amp;&amp; (i % 8) == 0) {<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>            LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>              StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>          }<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>        }<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      } catch (InterruptedException e) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        LOG.warn(getName() + " join wait got interrupted", e);<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>      }<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>    }<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>  }<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span><a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>  // ==========================================================================<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>  //  Inline Chores (executors internal chores)<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>  // ==========================================================================<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>  private static abstract class InlineChore extends DelayedUtil.DelayedObject implements Runnable {<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>    private long timeout;<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>    public abstract int getTimeoutInterval();<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span><a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    protected void refreshTimeout() {<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>      this.timeout = EnvironmentEdgeManager.currentTime() + getTimeoutInterval();<a name="line.1753"></a>
 <span class="sourceLineNo">1754</span>    }<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>  }<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span><a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>  // ----------------------------------------------------------------------------<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>  // full set of procedures pending and completed to write a compacted<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>  // version of the log (in case is a log)?<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>  // will have the tracker saying everything is in the last log.<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>  // ----------------------------------------------------------------------------<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span><a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  private final class WorkerMonitor extends InlineChore {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.1768"></a>
+<span class="sourceLineNo">1755</span><a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    @Override<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>    public long getTimeout() {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      return timeout;<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>    }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>  }<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span><a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>  // ----------------------------------------------------------------------------<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>  // full set of procedures pending and completed to write a compacted<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>  // version of the log (in case is a log)?<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>  // will have the tracker saying everything is in the last log.<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>  // ----------------------------------------------------------------------------<a name="line.1768"></a>
 <span class="sourceLineNo">1769</span><a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span><a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span><a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    public WorkerMonitor() {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>      refreshConfig();<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span><a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    @Override<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>    public void run() {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      final int stuckCount = checkForStuckWorkers();<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>      checkThreadCount(stuckCount);<a name="line.1789"></a>
+<span class="sourceLineNo">1770</span>  private final class WorkerMonitor extends InlineChore {<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span><a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span><a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span><a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span><a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    public WorkerMonitor() {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      refreshConfig();<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>    }<a name="line.1789"></a>
 <span class="sourceLineNo">1790</span><a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      // refresh interval (poor man dynamic conf update)<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      refreshConfig();<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    }<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span><a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>    private int checkForStuckWorkers() {<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>      // check if any of the worker is stuck<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>      int stuckCount = 0;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>      for (WorkerThread worker: workerThreads) {<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>          continue;<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>        }<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span><a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>        // WARN the worker is stuck<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>        stuckCount++;<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>        LOG.warn("Worker stuck " + worker +<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>            " run time " + StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>      }<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>      return stuckCount;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    }<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span><a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    private void checkThreadCount(final int stuckCount) {<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>      // nothing to do if there are no runnable tasks<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) return;<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span><a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>      // add a new thread if the worker stuck percentage exceed the threshold limit<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>      // and every handler is active.<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>      final float stuckPerc = ((float)stuckCount) / workerThreads.size();<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>      if (stuckPerc &gt;= addWorkerStuckPercentage &amp;&amp;<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>          activeExecutorCount.get() == workerThreads.size()) {<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>        final WorkerThread worker = new WorkerThread(threadGroup);<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        workerThreads.add(worker);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>        worker.start();<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        LOG.debug("Added new worker thread " + worker);<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>      }<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    }<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span><a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>    private void refreshConfig() {<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>      addWorkerStuckPercentage = conf.getFloat(WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY,<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          DEFAULT_WORKER_ADD_STUCK_PERCENTAGE);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      timeoutInterval = conf.getInt(WORKER_MONITOR_INTERVAL_CONF_KEY,<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>        DEFAULT_WORKER_MONITOR_INTERVAL);<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>      stuckThreshold = conf.getInt(WORKER_STUCK_THRESHOLD_CONF_KEY,<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        DEFAULT_WORKER_STUCK_THRESHOLD);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    }<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span><a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>    @Override<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    public int getTimeoutInterval() {<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>      return timeoutInterval;<a name="line.1838"></a>
+<span class="sourceLineNo">1791</span>    @Override<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>    public void run() {<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>      final int stuckCount = checkForStuckWorkers();<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>      checkThreadCount(stuckCount);<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span><a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>      // refresh interval (poor man dynamic conf update)<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>      refreshConfig();<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    }<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span><a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>    private int checkForStuckWorkers() {<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>      // check if any of the worker is stuck<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>      int stuckCount = 0;<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>      for (WorkerThread worker: workerThreads) {<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          continue;<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>        }<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span><a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>        // WARN the worker is stuck<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>        stuckCount++;<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>        LOG.warn("Worker stuck " + worker +<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>            " run time " + StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>      }<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>      return stuckCount;<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>    }<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span><a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>    private void checkThreadCount(final int stuckCount) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>      // nothing to do if there are no runnable tasks<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) return;<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span><a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>      // add a new thread if th

<TRUNCATED>

[12/18] hbase-site git commit: Published site at 59e8b8e2ba4d403d042fe4cc02f8f9f80aad67af.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 b6b4cb6..a1495ff 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
@@ -1381,472 +1381,477 @@
 <span class="sourceLineNo">1373</span>        return;<a name="line.1373"></a>
 <span class="sourceLineNo">1374</span>      }<a name="line.1374"></a>
 <span class="sourceLineNo">1375</span><a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      // if the store is not running we are aborting<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      if (!store.isRunning()) return;<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span><a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>      // Commit the transaction<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span><a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>        scheduler.yield(procedure);<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        return;<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>      }<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span><a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>    } while (reExecute);<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span><a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>    // Submit the new subprocedures<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>      submitChildrenProcedures(subprocs);<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    }<a name="line.1395"></a>
+<span class="sourceLineNo">1376</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>      // Commit the transaction<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span><a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>      // if the store is not running we are aborting<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>      if (!store.isRunning()) return;<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span><a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>        scheduler.yield(procedure);<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        return;<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span><a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    } while (reExecute);<a name="line.1395"></a>
 <span class="sourceLineNo">1396</span><a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>    // if the procedure is complete and has a parent, count down the children latch<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>    if (procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      countDownChildren(procStack, procedure);<a name="line.1399"></a>
+<span class="sourceLineNo">1397</span>    // Submit the new subprocedures<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>      submitChildrenProcedures(subprocs);<a name="line.1399"></a>
 <span class="sourceLineNo">1400</span>    }<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>  }<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span><a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>  private Procedure[] initializeChildren(final RootProcedureState procStack,<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>    assert subprocs != null : "expected subprocedures";<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      final Procedure subproc = subprocs[i];<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>      if (subproc == null) {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>          new IllegalArgumentIOException(msg)));<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>        return null;<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>      }<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span><a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>      subproc.setRootProcId(rootProcId);<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>      subproc.setProcId(nextProcId());<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>      procStack.addSubProcedure(subproc);<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>    }<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span><a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>    if (!procedure.isFailed()) {<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>      switch (procedure.getState()) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>        case RUNNABLE:<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>          break;<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        case WAITING_TIMEOUT:<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>          timeoutExecutor.add(procedure);<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>          break;<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>        default:<a name="line.1432"></a>
+<span class="sourceLineNo">1401</span><a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>    // if the procedure is complete and has a parent, count down the children latch<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>    if (procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>      countDownChildren(procStack, procedure);<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>    }<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>  }<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span><a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>  private Procedure[] initializeChildren(final RootProcedureState procStack,<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>    assert subprocs != null : "expected subprocedures";<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>      final Procedure subproc = subprocs[i];<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>      if (subproc == null) {<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>          new IllegalArgumentIOException(msg)));<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>        return null;<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>      }<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span><a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>      subproc.setRootProcId(rootProcId);<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>      subproc.setProcId(nextProcId());<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>      procStack.addSubProcedure(subproc);<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span><a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>    if (!procedure.isFailed()) {<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      switch (procedure.getState()) {<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>        case RUNNABLE:<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1432"></a>
 <span class="sourceLineNo">1433</span>          break;<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>      }<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>    }<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>    return subprocs;<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>  }<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span><a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>  private void submitChildrenProcedures(final Procedure[] subprocs) {<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      final Procedure subproc = subprocs[i];<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      scheduler.addFront(subproc);<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>    }<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>  }<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span><a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>  private void countDownChildren(final RootProcedureState procStack, final Procedure procedure) {<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>    final Procedure parent = procedures.get(procedure.getParentProcId());<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>    if (parent == null) {<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      assert procStack.isRollingback();<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      return;<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>    }<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span><a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>    // If this procedure is the last child awake the parent procedure<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>    if (traceEnabled) {<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      LOG.trace(parent + " child is done: " + procedure);<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>    }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span><a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    if (parent.childrenCountDown() &amp;&amp; parent.getState() == ProcedureState.WAITING) {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>      parent.setState(ProcedureState.RUNNABLE);<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>      store.update(parent);<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>      scheduler.addFront(parent);<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>      if (traceEnabled) {<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>        LOG.trace(parent + " all the children finished their work, resume.");<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>      }<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>      return;<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>  }<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span><a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>  private void updateStoreOnExec(final RootProcedureState procStack,<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      if (LOG.isTraceEnabled()) {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>      }<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      store.insert(procedure, subprocs);<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    } else {<a name="line.1479"></a>
+<span class="sourceLineNo">1434</span>        case WAITING_TIMEOUT:<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>          timeoutExecutor.add(procedure);<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>          break;<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>        default:<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>          break;<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>      }<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>    }<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>    return subprocs;<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>  }<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span><a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>  private void submitChildrenProcedures(final Procedure[] subprocs) {<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>      final Procedure subproc = subprocs[i];<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>      scheduler.addFront(subproc);<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>    }<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>  }<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span><a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>  private void countDownChildren(final RootProcedureState procStack, final Procedure procedure) {<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>    final Procedure parent = procedures.get(procedure.getParentProcId());<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>    if (parent == null) {<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>      assert procStack.isRollingback();<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>      return;<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>    }<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span><a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    // If this procedure is the last child awake the parent procedure<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>    if (traceEnabled) {<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>      LOG.trace(parent + " child is done: " + procedure);<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>    }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span><a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>    if (parent.childrenCountDown() &amp;&amp; parent.getState() == ProcedureState.WAITING) {<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>      parent.setState(ProcedureState.RUNNABLE);<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>      store.update(parent);<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>      scheduler.addFront(parent);<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>      if (traceEnabled) {<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>        LOG.trace(parent + " all the children finished their work, resume.");<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>      }<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>      return;<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>    }<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>  }<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span><a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>  private void updateStoreOnExec(final RootProcedureState procStack,<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1479"></a>
 <span class="sourceLineNo">1480</span>      if (LOG.isTraceEnabled()) {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>        LOG.trace("Store update " + procedure);<a name="line.1481"></a>
+<span class="sourceLineNo">1481</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1481"></a>
 <span class="sourceLineNo">1482</span>      }<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>        // remove child procedures<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>        if (childProcIds != null) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>          store.delete(procedure, childProcIds);<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>            procedures.remove(childProcIds[i]);<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>          }<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>        } else {<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          store.update(procedure);<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>        }<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>      } else {<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>        store.update(procedure);<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>      }<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>    }<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>  }<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span><a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  private void handleInterruptedException(final Procedure proc, final InterruptedException e) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>    if (LOG.isTraceEnabled()) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>      LOG.trace("Interrupt during " + proc + ". suspend and retry it later.", e);<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>    }<a name="line.1503"></a>
+<span class="sourceLineNo">1483</span>      store.insert(procedure, subprocs);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>    } else {<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>      if (LOG.isTraceEnabled()) {<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>        LOG.trace("Store update " + procedure);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      }<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>        // remove child procedures<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>        if (childProcIds != null) {<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>          store.delete(procedure, childProcIds);<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>            procedures.remove(childProcIds[i]);<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>          }<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>        } else {<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>          store.update(procedure);<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        }<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>      } else {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>        store.update(procedure);<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>      }<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>    }<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>  }<a name="line.1503"></a>
 <span class="sourceLineNo">1504</span><a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>    // and the executor/store will be stopped.<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>  }<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span><a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>  private void execCompletionCleanup(final Procedure proc) {<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    final TEnvironment env = getEnvironment();<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    if (proc.holdLock(env) &amp;&amp; proc.hasLock(env)) {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      releaseLock(proc, true);<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>    }<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>    try {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>      proc.completionCleanup(env);<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>    } catch (Throwable e) {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>    }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>  }<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span><a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>  private void procedureFinished(final Procedure proc) {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    // call the procedure completion cleanup handler<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    execCompletionCleanup(proc);<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span><a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>    // update the executor internal state maps<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>    final ProcedureInfo procInfo = ProcedureUtil.convertToProcedureInfo(proc, proc.getNonceKey());<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>      procInfo.setClientAckTime(0);<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>    }<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>    completed.put(procInfo.getProcId(), procInfo);<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>    rollbackStack.remove(proc.getProcId());<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>    procedures.remove(proc.getProcId());<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>    // call the runnableSet completion cleanup handler<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>    try {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      scheduler.completionCleanup(proc);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>    } catch (Throwable e) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: " + proc, e);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>    }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span><a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    // Notify the listeners<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>  }<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span><a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>  // ==========================================================================<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>  //  Worker Thread<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>  // ==========================================================================<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>  private final class WorkerThread extends StoppableThread {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span><a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>    public WorkerThread(final ThreadGroup group) {<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      super(group, "ProcExecWorker-" + workerId.incrementAndGet());<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>    }<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span><a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>    @Override<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>    public void sendStopSignal() {<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      scheduler.signalAll();<a name="line.1563"></a>
+<span class="sourceLineNo">1505</span>  private void handleInterruptedException(final Procedure proc, final InterruptedException e) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>    if (LOG.isTraceEnabled()) {<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>      LOG.trace("Interrupt during " + proc + ". suspend and retry it later.", e);<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>    }<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span><a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>    // and the executor/store will be stopped.<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>  }<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span><a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>  private void execCompletionCleanup(final Procedure proc) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    final TEnvironment env = getEnvironment();<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    if (proc.holdLock(env) &amp;&amp; proc.hasLock(env)) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>      releaseLock(proc, true);<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>    }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>    try {<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      proc.completionCleanup(env);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>    } catch (Throwable e) {<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>    }<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>  }<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span><a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>  private void procedureFinished(final Procedure proc) {<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    // call the procedure completion cleanup handler<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    execCompletionCleanup(proc);<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span><a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>    // update the executor internal state maps<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>    final ProcedureInfo procInfo = ProcedureUtil.convertToProcedureInfo(proc, proc.getNonceKey());<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      procInfo.setClientAckTime(0);<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>    }<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span><a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>    completed.put(procInfo.getProcId(), procInfo);<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    rollbackStack.remove(proc.getProcId());<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>    procedures.remove(proc.getProcId());<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span><a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>    // call the runnableSet completion cleanup handler<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>    try {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>      scheduler.completionCleanup(proc);<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>    } catch (Throwable e) {<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: " + proc, e);<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>    }<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span><a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>    // Notify the listeners<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>  }<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span><a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>  // ==========================================================================<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>  //  Worker Thread<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>  // ==========================================================================<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>  private final class WorkerThread extends StoppableThread {<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span><a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    public WorkerThread(final ThreadGroup group) {<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>      super(group, "ProcExecWorker-" + workerId.incrementAndGet());<a name="line.1563"></a>
 <span class="sourceLineNo">1564</span>    }<a name="line.1564"></a>
 <span class="sourceLineNo">1565</span><a name="line.1565"></a>
 <span class="sourceLineNo">1566</span>    @Override<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    public void run() {<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>        final Procedure procedure = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>        if (procedure == null) continue;<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span><a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>        store.setRunningProcedureCount(activeExecutorCount.incrementAndGet());<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>        executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        try {<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          if (traceEnabled) {<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>            LOG.trace("Trying to start the execution of " + procedure);<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>          }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>          executeProcedure(procedure);<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>        } finally {<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>          store.setRunningProcedureCount(activeExecutorCount.decrementAndGet());<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>          lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>          executionStartTime.set(Long.MAX_VALUE);<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>        }<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      }<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      LOG.debug("Worker thread terminated " + this);<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>      workerThreads.remove(this);<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>    }<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span><a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>    /**<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>     * @return the time since the current procedure is running<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>     */<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    public long getCurrentRunTime() {<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    }<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span><a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    private boolean keepAlive(final long lastUpdate) {<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>      if (workerThreads.size() &lt;= corePoolSize) return true;<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      return (EnvironmentEdgeManager.currentTime() - lastUpdate) &lt; keepAliveTime;<a name="line.1600"></a>
+<span class="sourceLineNo">1567</span>    public void sendStopSignal() {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>      scheduler.signalAll();<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>    }<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span><a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    @Override<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>    public void run() {<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>        final Procedure procedure = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>        if (procedure == null) continue;<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span><a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>        store.setRunningProcedureCount(activeExecutorCount.incrementAndGet());<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>        executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>        try {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>          if (traceEnabled) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>            LOG.trace("Trying to start the execution of " + procedure);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>          }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>          executeProcedure(procedure);<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>        } finally {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          store.setRunningProcedureCount(activeExecutorCount.decrementAndGet());<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>          lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>          executionStartTime.set(Long.MAX_VALUE);<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>        }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      }<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      LOG.debug("Worker thread terminated " + this);<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      workerThreads.remove(this);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>    }<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span><a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>    /**<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>     * @return the time since the current procedure is running<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>     */<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    public long getCurrentRunTime() {<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1600"></a>
 <span class="sourceLineNo">1601</span>    }<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>  }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span><a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>  // ==========================================================================<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>  //  Timeout Thread<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>  // ==========================================================================<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>  private final class TimeoutExecutorThread extends StoppableThread {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    private final DelayQueue&lt;DelayedWithTimeout&gt; queue = new DelayQueue&lt;&gt;();<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span><a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    public TimeoutExecutorThread(final ThreadGroup group) {<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>      super(group, "ProcedureTimeoutExecutor");<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>    }<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span><a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    @Override<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>    public void sendStopSignal() {<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>      queue.add(DelayedUtil.DELAYED_POISON);<a name="line.1616"></a>
+<span class="sourceLineNo">1602</span><a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    private boolean keepAlive(final long lastUpdate) {<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      if (workerThreads.size() &lt;= corePoolSize) return true;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>      return (EnvironmentEdgeManager.currentTime() - lastUpdate) &lt; keepAliveTime;<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    }<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>  }<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span><a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>  // ==========================================================================<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>  //  Timeout Thread<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>  // ==========================================================================<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>  private final class TimeoutExecutorThread extends StoppableThread {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    private final DelayQueue&lt;DelayedWithTimeout&gt; queue = new DelayQueue&lt;&gt;();<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span><a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>    public TimeoutExecutorThread(final ThreadGroup group) {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>      super(group, "ProcedureTimeoutExecutor");<a name="line.1616"></a>
 <span class="sourceLineNo">1617</span>    }<a name="line.1617"></a>
 <span class="sourceLineNo">1618</span><a name="line.1618"></a>
 <span class="sourceLineNo">1619</span>    @Override<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    public void run() {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>      final boolean isTraceEnabled = LOG.isTraceEnabled();<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      while (isRunning()) {<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>        final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>        if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>          // the executor may be shutting down,<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>          // and the task is just the shutdown request<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>          continue;<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>        }<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span><a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>        if (isTraceEnabled) {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>          LOG.trace("Trying to start the execution of " + task);<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>        }<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span><a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>        // execute the task<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>        if (task instanceof InlineChore) {<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>          execInlineChore((InlineChore)task);<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        } else if (task instanceof DelayedProcedure) {<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>          execDelayedProcedure((DelayedProcedure)task);<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>        } else {<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>          LOG.error("CODE-BUG unknown timeout task type " + task);<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>        }<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>      }<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>    }<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span><a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>    public void add(final InlineChore chore) {<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      chore.refreshTimeout();<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>      queue.add(chore);<a name="line.1647"></a>
+<span class="sourceLineNo">1620</span>    public void sendStopSignal() {<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>      queue.add(DelayedUtil.DELAYED_POISON);<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>    }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span><a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    @Override<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    public void run() {<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      final boolean isTraceEnabled = LOG.isTraceEnabled();<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      while (isRunning()) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>        final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>        if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>          // the executor may be shutting down,<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>          // and the task is just the shutdown request<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>          continue;<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>        }<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span><a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>        if (isTraceEnabled) {<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>          LOG.trace("Trying to start the execution of " + task);<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        }<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span><a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>        // execute the task<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>        if (task instanceof InlineChore) {<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          execInlineChore((InlineChore)task);<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>        } else if (task instanceof DelayedProcedure) {<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>          execDelayedProcedure((DelayedProcedure)task);<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>        } else {<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>          LOG.error("CODE-BUG unknown timeout task type " + task);<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        }<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>      }<a name="line.1647"></a>
 <span class="sourceLineNo">1648</span>    }<a name="line.1648"></a>
 <span class="sourceLineNo">1649</span><a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    public void add(final Procedure procedure) {<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>      assert procedure.getState() == ProcedureState.WAITING_TIMEOUT;<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>      queue.add(new DelayedProcedure(procedure));<a name="line.1652"></a>
+<span class="sourceLineNo">1650</span>    public void add(final InlineChore chore) {<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>      chore.refreshTimeout();<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      queue.add(chore);<a name="line.1652"></a>
 <span class="sourceLineNo">1653</span>    }<a name="line.1653"></a>
 <span class="sourceLineNo">1654</span><a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    public boolean remove(final Procedure procedure) {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      return queue.remove(new DelayedProcedure(procedure));<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    }<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    private void execInlineChore(final InlineChore chore) {<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>      chore.run();<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      add(chore);<a name="line.1661"></a>
+<span class="sourceLineNo">1655</span>    public void add(final Procedure procedure) {<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>      assert procedure.getState() == ProcedureState.WAITING_TIMEOUT;<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>      queue.add(new DelayedProcedure(procedure));<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    }<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span><a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    public boolean remove(final Procedure procedure) {<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>      return queue.remove(new DelayedProcedure(procedure));<a name="line.1661"></a>
 <span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
 <span class="sourceLineNo">1663</span><a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>    private void execDelayedProcedure(final DelayedProcedure delayed) {<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      // TODO: treat this as a normal procedure, add it to the scheduler and<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      // let one of the workers handle it.<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      // Today we consider ProcedureInMemoryChore as InlineChores<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>      final Procedure procedure = delayed.getObject();<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      if (procedure instanceof ProcedureInMemoryChore) {<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>        executeInMemoryChore((ProcedureInMemoryChore)procedure);<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>        // if the procedure is in a waiting state again, put it back in the queue<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>        procedure.updateTimestamp();<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>        if (procedure.isWaiting()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>          delayed.setTimeout(procedure.getTimeoutTimestamp());<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>          queue.add(delayed);<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>        }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      } else {<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>        executeTimedoutProcedure(procedure);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      }<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    }<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span><a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>    private void executeInMemoryChore(final ProcedureInMemoryChore chore) {<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>      if (!chore.isWaiting()) return;<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span><a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      // The ProcedureInMemoryChore is a special case, and it acts as a chore.<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      // instead of bringing the Chore class in, we reuse this timeout thread for<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>      // this special case.<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      try {<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>        chore.periodicExecute(getEnvironment());<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      } catch (Throwable e) {<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>        LOG.error("Ignoring " + chore + " exception: " + e.getMessage(), e);<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      }<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>    }<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span><a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>    private void executeTimedoutProcedure(final Procedure proc) {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>      // The procedure received a timeout. if the procedure itself does not handle it,<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>      // call abort() and add the procedure back in the queue for rollback.<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>      if (proc.setTimeoutFailure(getEnvironment())) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>        long rootProcId = Procedure.getRootProcedureId(procedures, proc);<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>        RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>        procStack.abort();<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>        store.update(proc);<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        scheduler.addFront(proc);<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>    }<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>  }<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span><a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>  private static final class DelayedProcedure<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>      extends DelayedUtil.DelayedContainerWithTimestamp&lt;Procedure&gt; {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>    public DelayedProcedure(final Procedure procedure) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>      super(procedure, procedure.getTimeoutTimestamp());<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    }<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>  }<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span><a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>  private static abstract class StoppableThread extends Thread {<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    public StoppableThread(final ThreadGroup group, final String name) {<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>      super(group, name);<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>    }<a name="line.1718"></a>
+<span class="sourceLineNo">1664</span>    private void execInlineChore(final InlineChore chore) {<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>      chore.run();<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>      add(chore);<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>    }<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span><a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>    private void execDelayedProcedure(final DelayedProcedure delayed) {<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>      // TODO: treat this as a normal procedure, add it to the scheduler and<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      // let one of the workers handle it.<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>      // Today we consider ProcedureInMemoryChore as InlineChores<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      final Procedure procedure = delayed.getObject();<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>      if (procedure instanceof ProcedureInMemoryChore) {<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>        executeInMemoryChore((ProcedureInMemoryChore)procedure);<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>        // if the procedure is in a waiting state again, put it back in the queue<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>        procedure.updateTimestamp();<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>        if (procedure.isWaiting()) {<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>          delayed.setTimeout(procedure.getTimeoutTimestamp());<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>          queue.add(delayed);<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>        }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      } else {<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>        executeTimedoutProcedure(procedure);<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      }<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>    }<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span><a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>    private void executeInMemoryChore(final ProcedureInMemoryChore chore) {<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>      if (!chore.isWaiting()) return;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span><a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>      // The ProcedureInMemoryChore is a special case, and it acts as a chore.<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>      // instead of bringing the Chore class in, we reuse this timeout thread for<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      // this special case.<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>      try {<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>        chore.periodicExecute(getEnvironment());<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>      } catch (Throwable e) {<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>        LOG.error("Ignoring " + chore + " exception: " + e.getMessage(), e);<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      }<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>    }<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span><a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>    private void executeTimedoutProcedure(final Procedure proc) {<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>      // The procedure received a timeout. if the procedure itself does not handle it,<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>      // call abort() and add the procedure back in the queue for rollback.<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>      if (proc.setTimeoutFailure(getEnvironment())) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>        long rootProcId = Procedure.getRootProcedureId(procedures, proc);<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>        RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>        procStack.abort();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>        store.update(proc);<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>        scheduler.addFront(proc);<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>      }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>    }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  }<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span><a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>  private static final class DelayedProcedure<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      extends DelayedUtil.DelayedContainerWithTimestamp&lt;Procedure&gt; {<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>    public DelayedProcedure(final Procedure procedure) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>      super(procedure, procedure.getTimeoutTimestamp());<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>    }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>  }<a name="line.1718"></a>
 <span class="sourceLineNo">1719</span><a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    public abstract void sendStopSignal();<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span><a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>    public void awaitTermination() {<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>      try {<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>        for (int i = 0; isAlive(); ++i) {<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>          sendStopSignal();<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>          join(250);<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>          if (i &gt; 0 &amp;&amp; (i % 8) == 0) {<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>            LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>              StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>          }<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>        }<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>      } catch (InterruptedException e) {<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        LOG.warn(getName() + " join wait got interrupted", e);<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>      }<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>    }<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>  }<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span><a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>  // ==========================================================================<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>  //  Inline Chores (executors internal chores)<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>  // ==========================================================================<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>  private static abstract class InlineChore extends DelayedUtil.DelayedObject implements Runnable {<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>    private long timeout;<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span><a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>    public abstract int getTimeoutInterval();<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span><a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>    protected void refreshTimeout() {<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      this.timeout = EnvironmentEdgeManager.currentTime() + getTimeoutInterval();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    @Override<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    public long getTimeout() {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      return timeout;<a name="line.1753"></a>
+<span class="sourceLineNo">1720</span>  private static abstract class StoppableThread extends Thread {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>    public StoppableThread(final ThreadGroup group, final String name) {<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>      super(group, name);<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>    }<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span><a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>    public abstract void sendStopSignal();<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span><a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>    public void awaitTermination() {<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      try {<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>        final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>        for (int i = 0; isAlive(); ++i) {<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>          sendStopSignal();<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>          join(250);<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>          if (i &gt; 0 &amp;&amp; (i % 8) == 0) {<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>            LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>              StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>          }<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>        }<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      } catch (InterruptedException e) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        LOG.warn(getName() + " join wait got interrupted", e);<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>      }<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>    }<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>  }<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span><a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>  // ==========================================================================<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>  //  Inline Chores (executors internal chores)<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>  // ==========================================================================<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>  private static abstract class InlineChore extends DelayedUtil.DelayedObject implements Runnable {<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>    private long timeout;<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>    public abstract int getTimeoutInterval();<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span><a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    protected void refreshTimeout() {<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>      this.timeout = EnvironmentEdgeManager.currentTime() + getTimeoutInterval();<a name="line.1753"></a>
 <span class="sourceLineNo">1754</span>    }<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>  }<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span><a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>  // ----------------------------------------------------------------------------<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>  // full set of procedures pending and completed to write a compacted<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>  // version of the log (in case is a log)?<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>  // will have the tracker saying everything is in the last log.<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>  // ----------------------------------------------------------------------------<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span><a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  private final class WorkerMonitor extends InlineChore {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.1768"></a>
+<span class="sourceLineNo">1755</span><a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    @Override<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>    public long getTimeout() {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      return timeout;<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>    }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>  }<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span><a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>  // ----------------------------------------------------------------------------<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>  // full set of procedures pending and completed to write a compacted<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>  // version of the log (in case is a log)?<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>  // will have the tracker saying everything is in the last log.<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>  // ----------------------------------------------------------------------------<a name="line.1768"></a>
 <span class="sourceLineNo">1769</span><a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span><a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span><a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    public WorkerMonitor() {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>      refreshConfig();<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span><a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    @Override<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>    public void run() {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      final int stuckCount = checkForStuckWorkers();<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>      checkThreadCount(stuckCount);<a name="line.1789"></a>
+<span class="sourceLineNo">1770</span>  private final class WorkerMonitor extends InlineChore {<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span><a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span><a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span><a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span><a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    public WorkerMonitor() {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      refreshConfig();<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>    }<a name="line.1789"></a>
 <span class="sourceLineNo">1790</span><a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      // refresh interval (poor man dynamic conf update)<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      refreshConfig();<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    }<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span><a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>    private int checkForStuckWorkers() {<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>      // check if any of the worker is stuck<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>      int stuckCount = 0;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>      for (WorkerThread worker: workerThreads) {<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>          continue;<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>        }<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span><a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>        // WARN the worker is stuck<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>        stuckCount++;<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>        LOG.warn("Worker stuck " + worker +<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>            " run time " + StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>      }<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>      return stuckCount;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    }<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span><a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    private void checkThreadCount(final int stuckCount) {<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>      // nothing to do if there are no runnable tasks<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) return;<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span><a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>      // add a new thread if the worker stuck percentage exceed the threshold limit<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>      // and every handler is active.<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>      final float stuckPerc = ((float)stuckCount) / workerThreads.size();<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>      if (stuckPerc &gt;= addWorkerStuckPercentage &amp;&amp;<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>          activeExecutorCount.get() == workerThreads.size()) {<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>        final WorkerThread worker = new WorkerThread(threadGroup);<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        workerThreads.add(worker);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>        worker.start();<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        LOG.debug("Added new worker thread " + worker);<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>      }<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    }<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span><a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>    private void refreshConfig() {<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>      addWorkerStuckPercentage = conf.getFloat(WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY,<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          DEFAULT_WORKER_ADD_STUCK_PERCENTAGE);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      timeoutInterval = conf.getInt(WORKER_MONITOR_INTERVAL_CONF_KEY,<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>        DEFAULT_WORKER_MONITOR_INTERVAL);<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>      stuckThreshold = conf.getInt(WORKER_STUCK_THRESHOLD_CONF_KEY,<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        DEFAULT_WORKER_STUCK_THRESHOLD);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    }<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span><a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>    @Override<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    public int getTimeoutInterval() {<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>      return timeoutInterval;<a name="line.1838"></a>
+<span class="sourceLineNo">1791</span>    @Override<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>    public void run() {<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>      final int stuckCount = checkForStuckWorkers();<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>      checkThreadCount(stuckCount);<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span><a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>      // refresh interval (poor man dynamic conf update)<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>      refreshConfig();<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    }<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span><a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>    private int checkForStuckWorkers() {<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>      // check if any of the worker is stuck<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>      int stuckCount = 0;<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>      for (WorkerThread worker: workerThreads) {<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          continue;<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>        }<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span><a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>        // WARN the worker is stuck<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>        stuckCount++;<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>        LOG.warn("Worker stuck " + worker +<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>            " run time " + StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>      }<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>      return stuckCount;<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>    }<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span><a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>    private void checkThreadCount(final int stuckCount) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>      // nothing to do if there are no runnable tasks<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) return;<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span><a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>      // add a new thread if the worker stuck percentage exce

<TRUNCATED>

[07/18] hbase-site git commit: Published site at 59e8b8e2ba4d403d042fe4cc02f8f9f80aad67af.

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/799947ba/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 b6b4cb6..a1495ff 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.html
@@ -1381,472 +1381,477 @@
 <span class="sourceLineNo">1373</span>        return;<a name="line.1373"></a>
 <span class="sourceLineNo">1374</span>      }<a name="line.1374"></a>
 <span class="sourceLineNo">1375</span><a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      // if the store is not running we are aborting<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>      if (!store.isRunning()) return;<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span><a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>      // Commit the transaction<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span><a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>        scheduler.yield(procedure);<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        return;<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>      }<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span><a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>    } while (reExecute);<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span><a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>    // Submit the new subprocedures<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>      submitChildrenProcedures(subprocs);<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    }<a name="line.1395"></a>
+<span class="sourceLineNo">1376</span>      // TODO: The code here doesn't check if store is running before persisting to the store as<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      // it relies on the method call below to throw RuntimeException to wind up the stack and<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>      // executor thread to stop. The statement following the method call below seems to check if<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>      // store is not running, to prevent scheduling children procedures, re-execution or yield<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>      // of this procedure. This may need more scrutiny and subsequent cleanup in future<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>      // Commit the transaction<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      updateStoreOnExec(procStack, procedure, subprocs);<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span><a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>      // if the store is not running we are aborting<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>      if (!store.isRunning()) return;<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span><a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>      // if the procedure is kind enough to pass the slot to someone else, yield<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>      if (procedure.isRunnable() &amp;&amp; !suspended &amp;&amp;<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>          procedure.isYieldAfterExecutionStep(getEnvironment())) {<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>        scheduler.yield(procedure);<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        return;<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span><a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      assert (reExecute &amp;&amp; subprocs == null) || !reExecute;<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    } while (reExecute);<a name="line.1395"></a>
 <span class="sourceLineNo">1396</span><a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>    // if the procedure is complete and has a parent, count down the children latch<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>    if (procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      countDownChildren(procStack, procedure);<a name="line.1399"></a>
+<span class="sourceLineNo">1397</span>    // Submit the new subprocedures<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>      submitChildrenProcedures(subprocs);<a name="line.1399"></a>
 <span class="sourceLineNo">1400</span>    }<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>  }<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span><a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>  private Procedure[] initializeChildren(final RootProcedureState procStack,<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>    assert subprocs != null : "expected subprocedures";<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      final Procedure subproc = subprocs[i];<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>      if (subproc == null) {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>          new IllegalArgumentIOException(msg)));<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>        return null;<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>      }<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span><a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>      subproc.setRootProcId(rootProcId);<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>      subproc.setProcId(nextProcId());<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>      procStack.addSubProcedure(subproc);<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>    }<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span><a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>    if (!procedure.isFailed()) {<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>      switch (procedure.getState()) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>        case RUNNABLE:<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>          break;<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>        case WAITING_TIMEOUT:<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>          timeoutExecutor.add(procedure);<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>          break;<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>        default:<a name="line.1432"></a>
+<span class="sourceLineNo">1401</span><a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>    // if the procedure is complete and has a parent, count down the children latch<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>    if (procedure.isFinished() &amp;&amp; procedure.hasParent()) {<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>      countDownChildren(procStack, procedure);<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>    }<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>  }<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span><a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>  private Procedure[] initializeChildren(final RootProcedureState procStack,<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>    assert subprocs != null : "expected subprocedures";<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>    final long rootProcId = getRootProcedureId(procedure);<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>      final Procedure subproc = subprocs[i];<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>      if (subproc == null) {<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>        String msg = "subproc[" + i + "] is null, aborting the procedure";<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        procedure.setFailure(new RemoteProcedureException(msg,<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>          new IllegalArgumentIOException(msg)));<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>        return null;<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>      }<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span><a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>      assert subproc.getState() == ProcedureState.INITIALIZING : subproc;<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>      subproc.setParentProcId(procedure.getProcId());<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>      subproc.setRootProcId(rootProcId);<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>      subproc.setProcId(nextProcId());<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>      procStack.addSubProcedure(subproc);<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span><a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>    if (!procedure.isFailed()) {<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      procedure.setChildrenLatch(subprocs.length);<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      switch (procedure.getState()) {<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>        case RUNNABLE:<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>          procedure.setState(ProcedureState.WAITING);<a name="line.1432"></a>
 <span class="sourceLineNo">1433</span>          break;<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>      }<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>    }<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>    return subprocs;<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>  }<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span><a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>  private void submitChildrenProcedures(final Procedure[] subprocs) {<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      final Procedure subproc = subprocs[i];<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      scheduler.addFront(subproc);<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>    }<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>  }<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span><a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>  private void countDownChildren(final RootProcedureState procStack, final Procedure procedure) {<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>    final Procedure parent = procedures.get(procedure.getParentProcId());<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>    if (parent == null) {<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      assert procStack.isRollingback();<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      return;<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>    }<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span><a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>    // If this procedure is the last child awake the parent procedure<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>    if (traceEnabled) {<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      LOG.trace(parent + " child is done: " + procedure);<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>    }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span><a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>    if (parent.childrenCountDown() &amp;&amp; parent.getState() == ProcedureState.WAITING) {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>      parent.setState(ProcedureState.RUNNABLE);<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>      store.update(parent);<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>      scheduler.addFront(parent);<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>      if (traceEnabled) {<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>        LOG.trace(parent + " all the children finished their work, resume.");<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>      }<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>      return;<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    }<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>  }<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span><a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>  private void updateStoreOnExec(final RootProcedureState procStack,<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      if (LOG.isTraceEnabled()) {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>      }<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      store.insert(procedure, subprocs);<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    } else {<a name="line.1479"></a>
+<span class="sourceLineNo">1434</span>        case WAITING_TIMEOUT:<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>          timeoutExecutor.add(procedure);<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>          break;<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>        default:<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>          break;<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>      }<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>    }<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>    return subprocs;<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>  }<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span><a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>  private void submitChildrenProcedures(final Procedure[] subprocs) {<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>    for (int i = 0; i &lt; subprocs.length; ++i) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>      final Procedure subproc = subprocs[i];<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>      assert !procedures.containsKey(subproc.getProcId());<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>      procedures.put(subproc.getProcId(), subproc);<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>      scheduler.addFront(subproc);<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>    }<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>  }<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span><a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>  private void countDownChildren(final RootProcedureState procStack, final Procedure procedure) {<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>    final Procedure parent = procedures.get(procedure.getParentProcId());<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>    if (parent == null) {<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>      assert procStack.isRollingback();<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>      return;<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>    }<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span><a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    // If this procedure is the last child awake the parent procedure<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>    final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>    if (traceEnabled) {<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>      LOG.trace(parent + " child is done: " + procedure);<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>    }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span><a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>    if (parent.childrenCountDown() &amp;&amp; parent.getState() == ProcedureState.WAITING) {<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>      parent.setState(ProcedureState.RUNNABLE);<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>      store.update(parent);<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>      scheduler.addFront(parent);<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>      if (traceEnabled) {<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>        LOG.trace(parent + " all the children finished their work, resume.");<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>      }<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>      return;<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>    }<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>  }<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span><a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>  private void updateStoreOnExec(final RootProcedureState procStack,<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      final Procedure procedure, final Procedure[] subprocs) {<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>    if (subprocs != null &amp;&amp; !procedure.isFailed()) {<a name="line.1479"></a>
 <span class="sourceLineNo">1480</span>      if (LOG.isTraceEnabled()) {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>        LOG.trace("Store update " + procedure);<a name="line.1481"></a>
+<span class="sourceLineNo">1481</span>        LOG.trace("Stored " + procedure + ", children " + Arrays.toString(subprocs));<a name="line.1481"></a>
 <span class="sourceLineNo">1482</span>      }<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>        // remove child procedures<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>        if (childProcIds != null) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>          store.delete(procedure, childProcIds);<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>            procedures.remove(childProcIds[i]);<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>          }<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>        } else {<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          store.update(procedure);<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>        }<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>      } else {<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>        store.update(procedure);<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>      }<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>    }<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>  }<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span><a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>  private void handleInterruptedException(final Procedure proc, final InterruptedException e) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>    if (LOG.isTraceEnabled()) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>      LOG.trace("Interrupt during " + proc + ". suspend and retry it later.", e);<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>    }<a name="line.1503"></a>
+<span class="sourceLineNo">1483</span>      store.insert(procedure, subprocs);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>    } else {<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>      if (LOG.isTraceEnabled()) {<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>        LOG.trace("Store update " + procedure);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      }<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>      if (procedure.isFinished() &amp;&amp; !procedure.hasParent()) {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>        // remove child procedures<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>        final long[] childProcIds = procStack.getSubprocedureIds();<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>        if (childProcIds != null) {<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>          store.delete(procedure, childProcIds);<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>          for (int i = 0; i &lt; childProcIds.length; ++i) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>            procedures.remove(childProcIds[i]);<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>          }<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>        } else {<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>          store.update(procedure);<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>        }<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>      } else {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>        store.update(procedure);<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>      }<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>    }<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>  }<a name="line.1503"></a>
 <span class="sourceLineNo">1504</span><a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>    // and the executor/store will be stopped.<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>  }<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span><a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>  private void execCompletionCleanup(final Procedure proc) {<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>    final TEnvironment env = getEnvironment();<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    if (proc.holdLock(env) &amp;&amp; proc.hasLock(env)) {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      releaseLock(proc, true);<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>    }<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>    try {<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>      proc.completionCleanup(env);<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>    } catch (Throwable e) {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>    }<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>  }<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span><a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>  private void procedureFinished(final Procedure proc) {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    // call the procedure completion cleanup handler<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    execCompletionCleanup(proc);<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span><a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>    // update the executor internal state maps<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>    final ProcedureInfo procInfo = ProcedureUtil.convertToProcedureInfo(proc, proc.getNonceKey());<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>      procInfo.setClientAckTime(0);<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>    }<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span><a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>    completed.put(procInfo.getProcId(), procInfo);<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>    rollbackStack.remove(proc.getProcId());<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>    procedures.remove(proc.getProcId());<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span><a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>    // call the runnableSet completion cleanup handler<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>    try {<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      scheduler.completionCleanup(proc);<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>    } catch (Throwable e) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: " + proc, e);<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>    }<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span><a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>    // Notify the listeners<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>  }<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span><a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>  // ==========================================================================<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>  //  Worker Thread<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>  // ==========================================================================<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>  private final class WorkerThread extends StoppableThread {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span><a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>    public WorkerThread(final ThreadGroup group) {<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      super(group, "ProcExecWorker-" + workerId.incrementAndGet());<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>    }<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span><a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>    @Override<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>    public void sendStopSignal() {<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      scheduler.signalAll();<a name="line.1563"></a>
+<span class="sourceLineNo">1505</span>  private void handleInterruptedException(final Procedure proc, final InterruptedException e) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>    if (LOG.isTraceEnabled()) {<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>      LOG.trace("Interrupt during " + proc + ". suspend and retry it later.", e);<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>    }<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span><a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>    // NOTE: We don't call Thread.currentThread().interrupt()<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>    // because otherwise all the subsequent calls e.g. Thread.sleep() will throw<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>    // the InterruptedException. If the master is going down, we will be notified<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>    // and the executor/store will be stopped.<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>    // (The interrupted procedure will be retried on the next run)<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>  }<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span><a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>  private void execCompletionCleanup(final Procedure proc) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    final TEnvironment env = getEnvironment();<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    if (proc.holdLock(env) &amp;&amp; proc.hasLock(env)) {<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>      releaseLock(proc, true);<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>    }<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>    try {<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>      proc.completionCleanup(env);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>    } catch (Throwable e) {<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>      LOG.error("CODE-BUG: uncatched runtime exception for procedure: " + proc, e);<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>    }<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>  }<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span><a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>  private void procedureFinished(final Procedure proc) {<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    // call the procedure completion cleanup handler<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>    execCompletionCleanup(proc);<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span><a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>    // update the executor internal state maps<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>    final ProcedureInfo procInfo = ProcedureUtil.convertToProcedureInfo(proc, proc.getNonceKey());<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>    if (!proc.shouldWaitClientAck(getEnvironment())) {<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      procInfo.setClientAckTime(0);<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>    }<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span><a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>    completed.put(procInfo.getProcId(), procInfo);<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    rollbackStack.remove(proc.getProcId());<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>    procedures.remove(proc.getProcId());<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span><a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>    // call the runnableSet completion cleanup handler<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>    try {<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>      scheduler.completionCleanup(proc);<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>    } catch (Throwable e) {<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      // Catch NullPointerExceptions or similar errors...<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>      LOG.error("CODE-BUG: uncatched runtime exception for completion cleanup: " + proc, e);<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>    }<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span><a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>    // Notify the listeners<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>    sendProcedureFinishedNotification(proc.getProcId());<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>  }<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span><a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>  // ==========================================================================<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>  //  Worker Thread<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>  // ==========================================================================<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>  private final class WorkerThread extends StoppableThread {<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>    private final AtomicLong executionStartTime = new AtomicLong(Long.MAX_VALUE);<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span><a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>    public WorkerThread(final ThreadGroup group) {<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>      super(group, "ProcExecWorker-" + workerId.incrementAndGet());<a name="line.1563"></a>
 <span class="sourceLineNo">1564</span>    }<a name="line.1564"></a>
 <span class="sourceLineNo">1565</span><a name="line.1565"></a>
 <span class="sourceLineNo">1566</span>    @Override<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    public void run() {<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>        final Procedure procedure = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>        if (procedure == null) continue;<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span><a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>        store.setRunningProcedureCount(activeExecutorCount.incrementAndGet());<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>        executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        try {<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>          if (traceEnabled) {<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>            LOG.trace("Trying to start the execution of " + procedure);<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>          }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>          executeProcedure(procedure);<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>        } finally {<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>          store.setRunningProcedureCount(activeExecutorCount.decrementAndGet());<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>          lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>          executionStartTime.set(Long.MAX_VALUE);<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>        }<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      }<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      LOG.debug("Worker thread terminated " + this);<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>      workerThreads.remove(this);<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>    }<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span><a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>    /**<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>     * @return the time since the current procedure is running<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>     */<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    public long getCurrentRunTime() {<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>    }<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span><a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>    private boolean keepAlive(final long lastUpdate) {<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>      if (workerThreads.size() &lt;= corePoolSize) return true;<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      return (EnvironmentEdgeManager.currentTime() - lastUpdate) &lt; keepAliveTime;<a name="line.1600"></a>
+<span class="sourceLineNo">1567</span>    public void sendStopSignal() {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>      scheduler.signalAll();<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>    }<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span><a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    @Override<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>    public void run() {<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      final boolean traceEnabled = LOG.isTraceEnabled();<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>      long lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      while (isRunning() &amp;&amp; keepAlive(lastUpdate)) {<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>        final Procedure procedure = scheduler.poll(keepAliveTime, TimeUnit.MILLISECONDS);<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>        if (procedure == null) continue;<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span><a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>        store.setRunningProcedureCount(activeExecutorCount.incrementAndGet());<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>        executionStartTime.set(EnvironmentEdgeManager.currentTime());<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>        try {<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>          if (traceEnabled) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>            LOG.trace("Trying to start the execution of " + procedure);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>          }<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>          executeProcedure(procedure);<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>        } finally {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          store.setRunningProcedureCount(activeExecutorCount.decrementAndGet());<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>          lastUpdate = EnvironmentEdgeManager.currentTime();<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>          executionStartTime.set(Long.MAX_VALUE);<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>        }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      }<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      LOG.debug("Worker thread terminated " + this);<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      workerThreads.remove(this);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>    }<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span><a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>    /**<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>     * @return the time since the current procedure is running<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>     */<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    public long getCurrentRunTime() {<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      return EnvironmentEdgeManager.currentTime() - executionStartTime.get();<a name="line.1600"></a>
 <span class="sourceLineNo">1601</span>    }<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>  }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span><a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>  // ==========================================================================<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>  //  Timeout Thread<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>  // ==========================================================================<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>  private final class TimeoutExecutorThread extends StoppableThread {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    private final DelayQueue&lt;DelayedWithTimeout&gt; queue = new DelayQueue&lt;&gt;();<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span><a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    public TimeoutExecutorThread(final ThreadGroup group) {<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>      super(group, "ProcedureTimeoutExecutor");<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>    }<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span><a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    @Override<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>    public void sendStopSignal() {<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>      queue.add(DelayedUtil.DELAYED_POISON);<a name="line.1616"></a>
+<span class="sourceLineNo">1602</span><a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>    private boolean keepAlive(final long lastUpdate) {<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      if (workerThreads.size() &lt;= corePoolSize) return true;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>      return (EnvironmentEdgeManager.currentTime() - lastUpdate) &lt; keepAliveTime;<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    }<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>  }<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span><a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>  // ==========================================================================<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>  //  Timeout Thread<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>  // ==========================================================================<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>  private final class TimeoutExecutorThread extends StoppableThread {<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    private final DelayQueue&lt;DelayedWithTimeout&gt; queue = new DelayQueue&lt;&gt;();<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span><a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>    public TimeoutExecutorThread(final ThreadGroup group) {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>      super(group, "ProcedureTimeoutExecutor");<a name="line.1616"></a>
 <span class="sourceLineNo">1617</span>    }<a name="line.1617"></a>
 <span class="sourceLineNo">1618</span><a name="line.1618"></a>
 <span class="sourceLineNo">1619</span>    @Override<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    public void run() {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>      final boolean isTraceEnabled = LOG.isTraceEnabled();<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      while (isRunning()) {<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>        final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>        if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>          // the executor may be shutting down,<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>          // and the task is just the shutdown request<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>          continue;<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>        }<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span><a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>        if (isTraceEnabled) {<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>          LOG.trace("Trying to start the execution of " + task);<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>        }<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span><a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>        // execute the task<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>        if (task instanceof InlineChore) {<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>          execInlineChore((InlineChore)task);<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        } else if (task instanceof DelayedProcedure) {<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>          execDelayedProcedure((DelayedProcedure)task);<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>        } else {<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>          LOG.error("CODE-BUG unknown timeout task type " + task);<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>        }<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>      }<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>    }<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span><a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>    public void add(final InlineChore chore) {<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      chore.refreshTimeout();<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>      queue.add(chore);<a name="line.1647"></a>
+<span class="sourceLineNo">1620</span>    public void sendStopSignal() {<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>      queue.add(DelayedUtil.DELAYED_POISON);<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>    }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span><a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    @Override<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>    public void run() {<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>      final boolean isTraceEnabled = LOG.isTraceEnabled();<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      while (isRunning()) {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>        final DelayedWithTimeout task = DelayedUtil.takeWithoutInterrupt(queue);<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>        if (task == null || task == DelayedUtil.DELAYED_POISON) {<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>          // the executor may be shutting down,<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>          // and the task is just the shutdown request<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>          continue;<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>        }<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span><a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>        if (isTraceEnabled) {<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>          LOG.trace("Trying to start the execution of " + task);<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        }<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span><a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>        // execute the task<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>        if (task instanceof InlineChore) {<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          execInlineChore((InlineChore)task);<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>        } else if (task instanceof DelayedProcedure) {<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>          execDelayedProcedure((DelayedProcedure)task);<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>        } else {<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>          LOG.error("CODE-BUG unknown timeout task type " + task);<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        }<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>      }<a name="line.1647"></a>
 <span class="sourceLineNo">1648</span>    }<a name="line.1648"></a>
 <span class="sourceLineNo">1649</span><a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    public void add(final Procedure procedure) {<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>      assert procedure.getState() == ProcedureState.WAITING_TIMEOUT;<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>      queue.add(new DelayedProcedure(procedure));<a name="line.1652"></a>
+<span class="sourceLineNo">1650</span>    public void add(final InlineChore chore) {<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>      chore.refreshTimeout();<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      queue.add(chore);<a name="line.1652"></a>
 <span class="sourceLineNo">1653</span>    }<a name="line.1653"></a>
 <span class="sourceLineNo">1654</span><a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    public boolean remove(final Procedure procedure) {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      return queue.remove(new DelayedProcedure(procedure));<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    }<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    private void execInlineChore(final InlineChore chore) {<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>      chore.run();<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      add(chore);<a name="line.1661"></a>
+<span class="sourceLineNo">1655</span>    public void add(final Procedure procedure) {<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>      assert procedure.getState() == ProcedureState.WAITING_TIMEOUT;<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>      queue.add(new DelayedProcedure(procedure));<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>    }<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span><a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>    public boolean remove(final Procedure procedure) {<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>      return queue.remove(new DelayedProcedure(procedure));<a name="line.1661"></a>
 <span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
 <span class="sourceLineNo">1663</span><a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>    private void execDelayedProcedure(final DelayedProcedure delayed) {<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>      // TODO: treat this as a normal procedure, add it to the scheduler and<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      // let one of the workers handle it.<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      // Today we consider ProcedureInMemoryChore as InlineChores<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>      final Procedure procedure = delayed.getObject();<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>      if (procedure instanceof ProcedureInMemoryChore) {<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>        executeInMemoryChore((ProcedureInMemoryChore)procedure);<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>        // if the procedure is in a waiting state again, put it back in the queue<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>        procedure.updateTimestamp();<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>        if (procedure.isWaiting()) {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>          delayed.setTimeout(procedure.getTimeoutTimestamp());<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>          queue.add(delayed);<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>        }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      } else {<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>        executeTimedoutProcedure(procedure);<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      }<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    }<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span><a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>    private void executeInMemoryChore(final ProcedureInMemoryChore chore) {<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>      if (!chore.isWaiting()) return;<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span><a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      // The ProcedureInMemoryChore is a special case, and it acts as a chore.<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>      // instead of bringing the Chore class in, we reuse this timeout thread for<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>      // this special case.<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>      try {<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>        chore.periodicExecute(getEnvironment());<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      } catch (Throwable e) {<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>        LOG.error("Ignoring " + chore + " exception: " + e.getMessage(), e);<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      }<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>    }<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span><a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>    private void executeTimedoutProcedure(final Procedure proc) {<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>      // The procedure received a timeout. if the procedure itself does not handle it,<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>      // call abort() and add the procedure back in the queue for rollback.<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>      if (proc.setTimeoutFailure(getEnvironment())) {<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>        long rootProcId = Procedure.getRootProcedureId(procedures, proc);<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>        RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>        procStack.abort();<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>        store.update(proc);<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        scheduler.addFront(proc);<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>      }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>    }<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>  }<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span><a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>  private static final class DelayedProcedure<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>      extends DelayedUtil.DelayedContainerWithTimestamp&lt;Procedure&gt; {<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>    public DelayedProcedure(final Procedure procedure) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>      super(procedure, procedure.getTimeoutTimestamp());<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    }<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>  }<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span><a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>  private static abstract class StoppableThread extends Thread {<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    public StoppableThread(final ThreadGroup group, final String name) {<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>      super(group, name);<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>    }<a name="line.1718"></a>
+<span class="sourceLineNo">1664</span>    private void execInlineChore(final InlineChore chore) {<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>      chore.run();<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>      add(chore);<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>    }<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span><a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>    private void execDelayedProcedure(final DelayedProcedure delayed) {<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>      // TODO: treat this as a normal procedure, add it to the scheduler and<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>      // let one of the workers handle it.<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>      // Today we consider ProcedureInMemoryChore as InlineChores<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      final Procedure procedure = delayed.getObject();<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>      if (procedure instanceof ProcedureInMemoryChore) {<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>        executeInMemoryChore((ProcedureInMemoryChore)procedure);<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>        // if the procedure is in a waiting state again, put it back in the queue<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>        procedure.updateTimestamp();<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>        if (procedure.isWaiting()) {<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>          delayed.setTimeout(procedure.getTimeoutTimestamp());<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>          queue.add(delayed);<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>        }<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      } else {<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>        executeTimedoutProcedure(procedure);<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>      }<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>    }<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span><a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>    private void executeInMemoryChore(final ProcedureInMemoryChore chore) {<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>      if (!chore.isWaiting()) return;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span><a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>      // The ProcedureInMemoryChore is a special case, and it acts as a chore.<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>      // instead of bringing the Chore class in, we reuse this timeout thread for<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      // this special case.<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>      try {<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>        chore.periodicExecute(getEnvironment());<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>      } catch (Throwable e) {<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>        LOG.error("Ignoring " + chore + " exception: " + e.getMessage(), e);<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>      }<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>    }<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span><a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>    private void executeTimedoutProcedure(final Procedure proc) {<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>      // The procedure received a timeout. if the procedure itself does not handle it,<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>      // call abort() and add the procedure back in the queue for rollback.<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>      if (proc.setTimeoutFailure(getEnvironment())) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>        long rootProcId = Procedure.getRootProcedureId(procedures, proc);<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>        RootProcedureState procStack = rollbackStack.get(rootProcId);<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>        procStack.abort();<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>        store.update(proc);<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>        scheduler.addFront(proc);<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>      }<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>    }<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  }<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span><a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>  private static final class DelayedProcedure<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      extends DelayedUtil.DelayedContainerWithTimestamp&lt;Procedure&gt; {<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>    public DelayedProcedure(final Procedure procedure) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>      super(procedure, procedure.getTimeoutTimestamp());<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>    }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>  }<a name="line.1718"></a>
 <span class="sourceLineNo">1719</span><a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    public abstract void sendStopSignal();<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span><a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>    public void awaitTermination() {<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>      try {<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>        final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>        for (int i = 0; isAlive(); ++i) {<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>          sendStopSignal();<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>          join(250);<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>          if (i &gt; 0 &amp;&amp; (i % 8) == 0) {<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>            LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>              StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>          }<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>        }<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>      } catch (InterruptedException e) {<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        LOG.warn(getName() + " join wait got interrupted", e);<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>      }<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>    }<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>  }<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span><a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>  // ==========================================================================<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>  //  Inline Chores (executors internal chores)<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>  // ==========================================================================<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>  private static abstract class InlineChore extends DelayedUtil.DelayedObject implements Runnable {<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>    private long timeout;<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span><a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>    public abstract int getTimeoutInterval();<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span><a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>    protected void refreshTimeout() {<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      this.timeout = EnvironmentEdgeManager.currentTime() + getTimeoutInterval();<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    }<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    @Override<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    public long getTimeout() {<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>      return timeout;<a name="line.1753"></a>
+<span class="sourceLineNo">1720</span>  private static abstract class StoppableThread extends Thread {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>    public StoppableThread(final ThreadGroup group, final String name) {<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>      super(group, name);<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>    }<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span><a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>    public abstract void sendStopSignal();<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span><a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>    public void awaitTermination() {<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>      try {<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>        final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>        for (int i = 0; isAlive(); ++i) {<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>          sendStopSignal();<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>          join(250);<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>          if (i &gt; 0 &amp;&amp; (i % 8) == 0) {<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>            LOG.warn("Waiting termination of thread " + getName() + ", " +<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>              StringUtils.humanTimeDiff(EnvironmentEdgeManager.currentTime() - startTime));<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>          }<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>        }<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>      } catch (InterruptedException e) {<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>        LOG.warn(getName() + " join wait got interrupted", e);<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>      }<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>    }<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>  }<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span><a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>  // ==========================================================================<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>  //  Inline Chores (executors internal chores)<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>  // ==========================================================================<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>  private static abstract class InlineChore extends DelayedUtil.DelayedObject implements Runnable {<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>    private long timeout;<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span><a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>    public abstract int getTimeoutInterval();<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span><a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    protected void refreshTimeout() {<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>      this.timeout = EnvironmentEdgeManager.currentTime() + getTimeoutInterval();<a name="line.1753"></a>
 <span class="sourceLineNo">1754</span>    }<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>  }<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span><a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>  // ----------------------------------------------------------------------------<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>  // full set of procedures pending and completed to write a compacted<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>  // version of the log (in case is a log)?<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>  // will have the tracker saying everything is in the last log.<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>  // ----------------------------------------------------------------------------<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span><a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  private final class WorkerMonitor extends InlineChore {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.1768"></a>
+<span class="sourceLineNo">1755</span><a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    @Override<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>    public long getTimeout() {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      return timeout;<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>    }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>  }<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span><a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>  // ----------------------------------------------------------------------------<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>  // TODO-MAYBE: Should we provide a InlineChore to notify the store with the<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>  // full set of procedures pending and completed to write a compacted<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>  // version of the log (in case is a log)?<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>  // In theory no, procedures are have a short life, so at some point the store<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>  // will have the tracker saying everything is in the last log.<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>  // ----------------------------------------------------------------------------<a name="line.1768"></a>
 <span class="sourceLineNo">1769</span><a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span><a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span><a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>    public WorkerMonitor() {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>      refreshConfig();<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span><a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>    @Override<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>    public void run() {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      final int stuckCount = checkForStuckWorkers();<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>      checkThreadCount(stuckCount);<a name="line.1789"></a>
+<span class="sourceLineNo">1770</span>  private final class WorkerMonitor extends InlineChore {<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>    public static final String WORKER_MONITOR_INTERVAL_CONF_KEY =<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>        "hbase.procedure.worker.monitor.interval.msec";<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>    private static final int DEFAULT_WORKER_MONITOR_INTERVAL = 5000; // 5sec<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span><a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    public static final String WORKER_STUCK_THRESHOLD_CONF_KEY =<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>        "hbase.procedure.worker.stuck.threshold.msec";<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    private static final int DEFAULT_WORKER_STUCK_THRESHOLD = 10000; // 10sec<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span><a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>    public static final String WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY =<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>        "hbase.procedure.worker.add.stuck.percentage";<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    private static final float DEFAULT_WORKER_ADD_STUCK_PERCENTAGE = 0.5f; // 50% stuck<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span><a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>    private float addWorkerStuckPercentage = DEFAULT_WORKER_ADD_STUCK_PERCENTAGE;<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    private int timeoutInterval = DEFAULT_WORKER_MONITOR_INTERVAL;<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>    private int stuckThreshold = DEFAULT_WORKER_STUCK_THRESHOLD;<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span><a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>    public WorkerMonitor() {<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>      refreshConfig();<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>    }<a name="line.1789"></a>
 <span class="sourceLineNo">1790</span><a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      // refresh interval (poor man dynamic conf update)<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      refreshConfig();<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>    }<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span><a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>    private int checkForStuckWorkers() {<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>      // check if any of the worker is stuck<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>      int stuckCount = 0;<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>      for (WorkerThread worker: workerThreads) {<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>          continue;<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>        }<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span><a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>        // WARN the worker is stuck<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>        stuckCount++;<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>        LOG.warn("Worker stuck " + worker +<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>            " run time " + StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>      }<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>      return stuckCount;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    }<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span><a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    private void checkThreadCount(final int stuckCount) {<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>      // nothing to do if there are no runnable tasks<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) return;<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span><a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>      // add a new thread if the worker stuck percentage exceed the threshold limit<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>      // and every handler is active.<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>      final float stuckPerc = ((float)stuckCount) / workerThreads.size();<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>      if (stuckPerc &gt;= addWorkerStuckPercentage &amp;&amp;<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>          activeExecutorCount.get() == workerThreads.size()) {<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>        final WorkerThread worker = new WorkerThread(threadGroup);<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>        workerThreads.add(worker);<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>        worker.start();<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        LOG.debug("Added new worker thread " + worker);<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>      }<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>    }<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span><a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>    private void refreshConfig() {<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>      addWorkerStuckPercentage = conf.getFloat(WORKER_ADD_STUCK_PERCENTAGE_CONF_KEY,<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>          DEFAULT_WORKER_ADD_STUCK_PERCENTAGE);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>      timeoutInterval = conf.getInt(WORKER_MONITOR_INTERVAL_CONF_KEY,<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>        DEFAULT_WORKER_MONITOR_INTERVAL);<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>      stuckThreshold = conf.getInt(WORKER_STUCK_THRESHOLD_CONF_KEY,<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        DEFAULT_WORKER_STUCK_THRESHOLD);<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    }<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span><a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>    @Override<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    public int getTimeoutInterval() {<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>      return timeoutInterval;<a name="line.1838"></a>
+<span class="sourceLineNo">1791</span>    @Override<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>    public void run() {<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>      final int stuckCount = checkForStuckWorkers();<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>      checkThreadCount(stuckCount);<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span><a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>      // refresh interval (poor man dynamic conf update)<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>      refreshConfig();<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    }<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span><a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>    private int checkForStuckWorkers() {<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>      // check if any of the worker is stuck<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>      int stuckCount = 0;<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>      for (WorkerThread worker: workerThreads) {<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>        if (worker.getCurrentRunTime() &lt; stuckThreshold) {<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          continue;<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>        }<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span><a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>        // WARN the worker is stuck<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>        stuckCount++;<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>        LOG.warn("Worker stuck " + worker +<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>            " run time " + StringUtils.humanTimeDiff(worker.getCurrentRunTime()));<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>      }<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>      return stuckCount;<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>    }<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span><a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>    private void checkThreadCount(final int stuckCount) {<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>      // nothing to do if there are no runnable tasks<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>      if (stuckCount &lt; 1 || !scheduler.hasRunnables()) return;<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span><a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>      // add a new thread if the worker stuck percentage exceed the threshold limit<a name="line.1820"></a>
+<span class="sourceLineNo">1821<

<TRUNCATED>