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() > 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 < 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 < 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 <= 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 > 0 && (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 < 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 && !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<ProcedureWALFile> 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 < 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 < 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() > 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 < 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 < 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 <= 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 > 0 && (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 < 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 && !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<ProcedureWALFile> 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 < 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 < 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<ProcedureWALFile> 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 < 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 < 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 < 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 < 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<ProcedureWALFile> 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 < 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 < 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 < 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 < 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 < (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 < 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<Long> procIds = new HashSet<>();<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 < 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 < 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 < 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 > 0 && (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 < 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 < 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 < 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 < 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<ProcedureWALFile> 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 < 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 <= 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 <= 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 <= 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<FileStatus>() {<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() <= 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() > rootProcs.length &&<a name="line.573"></a>
-<span class="sourceLineNo">574</span> proc.getProcId() <= (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 | -> | 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 | -> | 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 < 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 < 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<ServerName>"),<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<ServerName>"),<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<String,Integer>")})<a name="line.72"></a>
+<span class="sourceLineNo">064</span> @org.jamon.annotations.Argument(name = "frags", type = "Map<String,Integer>"),<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<ServerName>"),<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<ServerName>"),<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<String,Integer> 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<String,Integer> 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<String,Integer> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<String,Integer> 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<String,Integer> 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<String,Integer> 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<String,Integer> frags;<a name="line.277"></a>
+<span class="sourceLineNo">278</span> public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map<String,Integer> 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<ServerName> servers;<a name="line.291"></a>
-<span class="sourceLineNo">292</span> public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List<ServerName> 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<ServerName> servers;<a name="line.298"></a>
+<span class="sourceLineNo">299</span> public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List<ServerName> 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<ServerName> deadServers;<a name="line.305"></a>
-<span class="sourceLineNo">306</span> public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set<ServerName> 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<ServerName> deadServers;<a name="line.312"></a>
+<span class="sourceLineNo">313</span> public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set<ServerName> 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<String,Integer> frags;<a name="line.333"></a>
-<span class="sourceLineNo">334</span> public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map<String,Integer> 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<ServerName> 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<ServerName> 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<String,Integer> frags;<a name="line.73"></a>
+<span class="sourceLineNo">065</span> private final Map<String,Integer> 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<ServerName> 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<ServerName> 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<ServerName>"),<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<ServerName>"),<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<String,Integer>")})<a name="line.72"></a>
+<span class="sourceLineNo">064</span> @org.jamon.annotations.Argument(name = "frags", type = "Map<String,Integer>"),<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<ServerName>"),<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<ServerName>"),<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<String,Integer> 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<String,Integer> 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<String,Integer> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<String,Integer> 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<String,Integer> 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<String,Integer> 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<String,Integer> frags;<a name="line.277"></a>
+<span class="sourceLineNo">278</span> public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map<String,Integer> 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<ServerName> servers;<a name="line.291"></a>
-<span class="sourceLineNo">292</span> public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List<ServerName> 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<ServerName> servers;<a name="line.298"></a>
+<span class="sourceLineNo">299</span> public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List<ServerName> 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<ServerName> deadServers;<a name="line.305"></a>
-<span class="sourceLineNo">306</span> public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set<ServerName> 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<ServerName> deadServers;<a name="line.312"></a>
+<span class="sourceLineNo">313</span> public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set<ServerName> 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<String,Integer> frags;<a name="line.333"></a>
-<span class="sourceLineNo">334</span> public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map<String,Integer> 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<ServerName>"),<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<ServerName>"),<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<String,Integer>")})<a name="line.72"></a>
+<span class="sourceLineNo">064</span> @org.jamon.annotations.Argument(name = "frags", type = "Map<String,Integer>"),<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<ServerName>"),<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<ServerName>"),<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<String,Integer> 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<String,Integer> 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<String,Integer> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<ServerName> 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<String,Integer> 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<String,Integer> 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<String,Integer> 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<String,Integer> frags;<a name="line.277"></a>
+<span class="sourceLineNo">278</span> public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map<String,Integer> 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<ServerName> servers;<a name="line.291"></a>
-<span class="sourceLineNo">292</span> public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List<ServerName> 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<ServerName> servers;<a name="line.298"></a>
+<span class="sourceLineNo">299</span> public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List<ServerName> 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<ServerName> deadServers;<a name="line.305"></a>
-<span class="sourceLineNo">306</span> public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set<ServerName> 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<ServerName> deadServers;<a name="line.312"></a>
+<span class="sourceLineNo">313</span> public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set<ServerName> 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<String,Integer> frags;<a name="line.333"></a>
-<span class="sourceLineNo">334</span> public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map<String,Integer> 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() > 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 < 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 < 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 <= 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 > 0 && (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 < 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 && !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<ProcedureWALFile> 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 < 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 < 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() > 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 < 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 < 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 <= 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 > 0 && (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 < 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 && !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<ProcedureWALFile> 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 < 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 < 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<ProcedureWALFile> 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 < 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 < 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 < 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 < 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<ProcedureWALFile> 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 < 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 < 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 < 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 < 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 < (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 < 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<Long> procIds = new HashSet<>();<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 < 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 < 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 < 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 > 0 && (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 < 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 < 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 < 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 < 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<ProcedureWALFile> 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 < 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 <= 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 <= 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 <= 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<FileStatus>() {<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() <= 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() > rootProcs.length &&<a name="line.573"></a>
-<span class="sourceLineNo">574</span> proc.getProcId() <= (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 | -> | 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 | -> | 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 < 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 < 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() && !suspended &&<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 && 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 && !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() && !suspended &&<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 && 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() && 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 && !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 < 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() && 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 < 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 < 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() && 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 && !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 < 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() && 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 && !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() && !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 < 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() && !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 < 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) && 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) && 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() && 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() <= corePoolSize) return true;<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span> return (EnvironmentEdgeManager.currentTime() - lastUpdate) < 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() && 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<DelayedWithTimeout> queue = new DelayQueue<>();<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() <= corePoolSize) return true;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span> return (EnvironmentEdgeManager.currentTime() - lastUpdate) < 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<DelayedWithTimeout> queue = new DelayQueue<>();<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<Procedure> {<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<Procedure> {<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 > 0 && (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 > 0 && (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() < 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 < 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 >= addWorkerStuckPercentage &&<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() < 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 < 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>
| <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>
| <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> </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> </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> </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> </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> </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> </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> </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> </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 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 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 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 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 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 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> </td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#setSuccessState--">setSuccessState</a></span>()</code> </td>
</tr>
</table>
<ul class="blockList">
@@ -376,13 +376,13 @@ extends <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTest
<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#line.407">addStackId</a>(int index)</pre>
</li>
</ul>
-<a name="setFinishedState--">
+<a name="setSuccessState--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>setFinishedState</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.TestProcedure.html#line.411">setFinishedState</a>()</pre>
+<h4>setSuccessState</h4>
+<pre>public void <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 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<<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>></pre>
</li>
</ul>
@@ -267,7 +267,7 @@ extends org.apache.hadoop.hbase.procedure2.SequentialProcedure<<a href="http:
<ul class="blockListLast">
<li class="blockList">
<h4>seqid</h4>
-<pre>private static long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html#line.899">seqid</a></pre>
+<pre>private static 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<<a href="http:
<ul class="blockListLast">
<li class="blockList">
<h4>TestSequentialProcedure</h4>
-<pre>public <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.TestSequentialProcedure.html#line.901">TestSequentialProcedure</a>()</pre>
+<pre>public <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<<a href="http:
<ul class="blockList">
<li class="blockList">
<h4>execute</h4>
-<pre>protected org.apache.hadoop.hbase.procedure2.Procedure[] <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> env)</pre>
+<pre>protected org.apache.hadoop.hbase.procedure2.Procedure[] <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> env)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>execute</code> in class <code>org.apache.hadoop.hbase.procedure2.Procedure<<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>></code></dd>
@@ -314,7 +314,7 @@ extends org.apache.hadoop.hbase.procedure2.SequentialProcedure<<a href="http:
<ul class="blockList">
<li class="blockList">
<h4>rollback</h4>
-<pre>protected void <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> env)</pre>
+<pre>protected void <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> env)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>rollback</code> in class <code>org.apache.hadoop.hbase.procedure2.Procedure<<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>></code></dd>
@@ -327,7 +327,7 @@ extends org.apache.hadoop.hbase.procedure2.SequentialProcedure<<a href="http:
<ul class="blockList">
<li class="blockList">
<h4>abort</h4>
-<pre>protected boolean <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> env)</pre>
+<pre>protected boolean <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> env)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>abort</code> in class <code>org.apache.hadoop.hbase.procedure2.Procedure<<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>></code></dd>
@@ -340,7 +340,7 @@ extends org.apache.hadoop.hbase.procedure2.SequentialProcedure<<a href="http:
<ul class="blockList">
<li class="blockList">
<h4>serializeStateData</h4>
-<pre>protected void <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> stream)
+<pre>protected void <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> 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<<a href="http:
<ul class="blockListLast">
<li class="blockList">
<h4>deserializeStateData</h4>
-<pre>protected void <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> stream)
+<pre>protected void <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> 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 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 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 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 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 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 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 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 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 <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 <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 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 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 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 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 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 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 <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.63">TestWALProcedureStore</a>()</pre>
+<pre>public <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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.76">setupConfig</a>(org.apache.hadoop.conf.Configuration conf)</pre>
+<pre>private void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.75">setupConfig</a>(org.apache.hadoop.conf.Configuration 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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.81">setUp</a>()
+<pre>public void <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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.96">tearDown</a>()
+<pre>public void <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 void <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 loader)
+<pre>private void <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 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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.106">testEmptyRoll</a>()
+<pre>public void <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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.116">testRestartWithoutData</a>()
+<pre>public void <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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.131">trackersLoadedForAllOldLogs</a>()
+<pre>public void <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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.147">testWalCleanerSequentialClean</a>()
+<pre>public void <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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.176">testWalCleanerNoHoles</a>()
+<pre>public void <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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.197">testWalCleanerUpdates</a>()
+<pre>public void <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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.213">testWalCleanerUpdatesDontLeaveHoles</a>()
+<pre>public void <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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.236">testWalCleanerWithEmptyRolls</a>()
+<pre>public void <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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.266">testEmptyLogLoad</a>()
+<pre>public void <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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.275">testLoad</a>()
+<pre>public void <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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.316">testNoTrailerDoubleRestart</a>()
+<pre>public void <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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.368">testProcIdHoles</a>()
+<pre>public void <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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.394">testCorruptedTrailer</a>()
+<pre>public void <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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.414">assertUpdated</a>(org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker tracker,
+<pre>private static void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.413">assertUpdated</a>(org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker tracker,
org.apache.hadoop.hbase.procedure2.Procedure[] procs,
int[] updatedProcs,
int[] 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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.426">assertDeleted</a>(org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker tracker,
+<pre>private static void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.425">assertDeleted</a>(org.apache.hadoop.hbase.procedure2.store.ProcedureStoreTracker tracker,
org.apache.hadoop.hbase.procedure2.Procedure[] procs,
int[] deletedProcs,
int[] 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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.441">testCorruptedTrailersRebuild</a>()
+<pre>public void <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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.499">testCorruptedEntries</a>()
+<pre>public void <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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.523">testCorruptedProcedures</a>()
+<pre>public void <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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.579">testWalReplayOrder_AB_A</a>()
+<pre>public void <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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.622">testWalReplayOrder_ABC_BAD</a>()
+<pre>public void <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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.685">testRollAndRemove</a>()
+<pre>public void <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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.715">testFileNotFoundDuringLeaseRecovery</a>()
+<pre>public void <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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.758">testLoadChildren</a>()
+<pre>public void <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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.794">testBatchDelete</a>()
+<pre>public void <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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.841">testBatchInsert</a>()
+<pre>public void <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 <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.LoadCounter.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureTestingUtility.LoadCounter</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.859">restartAndAssert</a>(long maxProcId,
+<pre>private <a href="../../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureTestingUtility.LoadCounter.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureTestingUtility.LoadCounter</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.858">restartAndAssert</a>(long maxProcId,
long runnableCount,
int completedCount,
int 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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.865">corruptLog</a>(org.apache.hadoop.fs.FileStatus logFile,
+<pre>private void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.864">corruptLog</a>(org.apache.hadoop.fs.FileStatus logFile,
long 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 void <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><<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>> procIds)
+<pre>private void <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><<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>> 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 void <a href="../../../../../../../src-html/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.html#line.887">assertEmptyLogDir</a>()</pre>
+<pre>private void <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() && !suspended &&<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 && 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 && !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() && !suspended &&<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 && 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() && 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 && !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 < 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() && 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 < 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 < 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() && 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 && !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 < 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() && 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 && !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() && !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 < 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() && !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 < 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) && 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) && 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() && 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() <= corePoolSize) return true;<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span> return (EnvironmentEdgeManager.currentTime() - lastUpdate) < 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() && 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<DelayedWithTimeout> queue = new DelayQueue<>();<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() <= corePoolSize) return true;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span> return (EnvironmentEdgeManager.currentTime() - lastUpdate) < 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<DelayedWithTimeout> queue = new DelayQueue<>();<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<Procedure> {<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<Procedure> {<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 > 0 && (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 > 0 && (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() < 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 < 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 >= addWorkerStuckPercentage &&<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() < 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 < 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() && !suspended &&<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 && 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 && !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() && !suspended &&<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 && 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() && 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 && !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 < 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() && 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 < 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 < 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() && 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 && !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 < 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() && 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 && !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() && !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 < 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() && !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 < 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) && 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) && 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() && 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() <= corePoolSize) return true;<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span> return (EnvironmentEdgeManager.currentTime() - lastUpdate) < 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() && 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<DelayedWithTimeout> queue = new DelayQueue<>();<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() <= corePoolSize) return true;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span> return (EnvironmentEdgeManager.currentTime() - lastUpdate) < 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<DelayedWithTimeout> queue = new DelayQueue<>();<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<Procedure> {<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<Procedure> {<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 > 0 && (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 > 0 && (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() < 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 < 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 >= addWorkerStuckPercentage &&<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() < 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 < 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() && !suspended &&<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 && 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 && !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() && !suspended &&<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 && 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() && 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 && !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 < 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() && 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 < 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 < 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() && 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 && !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 < 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() && 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 && !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() && !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 < 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() && !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 < 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) && 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) && 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() && 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() <= corePoolSize) return true;<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span> return (EnvironmentEdgeManager.currentTime() - lastUpdate) < 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() && 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<DelayedWithTimeout> queue = new DelayQueue<>();<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() <= corePoolSize) return true;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span> return (EnvironmentEdgeManager.currentTime() - lastUpdate) < 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<DelayedWithTimeout> queue = new DelayQueue<>();<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<Procedure> {<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<Procedure> {<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 > 0 && (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 > 0 && (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() < 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 < 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 >= addWorkerStuckPercentage &&<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() < 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 < 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() && !suspended &&<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 && 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 && !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() && !suspended &&<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 && 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() && 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 && !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 < 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() && 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 < 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 < 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() && 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 && !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 < 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() && 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 && !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() && !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 < 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() && !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 < 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) && 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) && 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() && 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() <= corePoolSize) return true;<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span> return (EnvironmentEdgeManager.currentTime() - lastUpdate) < 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() && 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<DelayedWithTimeout> queue = new DelayQueue<>();<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() <= corePoolSize) return true;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span> return (EnvironmentEdgeManager.currentTime() - lastUpdate) < 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<DelayedWithTimeout> queue = new DelayQueue<>();<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<Procedure> {<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<Procedure> {<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 > 0 && (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 > 0 && (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() < 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 < 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 >= addWorkerStuckPercentage &&<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() < 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 < 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 <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 <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 <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><<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>> <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 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 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 <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 <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 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 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 <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><<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.158">m_servers</a></pre>
+<h4>m_catalogJanitorEnabled</h4>
+<pre>private 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 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 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 <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 <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><<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_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 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 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 <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><<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.192">m_deadServers</a></pre>
+<h4>m_format</h4>
+<pre>private <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 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 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 <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 <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><<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.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 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 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 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 <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 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 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 <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 <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 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 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 <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><<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>> <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 <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 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 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 <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.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 void <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> assignmentManager)</pre>
+<h4>setFrags</h4>
+<pre>public void <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><<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>> frags)</pre>
</li>
</ul>
-<a name="getAssignmentManager--">
+<a name="getFrags--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>getAssignmentManager</h4>
-<pre>public <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.120">getAssignmentManager</a>()</pre>
+<h4>getFrags</h4>
+<pre>public <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><<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>> <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 boolean <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 boolean <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 void <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> format)</pre>
+<h4>setServerManager</h4>
+<pre>public void <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> serverManager)</pre>
</li>
</ul>
-<a name="getFormat--">
+<a name="getServerManager--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>getFormat</h4>
-<pre>public <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.137">getFormat</a>()</pre>
+<h4>getServerManager</h4>
+<pre>public <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.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 boolean <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 boolean <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 void <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><<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> servers)</pre>
+<h4>setCatalogJanitorEnabled</h4>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.148">setCatalogJanitorEnabled</a>(boolean catalogJanitorEnabled)</pre>
</li>
</ul>
-<a name="getServers--">
+<a name="getCatalogJanitorEnabled--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>getServers</h4>
-<pre>public <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><<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.154">getServers</a>()</pre>
+<h4>getCatalogJanitorEnabled</h4>
+<pre>public boolean <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 boolean <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 boolean <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 void <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> metaLocation)</pre>
+<h4>setServers</h4>
+<pre>public void <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><<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> servers)</pre>
</li>
</ul>
-<a name="getMetaLocation--">
+<a name="getServers--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>getMetaLocation</h4>
-<pre>public <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.171">getMetaLocation</a>()</pre>
+<h4>getServers</h4>
+<pre>public <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><<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.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 boolean <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 boolean <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 void <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><<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> deadServers)</pre>
+<h4>setFormat</h4>
+<pre>public void <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> format)</pre>
</li>
</ul>
-<a name="getDeadServers--">
+<a name="getFormat--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>getDeadServers</h4>
-<pre>public <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><<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.188">getDeadServers</a>()</pre>
+<h4>getFormat</h4>
+<pre>public <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.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 boolean <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 boolean <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 void <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> serverManager)</pre>
+<h4>setDeadServers</h4>
+<pre>public void <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><<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> deadServers)</pre>
</li>
</ul>
-<a name="getServerManager--">
+<a name="getDeadServers--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>getServerManager</h4>
-<pre>public <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.205">getServerManager</a>()</pre>
+<h4>getDeadServers</h4>
+<pre>public <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><<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.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 boolean <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 boolean <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 void <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.216">setCatalogJanitorEnabled</a>(boolean catalogJanitorEnabled)</pre>
+<h4>setAssignmentManager</h4>
+<pre>public void <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> assignmentManager)</pre>
</li>
</ul>
-<a name="getCatalogJanitorEnabled--">
+<a name="getAssignmentManager--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>getCatalogJanitorEnabled</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.222">getCatalogJanitorEnabled</a>()</pre>
+<h4>getAssignmentManager</h4>
+<pre>public <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.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 boolean <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 boolean <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 void <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> filter)</pre>
+<h4>setMetaLocation</h4>
+<pre>public void <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> metaLocation)</pre>
</li>
</ul>
-<a name="getFilter--">
+<a name="getMetaLocation--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>getFilter</h4>
-<pre>public <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.239">getFilter</a>()</pre>
+<h4>getMetaLocation</h4>
+<pre>public <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.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 boolean <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 boolean <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 void <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><<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>> frags)</pre>
+<h4>setFilter</h4>
+<pre>public void <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> filter)</pre>
</li>
</ul>
-<a name="getFrags--">
+<a name="getFilter--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>getFrags</h4>
-<pre>public <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><<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>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.256">getFrags</a>()</pre>
+<h4>getFilter</h4>
+<pre>public <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.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 boolean <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 boolean <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 <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 <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><<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>> <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 <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 <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 <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><<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.291">servers</a></pre>
+<h4>catalogJanitorEnabled</h4>
+<pre>protected 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 <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 <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><<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">servers</a></pre>
</li>
</ul>
-<a name="deadServers">
+<a name="format">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>deadServers</h4>
-<pre>protected <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><<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.305">deadServers</a></pre>
+<h4>format</h4>
+<pre>protected <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 <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 <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><<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.312">deadServers</a></pre>
</li>
</ul>
-<a name="catalogJanitorEnabled">
+<a name="assignmentManager">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>catalogJanitorEnabled</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.319">catalogJanitorEnabled</a></pre>
+<h4>assignmentManager</h4>
+<pre>protected <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 <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 <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 <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><<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>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.333">frags</a></pre>
+<h4>filter</h4>
+<pre>protected <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 <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a> <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> p_assignmentManager)</pre>
+<h4>setFrags</h4>
+<pre>public final <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a> <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><<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>> 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 <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a> <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> p_format)</pre>
+<h4>setServerManager</h4>
+<pre>public final <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a> <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> 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 <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a> <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><<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> p_servers)</pre>
+<h4>setCatalogJanitorEnabled</h4>
+<pre>public final <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.292">setCatalogJanitorEnabled</a>(boolean 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 <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a> <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> p_metaLocation)</pre>
+<h4>setServers</h4>
+<pre>public final <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a> <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><<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> 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 <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a> <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><<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> p_deadServers)</pre>
+<h4>setFormat</h4>
+<pre>public final <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a> <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> 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 <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a> <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> p_serverManager)</pre>
+<h4>setDeadServers</h4>
+<pre>public final <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a> <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><<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>> 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 <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.320">setCatalogJanitorEnabled</a>(boolean p_catalogJanitorEnabled)</pre>
+<h4>setAssignmentManager</h4>
+<pre>public final <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a> <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> 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 <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a> <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> p_filter)</pre>
+<h4>setMetaLocation</h4>
+<pre>public final <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a> <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> 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 <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a> <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><<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>> p_frags)</pre>
+<h4>setFilter</h4>
+<pre>public final <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a> <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> 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 <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 <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 <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><<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>> <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 <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 <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 <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><<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.67">servers</a></pre>
+<h4>catalogJanitorEnabled</h4>
+<pre>private final 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 <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 <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><<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">servers</a></pre>
</li>
</ul>
-<a name="deadServers">
+<a name="format">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>deadServers</h4>
-<pre>private final <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><<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.69">deadServers</a></pre>
+<h4>format</h4>
+<pre>private final <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 <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 <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><<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.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 boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.71">catalogJanitorEnabled</a></pre>
+<h4>assignmentManager</h4>
+<pre>private final <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 <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 <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 <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><<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>> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.73">frags</a></pre>
+<h4>filter</h4>
+<pre>private final <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 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 <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 <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 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 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 <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 <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 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 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 <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 <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 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 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 boolean <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 void <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> format)</pre>
+<h4>setBcv</h4>
+<pre>public void <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> bcv)</pre>
</li>
</ul>
-<a name="getFormat--">
+<a name="getBcv--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>getFormat</h4>
-<pre>public <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.96">getFormat</a>()</pre>
+<h4>getBcv</h4>
+<pre>public <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.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 boolean <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 boolean <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 void <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> bcv)</pre>
+<h4>setBcn</h4>
+<pre>public void <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> bcn)</pre>
</li>
</ul>
-<a name="getBcv--">
+<a name="getBcn--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>getBcv</h4>
-<pre>public <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.113">getBcv</a>()</pre>
+<h4>getBcn</h4>
+<pre>public <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.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 boolean <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 boolean <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 void <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> bcn)</pre>
+<h4>setFormat</h4>
+<pre>public void <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> format)</pre>
</li>
</ul>
-<a name="getBcn--">
+<a name="getFormat--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>getBcn</h4>
-<pre>public <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.130">getBcn</a>()</pre>
+<h4>getFormat</h4>
+<pre>public <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.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 boolean <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 boolean <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 <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 <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 <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 <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 <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 <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 <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 <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a> <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> 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 <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a> <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> p_format)</pre>
+<h4>setBcv</h4>
+<pre>public final <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a> <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> 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 <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a> <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> p_bcv)</pre>
+<h4>setBcn</h4>
+<pre>public final <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a> <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> 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 <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a> <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> p_bcn)</pre>
+<h4>setFormat</h4>
+<pre>public final <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a> <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> 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 <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 <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 <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 <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 <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 <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 <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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>
| <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="" /> 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="" /> 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="" /> 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="" /> 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 static final <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 static final <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 static final <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><<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>></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 <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> procedure)</pre>
+<pre>public <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> 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 long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html#line.1743">timeout</a></pre>
+<pre>private 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 <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html#line.1742">InlineChore</a>()</pre>
+<pre>private <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 int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html#line.1745">getTimeoutInterval</a>()</pre>
+<pre>public abstract int <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html#line.1747">refreshTimeout</a>()</pre>
+<pre>protected void <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 long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.InlineChore.html#line.1752">getTimeout</a>()</pre>
+<pre>public long <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> in interface <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 <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> group,
+<pre>public <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> 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> 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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html#line.1720">sendStopSignal</a>()</pre>
+<pre>public abstract void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.StoppableThread.html#line.1722">awaitTermination</a>()</pre>
+<pre>public void <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 <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><<a href="../../../../../org/apache/hadoop/hbase/procedure2/util/DelayedUtil.DelayedWithTimeout.html" title="interface in org.apache.hadoop.hbase.procedure2.util">DelayedUtil.DelayedWithTimeout</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1608">queue</a></pre>
+<pre>private final <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><<a href="../../../../../org/apache/hadoop/hbase/procedure2/util/DelayedUtil.DelayedWithTimeout.html" title="interface in org.apache.hadoop.hbase.procedure2.util">DelayedUtil.DelayedWithTimeout</a>> <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 <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> group)</pre>
+<pre>public <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> 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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1615">sendStopSignal</a>()</pre>
+<pre>public void <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> in class <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.TimeoutExecutorThread.html#line.1620">run</a>()</pre>
+<pre>public void <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> in interface <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 void <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> chore)</pre>
+<pre>public void <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> 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 void <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> procedure)</pre>
+<pre>public void <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> 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 boolean <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> procedure)</pre>
+<pre>public boolean <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> 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 void <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> chore)</pre>
+<pre>private void <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> 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 void <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> delayed)</pre>
+<pre>private void <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> 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 void <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> chore)</pre>
+<pre>private void <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> 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 void <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> proc)</pre>
+<pre>private void <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> 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 <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 <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 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 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 <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 <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 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 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 <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 <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 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 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 float <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1778">addWorkerStuckPercentage</a></pre>
+<pre>private 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 int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1779">timeoutInterval</a></pre>
+<pre>private 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 int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1780">stuckThreshold</a></pre>
+<pre>private 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 <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1782">WorkerMonitor</a>()</pre>
+<pre>public <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1787">run</a>()</pre>
+<pre>public void <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 int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1795">checkForStuckWorkers</a>()</pre>
+<pre>private int <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1811">checkThreadCount</a>(int stuckCount)</pre>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1816">checkThreadCount</a>(int 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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1827">refreshConfig</a>()</pre>
+<pre>private void <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 int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerMonitor.html#line.1837">getTimeoutInterval</a>()</pre>
+<pre>public int <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> in class <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 <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 <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 <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> group)</pre>
+<pre>public <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> 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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1562">sendStopSignal</a>()</pre>
+<pre>public void <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> in class <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1567">run</a>()</pre>
+<pre>public void <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> in interface <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 long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1594">getCurrentRunTime</a>()</pre>
+<pre>public long <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 boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1598">keepAlive</a>(long lastUpdate)</pre>
+<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureExecutor.WorkerThread.html#line.1603">keepAlive</a>(long 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 <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/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> procStack,
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/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> procStack,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a> procedure,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[] 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 void <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>[] subprocs)</pre>
+<pre>private void <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>[] 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 void <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> procStack,
+<pre>private void <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> procStack,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a> 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 void <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> procStack,
+<pre>private void <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> procStack,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a> procedure,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[] 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 void <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> proc,
+<pre>private void <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> 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> 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 void <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> proc)</pre>
+<pre>private void <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> 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 void <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> proc)</pre>
+<pre>private void <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> 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() && !suspended &&<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 && 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 && !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() && !suspended &&<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 && 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() && 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 && !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 < 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() && 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 < 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 < 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() && 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 && !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 < 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() && 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 && !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() && !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 < 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() && !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 < 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) && 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) && 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() && 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() <= corePoolSize) return true;<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span> return (EnvironmentEdgeManager.currentTime() - lastUpdate) < 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() && 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<DelayedWithTimeout> queue = new DelayQueue<>();<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() <= corePoolSize) return true;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span> return (EnvironmentEdgeManager.currentTime() - lastUpdate) < 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<DelayedWithTimeout> queue = new DelayQueue<>();<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<Procedure> {<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<Procedure> {<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 > 0 && (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 > 0 && (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() < 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 < 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 >= addWorkerStuckPercentage &&<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() < 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 < 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() && !suspended &&<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 && 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 && !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() && !suspended &&<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 && 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() && 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 && !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 < 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() && 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 < 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 < 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() && 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 && !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 < 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() && 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 && !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() && !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 < 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() && !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 < 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) && 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) && 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() && 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() <= corePoolSize) return true;<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span> return (EnvironmentEdgeManager.currentTime() - lastUpdate) < 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() && 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<DelayedWithTimeout> queue = new DelayQueue<>();<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() <= corePoolSize) return true;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span> return (EnvironmentEdgeManager.currentTime() - lastUpdate) < 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<DelayedWithTimeout> queue = new DelayQueue<>();<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<Procedure> {<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<Procedure> {<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 > 0 && (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 > 0 && (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() < 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 < 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 >= addWorkerStuckPercentage &&<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() < 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 < 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() && !suspended &&<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 && 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 && !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() && !suspended &&<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 && 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() && 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 && !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 < 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() && 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 < 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 < 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() && 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 && !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 < 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() && 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 && !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() && !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 < 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() && !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 < 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) && 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) && 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() && 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() <= corePoolSize) return true;<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span> return (EnvironmentEdgeManager.currentTime() - lastUpdate) < 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() && 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<DelayedWithTimeout> queue = new DelayQueue<>();<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() <= corePoolSize) return true;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span> return (EnvironmentEdgeManager.currentTime() - lastUpdate) < 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<DelayedWithTimeout> queue = new DelayQueue<>();<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<Procedure> {<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<Procedure> {<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 > 0 && (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 > 0 && (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() < 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 < 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 >= addWorkerStuckPercentage &&<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() < 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 < 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() && !suspended &&<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 && 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 && !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() && !suspended &&<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 && 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() && 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 && !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 < 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() && 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 < 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 < 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() && 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 && !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 < 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() && 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 && !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() && !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 < 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() && !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 < 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) && 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) && 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() && 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() <= corePoolSize) return true;<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span> return (EnvironmentEdgeManager.currentTime() - lastUpdate) < 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() && 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<DelayedWithTimeout> queue = new DelayQueue<>();<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() <= corePoolSize) return true;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span> return (EnvironmentEdgeManager.currentTime() - lastUpdate) < 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<DelayedWithTimeout> queue = new DelayQueue<>();<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<Procedure> {<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<Procedure> {<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 > 0 && (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 > 0 && (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() < 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 < 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 >= addWorkerStuckPercentage &&<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() < 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 < 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() && !suspended &&<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 && 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 && !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() && !suspended &&<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 && 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() && 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 && !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 < 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() && 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 < 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 < 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() && 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 && !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 < 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() && 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 && !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() && !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 < 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() && !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 < 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) && 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) && 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() && 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() <= corePoolSize) return true;<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span> return (EnvironmentEdgeManager.currentTime() - lastUpdate) < 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() && 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<DelayedWithTimeout> queue = new DelayQueue<>();<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() <= corePoolSize) return true;<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span> return (EnvironmentEdgeManager.currentTime() - lastUpdate) < 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<DelayedWithTimeout> queue = new DelayQueue<>();<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<Procedure> {<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<Procedure> {<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 > 0 && (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 > 0 && (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() < 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 < 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 >= addWorkerStuckPercentage &&<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() < 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 < 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>